Commit 9f0b42a6 by Jamie Madill

Add an attachment helper to replace getRenderTarget.

We would like to stop exposing rx::RenderTarget to any GL-layer code, like the Context, or Framebuffer. Then we can pull any necessary information inside the Renderer back-ends. BUG=angle:732 Change-Id: Ifa35218f097c528e616d732bda4bcd8e5f1c3843 Reviewed-on: https://chromium-review.googlesource.com/217029Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 231943bf
...@@ -16,9 +16,31 @@ ...@@ -16,9 +16,31 @@
#include "libGLESv2/FramebufferAttachment.h" #include "libGLESv2/FramebufferAttachment.h"
#include "libGLESv2/renderer/Renderer.h" #include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/renderer/RenderTarget.h" #include "libGLESv2/renderer/RenderTarget.h"
#include "libGLESv2/renderer/d3d/TextureD3D.h"
#include "common/utilities.h" #include "common/utilities.h"
namespace rx
{
RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment)
{
if (attachment->isTexture())
{
gl::Texture *texture = attachment->getTexture();
ASSERT(texture);
TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
return textureD3D->getRenderTarget(attachment->mipLevel(), attachment->layer());
}
gl::Renderbuffer *renderbuffer = attachment->getRenderbuffer();
ASSERT(renderbuffer);
// TODO: cast to RenderbufferD3D
return renderbuffer->getStorage()->getRenderTarget();
}
}
namespace gl namespace gl
{ {
...@@ -578,7 +600,7 @@ void Framebuffer::invalidateSub(const Caps &caps, GLsizei numAttachments, const ...@@ -578,7 +600,7 @@ void Framebuffer::invalidateSub(const Caps &caps, GLsizei numAttachments, const
if (attachment) if (attachment)
{ {
rx::RenderTarget *renderTarget = attachment->getRenderTarget(); rx::RenderTarget *renderTarget = rx::GetAttachmentRenderTarget(attachment);
if (renderTarget) if (renderTarget)
{ {
renderTarget->invalidate(x, y, width, height); renderTarget->invalidate(x, y, width, height);
......
...@@ -113,4 +113,12 @@ class DefaultFramebuffer : public Framebuffer ...@@ -113,4 +113,12 @@ class DefaultFramebuffer : public Framebuffer
} }
namespace rx
{
class RenderTarget;
// TODO: place this in FramebufferD3D.h
RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment);
}
#endif // LIBGLESV2_FRAMEBUFFER_H_ #endif // LIBGLESV2_FRAMEBUFFER_H_
...@@ -135,11 +135,6 @@ GLint TextureAttachment::layer() const ...@@ -135,11 +135,6 @@ GLint TextureAttachment::layer() const
return mIndex.layerIndex; return mIndex.layerIndex;
} }
rx::RenderTarget *TextureAttachment::getRenderTarget()
{
return mTexture->getRenderTarget(mIndex);
}
unsigned int TextureAttachment::getSerial() const unsigned int TextureAttachment::getSerial() const
{ {
return mTexture->getRenderTargetSerial(mIndex); return mTexture->getRenderTargetSerial(mIndex);
...@@ -170,11 +165,6 @@ RenderbufferAttachment::~RenderbufferAttachment() ...@@ -170,11 +165,6 @@ RenderbufferAttachment::~RenderbufferAttachment()
mRenderbuffer.set(NULL); mRenderbuffer.set(NULL);
} }
rx::RenderTarget *RenderbufferAttachment::getRenderTarget()
{
return mRenderbuffer->getStorage()->getRenderTarget();
}
GLsizei RenderbufferAttachment::getWidth() const GLsizei RenderbufferAttachment::getWidth() const
{ {
return mRenderbuffer->getWidth(); return mRenderbuffer->getWidth();
......
...@@ -56,8 +56,6 @@ class FramebufferAttachment ...@@ -56,8 +56,6 @@ class FramebufferAttachment
GLenum getBinding() const { return mBinding; } GLenum getBinding() const { return mBinding; }
// Child class interface // Child class interface
virtual rx::RenderTarget *getRenderTarget() = 0;
virtual GLsizei getWidth() const = 0; virtual GLsizei getWidth() const = 0;
virtual GLsizei getHeight() const = 0; virtual GLsizei getHeight() const = 0;
virtual GLenum getInternalFormat() const = 0; virtual GLenum getInternalFormat() const = 0;
...@@ -98,7 +96,6 @@ class TextureAttachment : public FramebufferAttachment ...@@ -98,7 +96,6 @@ class TextureAttachment : public FramebufferAttachment
virtual GLint mipLevel() const; virtual GLint mipLevel() const;
virtual GLint layer() const; virtual GLint layer() const;
virtual rx::RenderTarget *getRenderTarget();
virtual unsigned int getSerial() const; virtual unsigned int getSerial() const;
virtual Texture *getTexture(); virtual Texture *getTexture();
...@@ -118,8 +115,6 @@ class RenderbufferAttachment : public FramebufferAttachment ...@@ -118,8 +115,6 @@ class RenderbufferAttachment : public FramebufferAttachment
virtual ~RenderbufferAttachment(); virtual ~RenderbufferAttachment();
rx::RenderTarget *getRenderTarget();
virtual GLsizei getWidth() const; virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const; virtual GLsizei getHeight() const;
virtual GLenum getInternalFormat() const; virtual GLenum getInternalFormat() const;
......
...@@ -211,7 +211,7 @@ gl::Error Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl:: ...@@ -211,7 +211,7 @@ gl::Error Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::
gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(colorAttachment); gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(colorAttachment);
if (attachment) if (attachment)
{ {
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getRenderTarget()); RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(attachment);
if (!renderTarget) if (!renderTarget)
{ {
return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null."); return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
...@@ -284,7 +284,7 @@ gl::Error Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl:: ...@@ -284,7 +284,7 @@ gl::Error Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::
gl::FramebufferAttachment *attachment = frameBuffer->getDepthOrStencilbuffer(); gl::FramebufferAttachment *attachment = frameBuffer->getDepthOrStencilbuffer();
if (attachment) if (attachment)
{ {
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getRenderTarget()); RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(attachment);
if (!renderTarget) if (!renderTarget)
{ {
return gl::Error(GL_OUT_OF_MEMORY, "Internal depth stencil view pointer unexpectedly null."); return gl::Error(GL_OUT_OF_MEMORY, "Internal depth stencil view pointer unexpectedly null.");
......
...@@ -823,7 +823,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -823,7 +823,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
renderTargetSerials[colorAttachment] = colorbuffer->getSerial(); renderTargetSerials[colorAttachment] = colorbuffer->getSerial();
// Extract the render target dimensions and view // Extract the render target dimensions and view
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
if (!renderTarget) if (!renderTarget)
{ {
ERR("render target pointer unexpectedly null."); ERR("render target pointer unexpectedly null.");
...@@ -867,7 +867,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -867,7 +867,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
ID3D11DepthStencilView* framebufferDSV = NULL; ID3D11DepthStencilView* framebufferDSV = NULL;
if (depthStencil) if (depthStencil)
{ {
RenderTarget11 *depthStencilRenderTarget = RenderTarget11::makeRenderTarget11(depthStencil->getRenderTarget()); RenderTarget11 *depthStencilRenderTarget = d3d11::GetAttachmentRenderTarget(depthStencil);
if (!depthStencilRenderTarget) if (!depthStencilRenderTarget)
{ {
ERR("render target pointer unexpectedly null."); ERR("render target pointer unexpectedly null.");
...@@ -1943,7 +1943,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -1943,7 +1943,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget11 *sourceRenderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); RenderTarget11 *sourceRenderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
if (!sourceRenderTarget) if (!sourceRenderTarget)
{ {
ERR("Failed to retrieve the render target from the frame buffer."); ERR("Failed to retrieve the render target from the frame buffer.");
...@@ -2004,7 +2004,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2004,7 +2004,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget11 *sourceRenderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); RenderTarget11 *sourceRenderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
if (!sourceRenderTarget) if (!sourceRenderTarget)
{ {
ERR("Failed to retrieve the render target from the frame buffer."); ERR("Failed to retrieve the render target from the frame buffer.");
...@@ -2065,7 +2065,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2065,7 +2065,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget11 *sourceRenderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); RenderTarget11 *sourceRenderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
if (!sourceRenderTarget) if (!sourceRenderTarget)
{ {
ERR("Failed to retrieve the render target from the frame buffer."); ERR("Failed to retrieve the render target from the frame buffer.");
...@@ -2126,7 +2126,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2126,7 +2126,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget11 *sourceRenderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); RenderTarget11 *sourceRenderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
if (!sourceRenderTarget) if (!sourceRenderTarget)
{ {
ERR("Failed to retrieve the render target from the frame buffer."); ERR("Failed to retrieve the render target from the frame buffer.");
...@@ -2500,7 +2500,7 @@ bool Renderer11::getRenderTargetResource(gl::FramebufferAttachment *colorbuffer, ...@@ -2500,7 +2500,7 @@ bool Renderer11::getRenderTargetResource(gl::FramebufferAttachment *colorbuffer,
{ {
ASSERT(colorbuffer != NULL); ASSERT(colorbuffer != NULL);
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
if (renderTarget) if (renderTarget)
{ {
*subresourceIndex = renderTarget->getSubresourceIndex(); *subresourceIndex = renderTarget->getSubresourceIndex();
...@@ -2545,7 +2545,7 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read ...@@ -2545,7 +2545,7 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget *readRenderTarget = readBuffer->getRenderTarget(); RenderTarget *readRenderTarget = GetAttachmentRenderTarget(readBuffer);
for (unsigned int colorAttachment = 0; colorAttachment < gl::IMPLEMENTATION_MAX_DRAW_BUFFERS; colorAttachment++) for (unsigned int colorAttachment = 0; colorAttachment < gl::IMPLEMENTATION_MAX_DRAW_BUFFERS; colorAttachment++)
{ {
...@@ -2559,7 +2559,7 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read ...@@ -2559,7 +2559,7 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget *drawRenderTarget = drawBuffer->getRenderTarget(); RenderTarget *drawRenderTarget = GetAttachmentRenderTarget(drawBuffer);
if (!blitRenderbufferRect(readRect, drawRect, readRenderTarget, drawRenderTarget, filter, scissor, if (!blitRenderbufferRect(readRect, drawRect, readRenderTarget, drawRenderTarget, filter, scissor,
blitRenderTarget, false, false)) blitRenderTarget, false, false))
...@@ -2587,8 +2587,8 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read ...@@ -2587,8 +2587,8 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget *readRenderTarget = readBuffer->getRenderTarget(); RenderTarget *readRenderTarget = GetAttachmentRenderTarget(readBuffer);
RenderTarget *drawRenderTarget = drawBuffer->getRenderTarget(); RenderTarget *drawRenderTarget = GetAttachmentRenderTarget(drawBuffer);
ASSERT(readRenderTarget && drawRenderTarget); ASSERT(readRenderTarget && drawRenderTarget);
if (!blitRenderbufferRect(readRect, drawRect, readRenderTarget, drawRenderTarget, filter, scissor, if (!blitRenderbufferRect(readRect, drawRect, readRenderTarget, drawRenderTarget, filter, scissor,
...@@ -3102,6 +3102,7 @@ void Renderer11::invalidateFBOAttachmentSwizzles(gl::FramebufferAttachment *atta ...@@ -3102,6 +3102,7 @@ void Renderer11::invalidateFBOAttachmentSwizzles(gl::FramebufferAttachment *atta
{ {
ASSERT(attachment->isTexture()); ASSERT(attachment->isTexture());
gl::Texture *texture = attachment->getTexture(); gl::Texture *texture = attachment->getTexture();
TextureStorage *texStorage = texture->getNativeTexture()->getStorageInstance(); TextureStorage *texStorage = texture->getNativeTexture()->getStorageInstance();
if (texStorage) if (texStorage)
{ {
......
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
#include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h" #include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
#include "libGLESv2/renderer/d3d/d3d11/formatutils11.h" #include "libGLESv2/renderer/d3d/d3d11/formatutils11.h"
#include "libGLESv2/renderer/d3d/d3d11/RenderTarget11.h"
#include "libGLESv2/ProgramBinary.h" #include "libGLESv2/ProgramBinary.h"
#include "libGLESv2/Framebuffer.h"
#include "common/debug.h" #include "common/debug.h"
...@@ -1063,6 +1065,12 @@ HRESULT SetDebugName(ID3D11DeviceChild *resource, const char *name) ...@@ -1063,6 +1065,12 @@ HRESULT SetDebugName(ID3D11DeviceChild *resource, const char *name)
#endif #endif
} }
RenderTarget11 *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment)
{
RenderTarget *renderTarget = rx::GetAttachmentRenderTarget(attachment);
return RenderTarget11::makeRenderTarget11(renderTarget);
}
} }
} }
...@@ -15,8 +15,14 @@ ...@@ -15,8 +15,14 @@
#include <vector> #include <vector>
namespace gl
{
class FramebufferAttachment;
}
namespace rx namespace rx
{ {
class RenderTarget11;
namespace gl_d3d11 namespace gl_d3d11
{ {
...@@ -170,6 +176,8 @@ inline void SetBufferData(ID3D11DeviceContext *context, ID3D11Buffer *constantBu ...@@ -170,6 +176,8 @@ inline void SetBufferData(ID3D11DeviceContext *context, ID3D11Buffer *constantBu
context->Unmap(constantBuffer, 0); context->Unmap(constantBuffer, 0);
} }
RenderTarget11 *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment);
} }
} }
......
...@@ -216,9 +216,9 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de ...@@ -216,9 +216,9 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de
if (colorbuffer) if (colorbuffer)
{ {
renderTarget = RenderTarget9::makeRenderTarget9(colorbuffer->getRenderTarget()); renderTarget = d3d9::GetAttachmentRenderTarget(colorbuffer);
} }
if (renderTarget) if (renderTarget)
{ {
source = renderTarget->getSurface(); source = renderTarget->getSurface();
...@@ -233,7 +233,7 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de ...@@ -233,7 +233,7 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de
TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage->getStorageInstance()); TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage->getStorageInstance());
IDirect3DSurface9 *destSurface = storage9->getSurfaceLevel(level, true); IDirect3DSurface9 *destSurface = storage9->getSurfaceLevel(level, true);
bool result = false; bool result = false;
if (destSurface) if (destSurface)
{ {
result = copy(source, sourceRect, destFormat, xoffset, yoffset, destSurface); result = copy(source, sourceRect, destFormat, xoffset, yoffset, destSurface);
...@@ -252,9 +252,9 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de ...@@ -252,9 +252,9 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de
if (colorbuffer) if (colorbuffer)
{ {
renderTarget = RenderTarget9::makeRenderTarget9(colorbuffer->getRenderTarget()); renderTarget = d3d9::GetAttachmentRenderTarget(colorbuffer);
} }
if (renderTarget) if (renderTarget)
{ {
source = renderTarget->getSurface(); source = renderTarget->getSurface();
......
...@@ -368,7 +368,7 @@ bool Image9::copyToSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint ...@@ -368,7 +368,7 @@ bool Image9::copyToSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint
} }
else else
{ {
// UpdateSurface: source must be SYSTEMMEM, dest must be DEFAULT pools // UpdateSurface: source must be SYSTEMMEM, dest must be DEFAULT pools
HRESULT result = device->UpdateSurface(sourceSurface, &rect, destSurface, &point); HRESULT result = device->UpdateSurface(sourceSurface, &rect, destSurface, &point);
UNUSED_ASSERTION_VARIABLE(result); UNUSED_ASSERTION_VARIABLE(result);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -462,9 +462,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -462,9 +462,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
if (colorbuffer) if (colorbuffer)
{ {
renderTarget = RenderTarget9::makeRenderTarget9(colorbuffer->getRenderTarget()); renderTarget = d3d9::GetAttachmentRenderTarget(colorbuffer);
} }
if (renderTarget) if (renderTarget)
{ {
surface = renderTarget->getSurface(); surface = renderTarget->getSurface();
...@@ -481,7 +481,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -481,7 +481,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
IDirect3DSurface9 *renderTargetData = NULL; IDirect3DSurface9 *renderTargetData = NULL;
D3DSURFACE_DESC description; D3DSURFACE_DESC description;
surface->GetDesc(&description); surface->GetDesc(&description);
HRESULT result = device->CreateOffscreenPlainSurface(description.Width, description.Height, description.Format, D3DPOOL_SYSTEMMEM, &renderTargetData, NULL); HRESULT result = device->CreateOffscreenPlainSurface(description.Width, description.Height, description.Format, D3DPOOL_SYSTEMMEM, &renderTargetData, NULL);
if (FAILED(result)) if (FAILED(result))
...@@ -517,7 +517,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -517,7 +517,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
D3DLOCKED_RECT destLock = {0}; D3DLOCKED_RECT destLock = {0};
result = lock(&destLock, &destRect); result = lock(&destLock, &destRect);
if (FAILED(result)) if (FAILED(result))
{ {
ERR("Failed to lock the destination surface (rectangle might be invalid)."); ERR("Failed to lock the destination surface (rectangle might be invalid).");
......
...@@ -1156,10 +1156,10 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1156,10 +1156,10 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
// Apply the render target on the device // Apply the render target on the device
IDirect3DSurface9 *renderTargetSurface = NULL; IDirect3DSurface9 *renderTargetSurface = NULL;
RenderTarget *renderTarget = attachment->getRenderTarget(); RenderTarget9 *renderTarget = d3d9::GetAttachmentRenderTarget(attachment);
if (renderTarget) if (renderTarget)
{ {
renderTargetSurface = RenderTarget9::makeRenderTarget9(renderTarget)->getSurface(); renderTargetSurface = renderTarget->getSurface();
} }
if (!renderTargetSurface) if (!renderTargetSurface)
...@@ -1199,11 +1199,11 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1199,11 +1199,11 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
if (depthStencil) if (depthStencil)
{ {
IDirect3DSurface9 *depthStencilSurface = NULL; IDirect3DSurface9 *depthStencilSurface = NULL;
RenderTarget *depthStencilRenderTarget = depthStencil->getRenderTarget(); rx::RenderTarget9 *depthStencilRenderTarget = d3d9::GetAttachmentRenderTarget(depthStencil);
if (depthStencilRenderTarget) if (depthStencilRenderTarget)
{ {
depthStencilSurface = RenderTarget9::makeRenderTarget9(depthStencilRenderTarget)->getSurface(); depthStencilSurface = depthStencilRenderTarget->getSurface();
} }
if (!depthStencilSurface) if (!depthStencilSurface)
...@@ -2478,11 +2478,11 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle & ...@@ -2478,11 +2478,11 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle &
if (readBuffer) if (readBuffer)
{ {
readRenderTarget = RenderTarget9::makeRenderTarget9(readBuffer->getRenderTarget()); readRenderTarget = d3d9::GetAttachmentRenderTarget(readBuffer);
} }
if (drawBuffer) if (drawBuffer)
{ {
drawRenderTarget = RenderTarget9::makeRenderTarget9(drawBuffer->getRenderTarget()); drawRenderTarget = d3d9::GetAttachmentRenderTarget(drawBuffer);
} }
if (readRenderTarget) if (readRenderTarget)
...@@ -2607,11 +2607,11 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle & ...@@ -2607,11 +2607,11 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle &
if (readBuffer) if (readBuffer)
{ {
readDepthStencil = RenderTarget9::makeRenderTarget9(readBuffer->getRenderTarget()); readDepthStencil = d3d9::GetAttachmentRenderTarget(readBuffer);
} }
if (drawBuffer) if (drawBuffer)
{ {
drawDepthStencil = RenderTarget9::makeRenderTarget9(drawBuffer->getRenderTarget()); drawDepthStencil = d3d9::GetAttachmentRenderTarget(drawBuffer);
} }
if (readDepthStencil) if (readDepthStencil)
...@@ -2655,7 +2655,7 @@ gl::Error Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, ...@@ -2655,7 +2655,7 @@ gl::Error Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y,
if (colorbuffer) if (colorbuffer)
{ {
renderTarget = RenderTarget9::makeRenderTarget9(colorbuffer->getRenderTarget()); renderTarget = d3d9::GetAttachmentRenderTarget(colorbuffer);
} }
if (renderTarget) if (renderTarget)
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include "libGLESv2/renderer/d3d/d3d9/renderer9_utils.h" #include "libGLESv2/renderer/d3d/d3d9/renderer9_utils.h"
#include "libGLESv2/renderer/d3d/d3d9/formatutils9.h" #include "libGLESv2/renderer/d3d/d3d9/formatutils9.h"
#include "libGLESv2/formatutils.h" #include "libGLESv2/formatutils.h"
#include "libGLESv2/Framebuffer.h"
#include "libGLESv2/renderer/d3d/d3d9/RenderTarget9.h"
#include "common/mathutil.h" #include "common/mathutil.h"
#include "common/debug.h" #include "common/debug.h"
...@@ -531,6 +533,12 @@ void MakeValidSize(bool isImage, D3DFORMAT format, GLsizei *requestWidth, GLsize ...@@ -531,6 +533,12 @@ void MakeValidSize(bool isImage, D3DFORMAT format, GLsizei *requestWidth, GLsize
*levelOffset = upsampleCount; *levelOffset = upsampleCount;
} }
RenderTarget9 *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment)
{
RenderTarget *renderTarget = rx::GetAttachmentRenderTarget(attachment);
return RenderTarget9::makeRenderTarget9(renderTarget);
}
} }
} }
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// found in the LICENSE file. // found in the LICENSE file.
// //
// renderer9_utils.h: Conversion functions and other utility routines // renderer9_utils.h: Conversion functions and other utility routines
// specific to the D3D9 renderer // specific to the D3D9 renderer
#ifndef LIBGLESV2_RENDERER_RENDERER9_UTILS_H #ifndef LIBGLESV2_RENDERER_RENDERER9_UTILS_H
...@@ -13,8 +13,14 @@ ...@@ -13,8 +13,14 @@
#include "libGLESv2/angletypes.h" #include "libGLESv2/angletypes.h"
#include "libGLESv2/Caps.h" #include "libGLESv2/Caps.h"
namespace gl
{
class FramebufferAttachment;
}
namespace rx namespace rx
{ {
class RenderTarget9;
namespace gl_d3d9 namespace gl_d3d9
{ {
...@@ -68,6 +74,8 @@ inline bool isDeviceLostError(HRESULT errorCode) ...@@ -68,6 +74,8 @@ inline bool isDeviceLostError(HRESULT errorCode)
} }
} }
RenderTarget9 *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment