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/217330
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/Framebuffer.cpp b/src/libGLESv2/Framebuffer.cpp
index 4430e50..e82e34d 100644
--- a/src/libGLESv2/Framebuffer.cpp
+++ b/src/libGLESv2/Framebuffer.cpp
@@ -29,6 +29,7 @@
gl::Texture *texture = attachment->getTexture();
ASSERT(texture);
TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
+
return textureD3D->getRenderTarget(attachment->mipLevel(), attachment->layer());
}
@@ -39,6 +40,24 @@
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
diff --git a/src/libGLESv2/Framebuffer.h b/src/libGLESv2/Framebuffer.h
index 70998ff..cc12d22 100644
--- a/src/libGLESv2/Framebuffer.h
+++ b/src/libGLESv2/Framebuffer.h
@@ -119,6 +119,8 @@
// TODO: place this in FramebufferD3D.h
RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment);
+unsigned int GetAttachmentSerial(gl::FramebufferAttachment *attachment);
+
}
#endif // LIBGLESV2_FRAMEBUFFER_H_
diff --git a/src/libGLESv2/FramebufferAttachment.cpp b/src/libGLESv2/FramebufferAttachment.cpp
index 007b846..7145e07 100644
--- a/src/libGLESv2/FramebufferAttachment.cpp
+++ b/src/libGLESv2/FramebufferAttachment.cpp
@@ -135,11 +135,6 @@
return mIndex.layerIndex;
}
-unsigned int TextureAttachment::getSerial() const
-{
- return mTexture->getRenderTargetSerial(mIndex);
-}
-
Texture *TextureAttachment::getTexture()
{
return mTexture.get();
@@ -190,11 +185,6 @@
return mRenderbuffer->getStorage()->getSamples();
}
-unsigned int RenderbufferAttachment::getSerial() const
-{
- return mRenderbuffer->getStorage()->getSerial();
-}
-
GLuint RenderbufferAttachment::id() const
{
return mRenderbuffer->id();
diff --git a/src/libGLESv2/FramebufferAttachment.h b/src/libGLESv2/FramebufferAttachment.h
index 90c50d0..8938540 100644
--- a/src/libGLESv2/FramebufferAttachment.h
+++ b/src/libGLESv2/FramebufferAttachment.h
@@ -62,8 +62,6 @@
virtual GLenum getActualFormat() const = 0;
virtual GLsizei getSamples() const = 0;
- virtual unsigned int getSerial() const = 0;
-
virtual GLuint id() const = 0;
virtual GLenum type() const = 0;
virtual GLint mipLevel() const = 0;
@@ -96,8 +94,6 @@
virtual GLint mipLevel() const;
virtual GLint layer() const;
- virtual unsigned int getSerial() const;
-
virtual Texture *getTexture();
virtual Renderbuffer *getRenderbuffer();
@@ -121,8 +117,6 @@
virtual GLenum getActualFormat() const;
virtual GLsizei getSamples() const;
- virtual unsigned int getSerial() const;
-
virtual GLuint id() const;
virtual GLenum type() const;
virtual GLint mipLevel() const;
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 528eb10..396dbb5 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -14,7 +14,6 @@
#include "libGLESv2/formatutils.h"
#include "libGLESv2/Renderbuffer.h"
#include "libGLESv2/renderer/Image.h"
-#include "libGLESv2/renderer/RenderTarget.h"
#include "libGLESv2/renderer/d3d/TextureStorage.h"
#include "libEGL/Surface.h"
@@ -179,16 +178,6 @@
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)
: Texture(impl, id, GL_TEXTURE_2D)
{
diff --git a/src/libGLESv2/Texture.h b/src/libGLESv2/Texture.h
index 13e4496..3838912 100644
--- a/src/libGLESv2/Texture.h
+++ b/src/libGLESv2/Texture.h
@@ -99,11 +99,6 @@
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:
DISALLOW_COPY_AND_ASSIGN(Texture);
};
diff --git a/src/libGLESv2/renderer/TextureImpl.h b/src/libGLESv2/renderer/TextureImpl.h
index c34485a..9ac3ec1 100644
--- a/src/libGLESv2/renderer/TextureImpl.h
+++ b/src/libGLESv2/renderer/TextureImpl.h
@@ -29,7 +29,6 @@
{
class Image;
-class RenderTarget;
class Renderer;
class TextureStorageInterface;
@@ -58,9 +57,6 @@
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 releaseTexImage() = 0;
};
diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.h b/src/libGLESv2/renderer/d3d/TextureD3D.h
index 7f21630..e8fbe84 100644
--- a/src/libGLESv2/renderer/d3d/TextureD3D.h
+++ b/src/libGLESv2/renderer/d3d/TextureD3D.h
@@ -24,6 +24,7 @@
class Image;
class ImageD3D;
class Renderer;
+class RenderTarget;
class TextureStorageInterface;
class TextureStorageInterface2D;
class TextureStorageInterfaceCube;
@@ -51,6 +52,9 @@
bool isImmutable() const { return mImmutable; }
+ virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
+ virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
+
protected:
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,
@@ -111,9 +115,8 @@
virtual void generateMipmaps();
- virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
+ virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D);
@@ -168,9 +171,8 @@
virtual void generateMipmaps();
- virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
+ virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube);
@@ -225,10 +227,9 @@
virtual void generateMipmaps();
- virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
- virtual RenderTarget *getRenderTarget(GLint level);
+ RenderTarget *getRenderTarget(GLint level);
virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
+ virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D);
@@ -282,9 +283,8 @@
virtual void generateMipmaps();
- virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
+ virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray);
diff --git a/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp b/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
index 10d6bbe..753a4ca 100644
--- a/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
@@ -820,7 +820,7 @@
return false;
}
- renderTargetSerials[colorAttachment] = colorbuffer->getSerial();
+ renderTargetSerials[colorAttachment] = GetAttachmentSerial(colorbuffer);
// Extract the render target dimensions and view
RenderTarget11 *renderTarget = d3d11::GetAttachmentRenderTarget(colorbuffer);
@@ -850,18 +850,18 @@
}
}
- // Get the depth stencil render buffer and serials
+ // Get the depth stencil render buffter and serials
gl::FramebufferAttachment *depthStencil = framebuffer->getDepthbuffer();
unsigned int depthbufferSerial = 0;
unsigned int stencilbufferSerial = 0;
if (depthStencil)
{
- depthbufferSerial = depthStencil->getSerial();
+ depthbufferSerial = GetAttachmentSerial(depthStencil);
}
else if (framebuffer->getStencilbuffer())
{
depthStencil = framebuffer->getStencilbuffer();
- stencilbufferSerial = depthStencil->getSerial();
+ stencilbufferSerial = GetAttachmentSerial(depthStencil);
}
ID3D11DepthStencilView* framebufferDSV = NULL;
diff --git a/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp b/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
index 4ae077d..cabec08 100644
--- a/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
+++ b/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
@@ -1150,7 +1150,7 @@
}
bool renderTargetChanged = false;
- unsigned int renderTargetSerial = attachment->getSerial();
+ unsigned int renderTargetSerial = GetAttachmentSerial(attachment);
if (renderTargetSerial != mAppliedRenderTargetSerial)
{
// Apply the render target on the device
@@ -1180,12 +1180,12 @@
unsigned int stencilbufferSerial = 0;
if (depthStencil)
{
- depthbufferSerial = depthStencil->getSerial();
+ depthbufferSerial = GetAttachmentSerial(depthStencil);
}
else if (framebuffer->getStencilbuffer())
{
depthStencil = framebuffer->getStencilbuffer();
- stencilbufferSerial = depthStencil->getSerial();
+ stencilbufferSerial = GetAttachmentSerial(depthStencil);
}
if (depthbufferSerial != mAppliedDepthbufferSerial ||