Commit 612e2e44 by Jamie Madill

Add a helper to replace FBO attachment's getSerial.

Ideally we could store a render target serial in the render target itself. For now, this helper function allows us to finally stop exposing rx::RenderTarget from gl::Texture. BUG=angle:732 Change-Id: I4ffc5e0af6f0542212ad4e74adced21ebbd89462 Reviewed-on: https://chromium-review.googlesource.com/217330Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 9f0b42a6
...@@ -29,6 +29,7 @@ RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment) ...@@ -29,6 +29,7 @@ RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment)
gl::Texture *texture = attachment->getTexture(); gl::Texture *texture = attachment->getTexture();
ASSERT(texture); ASSERT(texture);
TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation()); TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
return textureD3D->getRenderTarget(attachment->mipLevel(), attachment->layer()); return textureD3D->getRenderTarget(attachment->mipLevel(), attachment->layer());
} }
...@@ -39,6 +40,24 @@ RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment) ...@@ -39,6 +40,24 @@ RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment)
return renderbuffer->getStorage()->getRenderTarget(); return renderbuffer->getStorage()->getRenderTarget();
} }
// Note: RenderTarget serials should ideally be in the RenderTargets themselves.
unsigned int GetAttachmentSerial(gl::FramebufferAttachment *attachment)
{
if (attachment->isTexture())
{
gl::Texture *texture = attachment->getTexture();
ASSERT(texture);
TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
return textureD3D->getRenderTargetSerial(attachment->mipLevel(), attachment->layer());
}
gl::Renderbuffer *renderbuffer = attachment->getRenderbuffer();
ASSERT(renderbuffer);
// TODO: cast to RenderbufferD3D
return renderbuffer->getStorage()->getSerial();
}
} }
namespace gl namespace gl
......
...@@ -119,6 +119,8 @@ class RenderTarget; ...@@ -119,6 +119,8 @@ class RenderTarget;
// TODO: place this in FramebufferD3D.h // TODO: place this in FramebufferD3D.h
RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment); RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment);
unsigned int GetAttachmentSerial(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;
} }
unsigned int TextureAttachment::getSerial() const
{
return mTexture->getRenderTargetSerial(mIndex);
}
Texture *TextureAttachment::getTexture() Texture *TextureAttachment::getTexture()
{ {
return mTexture.get(); return mTexture.get();
...@@ -190,11 +185,6 @@ GLsizei RenderbufferAttachment::getSamples() const ...@@ -190,11 +185,6 @@ GLsizei RenderbufferAttachment::getSamples() const
return mRenderbuffer->getStorage()->getSamples(); return mRenderbuffer->getStorage()->getSamples();
} }
unsigned int RenderbufferAttachment::getSerial() const
{
return mRenderbuffer->getStorage()->getSerial();
}
GLuint RenderbufferAttachment::id() const GLuint RenderbufferAttachment::id() const
{ {
return mRenderbuffer->id(); return mRenderbuffer->id();
......
...@@ -62,8 +62,6 @@ class FramebufferAttachment ...@@ -62,8 +62,6 @@ class FramebufferAttachment
virtual GLenum getActualFormat() const = 0; virtual GLenum getActualFormat() const = 0;
virtual GLsizei getSamples() const = 0; virtual GLsizei getSamples() const = 0;
virtual unsigned int getSerial() const = 0;
virtual GLuint id() const = 0; virtual GLuint id() const = 0;
virtual GLenum type() const = 0; virtual GLenum type() const = 0;
virtual GLint mipLevel() const = 0; virtual GLint mipLevel() const = 0;
...@@ -96,8 +94,6 @@ class TextureAttachment : public FramebufferAttachment ...@@ -96,8 +94,6 @@ class TextureAttachment : public FramebufferAttachment
virtual GLint mipLevel() const; virtual GLint mipLevel() const;
virtual GLint layer() const; virtual GLint layer() const;
virtual unsigned int getSerial() const;
virtual Texture *getTexture(); virtual Texture *getTexture();
virtual Renderbuffer *getRenderbuffer(); virtual Renderbuffer *getRenderbuffer();
...@@ -121,8 +117,6 @@ class RenderbufferAttachment : public FramebufferAttachment ...@@ -121,8 +117,6 @@ class RenderbufferAttachment : public FramebufferAttachment
virtual GLenum getActualFormat() const; virtual GLenum getActualFormat() const;
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const;
virtual GLuint id() const; virtual GLuint id() const;
virtual GLenum type() const; virtual GLenum type() const;
virtual GLint mipLevel() const; virtual GLint mipLevel() const;
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "libGLESv2/formatutils.h" #include "libGLESv2/formatutils.h"
#include "libGLESv2/Renderbuffer.h" #include "libGLESv2/Renderbuffer.h"
#include "libGLESv2/renderer/Image.h" #include "libGLESv2/renderer/Image.h"
#include "libGLESv2/renderer/RenderTarget.h"
#include "libGLESv2/renderer/d3d/TextureStorage.h" #include "libGLESv2/renderer/d3d/TextureStorage.h"
#include "libEGL/Surface.h" #include "libEGL/Surface.h"
...@@ -179,16 +178,6 @@ const rx::Image *Texture::getBaseLevelImage() const ...@@ -179,16 +178,6 @@ const rx::Image *Texture::getBaseLevelImage() const
return (getImplementation()->getLayerCount(0) > 0 ? getImplementation()->getImage(0, 0) : NULL); return (getImplementation()->getLayerCount(0) > 0 ? getImplementation()->getImage(0, 0) : NULL);
} }
rx::RenderTarget *Texture::getRenderTarget(const ImageIndex &index)
{
return mTexture->getRenderTarget(index.mipIndex, index.layerIndex);
}
unsigned int Texture::getRenderTargetSerial(const ImageIndex &index)
{
return mTexture->getRenderTargetSerial(index.mipIndex, index.layerIndex);
}
Texture2D::Texture2D(rx::TextureImpl *impl, GLuint id) Texture2D::Texture2D(rx::TextureImpl *impl, GLuint id)
: Texture(impl, id, GL_TEXTURE_2D) : Texture(impl, id, GL_TEXTURE_2D)
{ {
......
...@@ -99,11 +99,6 @@ class Texture : public RefCountObject ...@@ -99,11 +99,6 @@ class Texture : public RefCountObject
const rx::Image *getBaseLevelImage() const; const rx::Image *getBaseLevelImage() const;
// TODO: move these to TextureD3D
friend class TextureAttachment;
rx::RenderTarget *getRenderTarget(const ImageIndex &index);
unsigned int getRenderTargetSerial(const ImageIndex &index);
private: private:
DISALLOW_COPY_AND_ASSIGN(Texture); DISALLOW_COPY_AND_ASSIGN(Texture);
}; };
......
...@@ -29,7 +29,6 @@ namespace rx ...@@ -29,7 +29,6 @@ namespace rx
{ {
class Image; class Image;
class RenderTarget;
class Renderer; class Renderer;
class TextureStorageInterface; class TextureStorageInterface;
...@@ -58,9 +57,6 @@ class TextureImpl ...@@ -58,9 +57,6 @@ class TextureImpl
virtual void generateMipmaps() = 0; virtual void generateMipmaps() = 0;
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
virtual void bindTexImage(egl::Surface *surface) = 0; virtual void bindTexImage(egl::Surface *surface) = 0;
virtual void releaseTexImage() = 0; virtual void releaseTexImage() = 0;
}; };
......
...@@ -24,6 +24,7 @@ namespace rx ...@@ -24,6 +24,7 @@ namespace rx
class Image; class Image;
class ImageD3D; class ImageD3D;
class Renderer; class Renderer;
class RenderTarget;
class TextureStorageInterface; class TextureStorageInterface;
class TextureStorageInterface2D; class TextureStorageInterface2D;
class TextureStorageInterfaceCube; class TextureStorageInterfaceCube;
...@@ -51,6 +52,9 @@ class TextureD3D : public TextureImpl ...@@ -51,6 +52,9 @@ class TextureD3D : public TextureImpl
bool isImmutable() const { return mImmutable; } bool isImmutable() const { return mImmutable; }
virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
protected: protected:
void setImage(const gl::PixelUnpackState &unpack, GLenum type, const void *pixels, Image *image); void setImage(const gl::PixelUnpackState &unpack, GLenum type, const void *pixels, Image *image);
bool subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, bool subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
...@@ -111,9 +115,8 @@ class TextureD3D_2D : public TextureD3D ...@@ -111,9 +115,8 @@ class TextureD3D_2D : public TextureD3D
virtual void generateMipmaps(); virtual void generateMipmaps();
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
virtual RenderTarget *getRenderTarget(GLint level, GLint layer); virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D);
...@@ -168,9 +171,8 @@ class TextureD3D_Cube : public TextureD3D ...@@ -168,9 +171,8 @@ class TextureD3D_Cube : public TextureD3D
virtual void generateMipmaps(); virtual void generateMipmaps();
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
virtual RenderTarget *getRenderTarget(GLint level, GLint layer); virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube); DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube);
...@@ -225,10 +227,9 @@ class TextureD3D_3D : public TextureD3D ...@@ -225,10 +227,9 @@ class TextureD3D_3D : public TextureD3D
virtual void generateMipmaps(); virtual void generateMipmaps();
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer); RenderTarget *getRenderTarget(GLint level);
virtual RenderTarget *getRenderTarget(GLint level);
virtual RenderTarget *getRenderTarget(GLint level, GLint layer); virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D);
...@@ -282,9 +283,8 @@ class TextureD3D_2DArray : public TextureD3D ...@@ -282,9 +283,8 @@ class TextureD3D_2DArray : public TextureD3D
virtual void generateMipmaps(); virtual void generateMipmaps();
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
virtual RenderTarget *getRenderTarget(GLint level, GLint layer); virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray);
......
...@@ -820,7 +820,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -820,7 +820,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
return false; return false;
} }
renderTargetSerials[colorAttachment] = colorbuffer->getSerial(); renderTargetSerials[colorAttachment] = GetAttachmentSerial(colorbuffer);
// Extract the render target dimensions and view // Extract the render target dimensions and view
RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer); RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
...@@ -850,18 +850,18 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -850,18 +850,18 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
} }
} }
// Get the depth stencil render buffer and serials // Get the depth stencil render buffter and serials
gl::FramebufferAttachment *depthStencil = framebuffer->getDepthbuffer(); gl::FramebufferAttachment *depthStencil = framebuffer->getDepthbuffer();
unsigned int depthbufferSerial = 0; unsigned int depthbufferSerial = 0;
unsigned int stencilbufferSerial = 0; unsigned int stencilbufferSerial = 0;
if (depthStencil) if (depthStencil)
{ {
depthbufferSerial = depthStencil->getSerial(); depthbufferSerial = GetAttachmentSerial(depthStencil);
} }
else if (framebuffer->getStencilbuffer()) else if (framebuffer->getStencilbuffer())
{ {
depthStencil = framebuffer->getStencilbuffer(); depthStencil = framebuffer->getStencilbuffer();
stencilbufferSerial = depthStencil->getSerial(); stencilbufferSerial = GetAttachmentSerial(depthStencil);
} }
ID3D11DepthStencilView* framebufferDSV = NULL; ID3D11DepthStencilView* framebufferDSV = NULL;
......
...@@ -1150,7 +1150,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1150,7 +1150,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
} }
bool renderTargetChanged = false; bool renderTargetChanged = false;
unsigned int renderTargetSerial = attachment->getSerial(); unsigned int renderTargetSerial = GetAttachmentSerial(attachment);
if (renderTargetSerial != mAppliedRenderTargetSerial) if (renderTargetSerial != mAppliedRenderTargetSerial)
{ {
// Apply the render target on the device // Apply the render target on the device
...@@ -1180,12 +1180,12 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1180,12 +1180,12 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
unsigned int stencilbufferSerial = 0; unsigned int stencilbufferSerial = 0;
if (depthStencil) if (depthStencil)
{ {
depthbufferSerial = depthStencil->getSerial(); depthbufferSerial = GetAttachmentSerial(depthStencil);
} }
else if (framebuffer->getStencilbuffer()) else if (framebuffer->getStencilbuffer())
{ {
depthStencil = framebuffer->getStencilbuffer(); depthStencil = framebuffer->getStencilbuffer();
stencilbufferSerial = depthStencil->getSerial(); stencilbufferSerial = GetAttachmentSerial(depthStencil);
} }
if (depthbufferSerial != mAppliedDepthbufferSerial || if (depthbufferSerial != mAppliedDepthbufferSerial ||
......
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