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)
gl::Texture *texture = attachment->getTexture();
ASSERT(texture);
TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
return textureD3D->getRenderTarget(attachment->mipLevel(), attachment->layer());
}
......@@ -39,6 +40,24 @@ RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment)
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
......
......@@ -119,6 +119,8 @@ class RenderTarget;
// TODO: place this in FramebufferD3D.h
RenderTarget *GetAttachmentRenderTarget(gl::FramebufferAttachment *attachment);
unsigned int GetAttachmentSerial(gl::FramebufferAttachment *attachment);
}
#endif // LIBGLESV2_FRAMEBUFFER_H_
......@@ -135,11 +135,6 @@ GLint TextureAttachment::layer() const
return mIndex.layerIndex;
}
unsigned int TextureAttachment::getSerial() const
{
return mTexture->getRenderTargetSerial(mIndex);
}
Texture *TextureAttachment::getTexture()
{
return mTexture.get();
......@@ -190,11 +185,6 @@ GLsizei RenderbufferAttachment::getSamples() const
return mRenderbuffer->getStorage()->getSamples();
}
unsigned int RenderbufferAttachment::getSerial() const
{
return mRenderbuffer->getStorage()->getSerial();
}
GLuint RenderbufferAttachment::id() const
{
return mRenderbuffer->id();
......
......@@ -62,8 +62,6 @@ class FramebufferAttachment
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 @@ class TextureAttachment : public FramebufferAttachment
virtual GLint mipLevel() const;
virtual GLint layer() const;
virtual unsigned int getSerial() const;
virtual Texture *getTexture();
virtual Renderbuffer *getRenderbuffer();
......@@ -121,8 +117,6 @@ class RenderbufferAttachment : public FramebufferAttachment
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;
......
......@@ -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 @@ const rx::Image *Texture::getBaseLevelImage() const
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)
{
......
......@@ -99,11 +99,6 @@ class Texture : public RefCountObject
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);
};
......
......@@ -29,7 +29,6 @@ namespace rx
{
class Image;
class RenderTarget;
class Renderer;
class TextureStorageInterface;
......@@ -58,9 +57,6 @@ class TextureImpl
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;
};
......
......@@ -24,6 +24,7 @@ namespace rx
class Image;
class ImageD3D;
class Renderer;
class RenderTarget;
class TextureStorageInterface;
class TextureStorageInterface2D;
class TextureStorageInterfaceCube;
......@@ -51,6 +52,9 @@ class TextureD3D : public TextureImpl
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 @@ class TextureD3D_2D : public TextureD3D
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 @@ class TextureD3D_Cube : public TextureD3D
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 @@ class TextureD3D_3D : public TextureD3D
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 @@ class TextureD3D_2DArray : public TextureD3D
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);
......
......@@ -820,7 +820,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
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 @@ 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();
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;
......
......@@ -1150,7 +1150,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
}
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 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
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 ||
......
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