Commit 3c7fa226 by Jamie Madill

Rename Renderbuffer to FramebufferAttachment.

Part of the refactoring effort to clean up our classes for FBO attachments and Renderbuffers. BUG=angle:660 Change-Id: Id23df904f56499568159611b66c8922b9dce6a3d Reviewed-on: https://chromium-review.googlesource.com/201832Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 6f38f823
......@@ -1105,7 +1105,7 @@ Texture *Context::getTexture(GLuint handle)
return mResourceManager->getTexture(handle);
}
Renderbuffer *Context::getRenderbuffer(GLuint handle)
FramebufferAttachment *Context::getRenderbuffer(GLuint handle)
{
return mResourceManager->getRenderbuffer(handle);
}
......@@ -1440,7 +1440,7 @@ void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum inter
return;
}
Renderbuffer *renderbufferObject = mState.renderbuffer.get();
FramebufferAttachment *renderbufferObject = mState.renderbuffer.get();
renderbufferObject->setStorage(renderbuffer);
}
......@@ -1884,7 +1884,7 @@ void Context::getIntegerv(GLenum pname, GLint *params)
case GL_ALPHA_BITS:
{
gl::Framebuffer *framebuffer = getDrawFramebuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getFirstColorbuffer();
gl::FramebufferAttachment *colorbuffer = framebuffer->getFirstColorbuffer();
if (colorbuffer)
{
......@@ -1905,7 +1905,7 @@ void Context::getIntegerv(GLenum pname, GLint *params)
case GL_DEPTH_BITS:
{
gl::Framebuffer *framebuffer = getDrawFramebuffer();
gl::Renderbuffer *depthbuffer = framebuffer->getDepthbuffer();
gl::FramebufferAttachment *depthbuffer = framebuffer->getDepthbuffer();
if (depthbuffer)
{
......@@ -1920,7 +1920,7 @@ void Context::getIntegerv(GLenum pname, GLint *params)
case GL_STENCIL_BITS:
{
gl::Framebuffer *framebuffer = getDrawFramebuffer();
gl::Renderbuffer *stencilbuffer = framebuffer->getStencilbuffer();
gl::FramebufferAttachment *stencilbuffer = framebuffer->getStencilbuffer();
if (stencilbuffer)
{
......@@ -3348,12 +3348,12 @@ void Context::getCurrentReadFormatType(GLenum *internalFormat, GLenum *format, G
Framebuffer *framebuffer = getReadFramebuffer();
ASSERT(framebuffer && framebuffer->completeness() == GL_FRAMEBUFFER_COMPLETE);
Renderbuffer *renderbuffer = framebuffer->getReadColorbuffer();
ASSERT(renderbuffer);
FramebufferAttachment *attachment = framebuffer->getReadColorbuffer();
ASSERT(attachment);
*internalFormat = renderbuffer->getActualFormat();
*format = gl::GetFormat(renderbuffer->getActualFormat(), mClientVersion);
*type = gl::GetType(renderbuffer->getActualFormat(), mClientVersion);
*internalFormat = attachment->getActualFormat();
*format = gl::GetFormat(attachment->getActualFormat(), mClientVersion);
*type = gl::GetType(attachment->getActualFormat(), mClientVersion);
}
void Context::detachBuffer(GLuint buffer)
......@@ -3393,7 +3393,7 @@ void Context::detachTexture(GLuint texture)
// [OpenGL ES 2.0.24] section 4.4 page 112:
// If a texture object is deleted while its image is attached to the currently bound framebuffer, then it is
// as if FramebufferTexture2D had been called, with a texture of 0, for each attachment point to which this
// as if Texture2DAttachment had been called, with a texture of 0, for each attachment point to which this
// image was attached in the currently bound framebuffer.
Framebuffer *readFramebuffer = getReadFramebuffer();
......@@ -3883,17 +3883,17 @@ size_t Context::getBoundFramebufferTextureSerials(FramebufferTextureSerialArray
Framebuffer *drawFramebuffer = getDrawFramebuffer();
for (unsigned int i = 0; i < IMPLEMENTATION_MAX_DRAW_BUFFERS; i++)
{
Renderbuffer *renderBuffer = drawFramebuffer->getColorbuffer(i);
if (renderBuffer && renderBuffer->isTexture())
FramebufferAttachment *attachment = drawFramebuffer->getColorbuffer(i);
if (attachment && attachment->isTexture())
{
(*outSerialArray)[serialCount++] = renderBuffer->getTextureSerial();
(*outSerialArray)[serialCount++] = attachment->getTextureSerial();
}
}
Renderbuffer *depthStencilBuffer = drawFramebuffer->getDepthOrStencilbuffer();
if (depthStencilBuffer && depthStencilBuffer->isTexture())
FramebufferAttachment *depthStencilAttachment = drawFramebuffer->getDepthOrStencilbuffer();
if (depthStencilAttachment && depthStencilAttachment->isTexture())
{
(*outSerialArray)[serialCount++] = depthStencilBuffer->getTextureSerial();
(*outSerialArray)[serialCount++] = depthStencilAttachment->getTextureSerial();
}
std::sort(outSerialArray->begin(), outSerialArray->begin() + serialCount);
......@@ -3958,43 +3958,43 @@ void Context::invalidateFrameBuffer(GLenum target, GLsizei numAttachments, const
if (attachments[i] >= GL_COLOR_ATTACHMENT0 && attachments[i] <= GL_COLOR_ATTACHMENT15)
{
gl::Renderbuffer *renderBuffer = frameBuffer->getColorbuffer(attachments[i] - GL_COLOR_ATTACHMENT0);
if (renderBuffer)
gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(attachments[i] - GL_COLOR_ATTACHMENT0);
if (attachment)
{
renderTarget = renderBuffer->getRenderTarget();
renderTarget = attachment->getRenderTarget();
}
}
else if (attachments[i] == GL_COLOR)
{
gl::Renderbuffer *renderBuffer = frameBuffer->getColorbuffer(0);
if (renderBuffer)
gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(0);
if (attachment)
{
renderTarget = renderBuffer->getRenderTarget();
renderTarget = attachment->getRenderTarget();
}
}
else
{
gl::Renderbuffer *renderBuffer = NULL;
gl::FramebufferAttachment *attachment = NULL;
switch (attachments[i])
{
case GL_DEPTH_ATTACHMENT:
case GL_DEPTH:
renderBuffer = frameBuffer->getDepthbuffer();
attachment = frameBuffer->getDepthbuffer();
break;
case GL_STENCIL_ATTACHMENT:
case GL_STENCIL:
renderBuffer = frameBuffer->getStencilbuffer();
attachment = frameBuffer->getStencilbuffer();
break;
case GL_DEPTH_STENCIL_ATTACHMENT:
renderBuffer = frameBuffer->getDepthOrStencilbuffer();
attachment = frameBuffer->getDepthOrStencilbuffer();
break;
default:
UNREACHABLE();
}
if (renderBuffer)
if (attachment)
{
renderTarget = renderBuffer->getDepthStencil();
renderTarget = attachment->getDepthStencil();
}
}
......
......@@ -50,7 +50,7 @@ class TextureCubeMap;
class Texture3D;
class Texture2DArray;
class Framebuffer;
class Renderbuffer;
class FramebufferAttachment;
class RenderbufferStorage;
class Colorbuffer;
class Depthbuffer;
......@@ -100,7 +100,7 @@ struct State
BindingPointer<Buffer> arrayBuffer;
GLuint readFramebuffer;
GLuint drawFramebuffer;
BindingPointer<Renderbuffer> renderbuffer;
BindingPointer<FramebufferAttachment> renderbuffer;
GLuint currentProgram;
VertexAttribCurrentValueData vertexAttribCurrentValues[MAX_VERTEX_ATTRIBS]; // From glVertexAttrib
......@@ -331,7 +331,7 @@ class Context
Program *getProgram(GLuint handle) const;
Texture *getTexture(GLuint handle);
Framebuffer *getFramebuffer(GLuint handle) const;
Renderbuffer *getRenderbuffer(GLuint handle);
FramebufferAttachment *getRenderbuffer(GLuint handle);
VertexArray *getVertexArray(GLuint handle) const;
Sampler *getSampler(GLuint handle) const;
Query *getQuery(GLuint handle, bool create, GLenum type);
......
......@@ -42,7 +42,7 @@ Framebuffer::~Framebuffer()
mStencilbuffer.set(NULL, GL_NONE, 0, 0);
}
Renderbuffer *Framebuffer::lookupRenderbuffer(GLenum type, GLuint handle, GLint level, GLint layer) const
FramebufferAttachment *Framebuffer::lookupAttachment(GLenum type, GLuint handle, GLint level, GLint layer) const
{
gl::Context *context = gl::getContext();
......@@ -59,7 +59,7 @@ Renderbuffer *Framebuffer::lookupRenderbuffer(GLenum type, GLuint handle, GLint
Texture *texture = context->getTexture(handle);
if (texture && texture->getTarget() == GL_TEXTURE_2D)
{
return static_cast<Texture2D*>(texture)->getRenderbuffer(level);
return static_cast<Texture2D*>(texture)->getAttachment(level);
}
else
{
......@@ -77,7 +77,7 @@ Renderbuffer *Framebuffer::lookupRenderbuffer(GLenum type, GLuint handle, GLint
Texture *texture = context->getTexture(handle);
if (texture && texture->getTarget() == GL_TEXTURE_CUBE_MAP)
{
return static_cast<TextureCubeMap*>(texture)->getRenderbuffer(type, level);
return static_cast<TextureCubeMap*>(texture)->getAttachment(type, level);
}
else
{
......@@ -90,7 +90,7 @@ Renderbuffer *Framebuffer::lookupRenderbuffer(GLenum type, GLuint handle, GLint
Texture *texture = context->getTexture(handle);
if (texture && texture->getTarget() == GL_TEXTURE_3D)
{
return static_cast<Texture3D*>(texture)->getRenderbuffer(level, layer);
return static_cast<Texture3D*>(texture)->getAttachment(level, layer);
}
else
{
......@@ -103,7 +103,7 @@ Renderbuffer *Framebuffer::lookupRenderbuffer(GLenum type, GLuint handle, GLint
Texture *texture = context->getTexture(handle);
if (texture && texture->getTarget() == GL_TEXTURE_2D_ARRAY)
{
return static_cast<Texture2DArray*>(texture)->getRenderbuffer(level, layer);
return static_cast<Texture2DArray*>(texture)->getAttachment(level, layer);
}
else
{
......@@ -120,10 +120,10 @@ Renderbuffer *Framebuffer::lookupRenderbuffer(GLenum type, GLuint handle, GLint
void Framebuffer::setColorbuffer(unsigned int colorAttachment, GLenum type, GLuint colorbuffer, GLint level, GLint layer)
{
ASSERT(colorAttachment < IMPLEMENTATION_MAX_DRAW_BUFFERS);
Renderbuffer *renderBuffer = lookupRenderbuffer(type, colorbuffer, level, layer);
if (renderBuffer)
FramebufferAttachment *attachment = lookupAttachment(type, colorbuffer, level, layer);
if (attachment)
{
mColorbuffers[colorAttachment].set(renderBuffer, type, level, layer);
mColorbuffers[colorAttachment].set(attachment, type, level, layer);
}
else
{
......@@ -133,10 +133,10 @@ void Framebuffer::setColorbuffer(unsigned int colorAttachment, GLenum type, GLui
void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level, GLint layer)
{
Renderbuffer *renderBuffer = lookupRenderbuffer(type, depthbuffer, level, layer);
if (renderBuffer)
FramebufferAttachment *attachment = lookupAttachment(type, depthbuffer, level, layer);
if (attachment)
{
mDepthbuffer.set(renderBuffer, type, level, layer);
mDepthbuffer.set(attachment, type, level, layer);
}
else
{
......@@ -146,10 +146,10 @@ void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level, G
void Framebuffer::setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint level, GLint layer)
{
Renderbuffer *renderBuffer = lookupRenderbuffer(type, stencilbuffer, level, layer);
if (renderBuffer)
FramebufferAttachment *attachment = lookupAttachment(type, stencilbuffer, level, layer);
if (attachment)
{
mStencilbuffer.set(renderBuffer, type, level, layer);
mStencilbuffer.set(attachment, type, level, layer);
}
else
{
......@@ -159,11 +159,11 @@ void Framebuffer::setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint leve
void Framebuffer::setDepthStencilBuffer(GLenum type, GLuint depthStencilBuffer, GLint level, GLint layer)
{
Renderbuffer *renderBuffer = lookupRenderbuffer(type, depthStencilBuffer, level, layer);
if (renderBuffer && renderBuffer->getDepthSize() > 0 && renderBuffer->getStencilSize() > 0)
FramebufferAttachment *attachment = lookupAttachment(type, depthStencilBuffer, level, layer);
if (attachment && attachment->getDepthSize() > 0 && attachment->getStencilSize() > 0)
{
mDepthbuffer.set(renderBuffer, type, level, layer);
mStencilbuffer.set(renderBuffer, type, level, layer);
mDepthbuffer.set(attachment, type, level, layer);
mStencilbuffer.set(attachment, type, level, layer);
}
else
{
......@@ -219,7 +219,7 @@ unsigned int Framebuffer::getRenderTargetSerial(unsigned int colorAttachment) co
{
ASSERT(colorAttachment < IMPLEMENTATION_MAX_DRAW_BUFFERS);
Renderbuffer *colorbuffer = mColorbuffers[colorAttachment].get();
FramebufferAttachment *colorbuffer = mColorbuffers[colorAttachment].get();
if (colorbuffer)
{
......@@ -231,7 +231,7 @@ unsigned int Framebuffer::getRenderTargetSerial(unsigned int colorAttachment) co
unsigned int Framebuffer::getDepthbufferSerial() const
{
Renderbuffer *depthbuffer = mDepthbuffer.get();
FramebufferAttachment *depthbuffer = mDepthbuffer.get();
if (depthbuffer)
{
......@@ -243,7 +243,7 @@ unsigned int Framebuffer::getDepthbufferSerial() const
unsigned int Framebuffer::getStencilbufferSerial() const
{
Renderbuffer *stencilbuffer = mStencilbuffer.get();
FramebufferAttachment *stencilbuffer = mStencilbuffer.get();
if (stencilbuffer)
{
......@@ -253,30 +253,30 @@ unsigned int Framebuffer::getStencilbufferSerial() const
return 0;
}
Renderbuffer *Framebuffer::getColorbuffer(unsigned int colorAttachment) const
FramebufferAttachment *Framebuffer::getColorbuffer(unsigned int colorAttachment) const
{
ASSERT(colorAttachment < IMPLEMENTATION_MAX_DRAW_BUFFERS);
return mColorbuffers[colorAttachment].get();
}
Renderbuffer *Framebuffer::getDepthbuffer() const
FramebufferAttachment *Framebuffer::getDepthbuffer() const
{
return mDepthbuffer.get();
}
Renderbuffer *Framebuffer::getStencilbuffer() const
FramebufferAttachment *Framebuffer::getStencilbuffer() const
{
return mStencilbuffer.get();
}
Renderbuffer *Framebuffer::getDepthStencilBuffer() const
FramebufferAttachment *Framebuffer::getDepthStencilBuffer() const
{
return (mDepthbuffer.id() == mStencilbuffer.id()) ? mDepthbuffer.get() : NULL;
}
Renderbuffer *Framebuffer::getDepthOrStencilbuffer() const
FramebufferAttachment *Framebuffer::getDepthOrStencilbuffer() const
{
Renderbuffer *depthstencilbuffer = mDepthbuffer.get();
FramebufferAttachment *depthstencilbuffer = mDepthbuffer.get();
if (!depthstencilbuffer)
{
......@@ -286,7 +286,7 @@ Renderbuffer *Framebuffer::getDepthOrStencilbuffer() const
return depthstencilbuffer;
}
Renderbuffer *Framebuffer::getReadColorbuffer() const
FramebufferAttachment *Framebuffer::getReadColorbuffer() const
{
// Will require more logic if glReadBuffers is supported
return mColorbuffers[0].get();
......@@ -298,7 +298,7 @@ GLenum Framebuffer::getReadColorbufferType() const
return mColorbuffers[0].type();
}
Renderbuffer *Framebuffer::getFirstColorbuffer() const
FramebufferAttachment *Framebuffer::getFirstColorbuffer() const
{
for (unsigned int colorAttachment = 0; colorAttachment < IMPLEMENTATION_MAX_DRAW_BUFFERS; colorAttachment++)
{
......@@ -427,7 +427,7 @@ bool Framebuffer::hasStencil() const
{
if (mStencilbuffer.type() != GL_NONE)
{
const Renderbuffer *stencilbufferObject = getStencilbuffer();
const FramebufferAttachment *stencilbufferObject = getStencilbuffer();
if (stencilbufferObject)
{
......@@ -464,7 +464,7 @@ GLenum Framebuffer::completeness() const
{
if (mColorbuffers[colorAttachment].type() != GL_NONE)
{
const Renderbuffer *colorbuffer = getColorbuffer(colorAttachment);
const FramebufferAttachment *colorbuffer = getColorbuffer(colorAttachment);
if (!colorbuffer)
{
......@@ -549,8 +549,8 @@ GLenum Framebuffer::completeness() const
}
}
const Renderbuffer *depthbuffer = NULL;
const Renderbuffer *stencilbuffer = NULL;
const FramebufferAttachment *depthbuffer = NULL;
const FramebufferAttachment *stencilbuffer = NULL;
if (mDepthbuffer.type() != GL_NONE)
{
......@@ -690,9 +690,9 @@ GLenum Framebuffer::completeness() const
DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
: Framebuffer(renderer)
{
mColorbuffers[0].set(new Renderbuffer(mRenderer, 0, colorbuffer), GL_RENDERBUFFER, 0, 0);
mColorbuffers[0].set(new FramebufferAttachment(mRenderer, 0, colorbuffer), GL_RENDERBUFFER, 0, 0);
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(mRenderer, 0, depthStencil);
FramebufferAttachment *depthStencilRenderbuffer = new FramebufferAttachment(mRenderer, 0, depthStencil);
mDepthbuffer.set(depthStencilRenderbuffer, (depthStencilRenderbuffer->getDepthSize() != 0) ? GL_RENDERBUFFER : GL_NONE, 0, 0);
mStencilbuffer.set(depthStencilRenderbuffer, (depthStencilRenderbuffer->getStencilSize() != 0) ? GL_RENDERBUFFER : GL_NONE, 0, 0);
......
......@@ -21,7 +21,7 @@ class Renderer;
namespace gl
{
class Renderbuffer;
class FramebufferAttachment;
class Colorbuffer;
class Depthbuffer;
class Stencilbuffer;
......@@ -46,14 +46,14 @@ class Framebuffer
unsigned int getDepthbufferSerial() const;
unsigned int getStencilbufferSerial() const;
Renderbuffer *getColorbuffer(unsigned int colorAttachment) const;
Renderbuffer *getDepthbuffer() const;
Renderbuffer *getStencilbuffer() const;
Renderbuffer *getDepthStencilBuffer() const;
Renderbuffer *getDepthOrStencilbuffer() const;
Renderbuffer *getReadColorbuffer() const;
FramebufferAttachment *getColorbuffer(unsigned int colorAttachment) const;
FramebufferAttachment *getDepthbuffer() const;
FramebufferAttachment *getStencilbuffer() const;
FramebufferAttachment *getDepthStencilBuffer() const;
FramebufferAttachment *getDepthOrStencilbuffer() const;
FramebufferAttachment *getReadColorbuffer() const;
GLenum getReadColorbufferType() const;
Renderbuffer *getFirstColorbuffer() const;
FramebufferAttachment *getFirstColorbuffer() const;
GLenum getColorbufferType(unsigned int colorAttachment) const;
GLenum getDepthbufferType() const;
......@@ -87,19 +87,19 @@ class Framebuffer
virtual GLenum completeness() const;
protected:
FramebufferTextureBindingPointer<Renderbuffer> mColorbuffers[IMPLEMENTATION_MAX_DRAW_BUFFERS];
FramebufferTextureBindingPointer<FramebufferAttachment> mColorbuffers[IMPLEMENTATION_MAX_DRAW_BUFFERS];
GLenum mDrawBufferStates[IMPLEMENTATION_MAX_DRAW_BUFFERS];
GLenum mReadBufferState;
FramebufferTextureBindingPointer<Renderbuffer> mDepthbuffer;
FramebufferTextureBindingPointer<Renderbuffer> mStencilbuffer;
FramebufferTextureBindingPointer<FramebufferAttachment> mDepthbuffer;
FramebufferTextureBindingPointer<FramebufferAttachment> mStencilbuffer;
rx::Renderer *mRenderer;
private:
DISALLOW_COPY_AND_ASSIGN(Framebuffer);
Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle, GLint level, GLint layer) const;
FramebufferAttachment *lookupAttachment(GLenum type, GLuint handle, GLint level, GLint layer) const;
};
class DefaultFramebuffer : public Framebuffer
......
......@@ -32,19 +32,19 @@ class Texture2D;
class TextureCubeMap;
class Texture3D;
class Texture2DArray;
class Renderbuffer;
class FramebufferAttachment;
class Colorbuffer;
class DepthStencilbuffer;
class RenderbufferInterface
class FramebufferAttachmentInterface
{
public:
RenderbufferInterface();
FramebufferAttachmentInterface();
virtual ~RenderbufferInterface() {};
virtual ~FramebufferAttachmentInterface() {};
virtual void addProxyRef(const Renderbuffer *proxy);
virtual void releaseProxy(const Renderbuffer *proxy);
virtual void addProxyRef(const FramebufferAttachment *proxy);
virtual void releaseProxy(const FramebufferAttachment *proxy);
virtual rx::RenderTarget *getRenderTarget() = 0;
virtual rx::RenderTarget *getDepthStencil() = 0;
......@@ -62,18 +62,18 @@ class RenderbufferInterface
virtual unsigned int getTextureSerial() const = 0;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferInterface);
DISALLOW_COPY_AND_ASSIGN(FramebufferAttachmentInterface);
};
class RenderbufferTexture2D : public RenderbufferInterface
class Texture2DAttachment : public FramebufferAttachmentInterface
{
public:
RenderbufferTexture2D(Texture2D *texture, GLint level);
Texture2DAttachment(Texture2D *texture, GLint level);
virtual ~RenderbufferTexture2D();
virtual ~Texture2DAttachment();
void addProxyRef(const Renderbuffer *proxy);
void releaseProxy(const Renderbuffer *proxy);
void addProxyRef(const FramebufferAttachment *proxy);
void releaseProxy(const FramebufferAttachment *proxy);
rx::RenderTarget *getRenderTarget();
rx::RenderTarget *getDepthStencil();
......@@ -91,21 +91,21 @@ class RenderbufferTexture2D : public RenderbufferInterface
virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture2D);
DISALLOW_COPY_AND_ASSIGN(Texture2DAttachment);
BindingPointer <Texture2D> mTexture2D;
const GLint mLevel;
};
class RenderbufferTextureCubeMap : public RenderbufferInterface
class TextureCubeMapAttachment : public FramebufferAttachmentInterface
{
public:
RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum faceTarget, GLint level);
TextureCubeMapAttachment(TextureCubeMap *texture, GLenum faceTarget, GLint level);
virtual ~RenderbufferTextureCubeMap();
virtual ~TextureCubeMapAttachment();
void addProxyRef(const Renderbuffer *proxy);
void releaseProxy(const Renderbuffer *proxy);
void addProxyRef(const FramebufferAttachment *proxy);
void releaseProxy(const FramebufferAttachment *proxy);
rx::RenderTarget *getRenderTarget();
rx::RenderTarget *getDepthStencil();
......@@ -123,22 +123,22 @@ class RenderbufferTextureCubeMap : public RenderbufferInterface
virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTextureCubeMap);
DISALLOW_COPY_AND_ASSIGN(TextureCubeMapAttachment);
BindingPointer <TextureCubeMap> mTextureCubeMap;
const GLint mLevel;
const GLenum mFaceTarget;
};
class RenderbufferTexture3DLayer : public RenderbufferInterface
class Texture3DAttachment : public FramebufferAttachmentInterface
{
public:
RenderbufferTexture3DLayer(Texture3D *texture, GLint level, GLint layer);
Texture3DAttachment(Texture3D *texture, GLint level, GLint layer);
virtual ~RenderbufferTexture3DLayer();
virtual ~Texture3DAttachment();
void addProxyRef(const Renderbuffer *proxy);
void releaseProxy(const Renderbuffer *proxy);
void addProxyRef(const FramebufferAttachment *proxy);
void releaseProxy(const FramebufferAttachment *proxy);
rx::RenderTarget *getRenderTarget();
rx::RenderTarget *getDepthStencil();
......@@ -156,22 +156,22 @@ public:
virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture3DLayer);
DISALLOW_COPY_AND_ASSIGN(Texture3DAttachment);
BindingPointer<Texture3D> mTexture3D;
const GLint mLevel;
const GLint mLayer;
};
class RenderbufferTexture2DArrayLayer : public RenderbufferInterface
class Texture2DArrayAttachment : public FramebufferAttachmentInterface
{
public:
RenderbufferTexture2DArrayLayer(Texture2DArray *texture, GLint level, GLint layer);
Texture2DArrayAttachment(Texture2DArray *texture, GLint level, GLint layer);
virtual ~RenderbufferTexture2DArrayLayer();
virtual ~Texture2DArrayAttachment();
void addProxyRef(const Renderbuffer *proxy);
void releaseProxy(const Renderbuffer *proxy);
void addProxyRef(const FramebufferAttachment *proxy);
void releaseProxy(const FramebufferAttachment *proxy);
rx::RenderTarget *getRenderTarget();
rx::RenderTarget *getDepthStencil();
......@@ -189,7 +189,7 @@ public:
virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture2DArrayLayer);
DISALLOW_COPY_AND_ASSIGN(Texture2DArrayAttachment);
BindingPointer<Texture2DArray> mTexture2DArray;
const GLint mLevel;
......@@ -199,7 +199,7 @@ private:
// A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
// is called. The specific concrete type depends on whether the internal format is
// colour depth, stencil or packed depth/stencil.
class RenderbufferStorage : public RenderbufferInterface
class RenderbufferStorage : public FramebufferAttachmentInterface
{
public:
RenderbufferStorage();
......@@ -238,20 +238,20 @@ class RenderbufferStorage : public RenderbufferInterface
static unsigned int mCurrentSerial;
};
// Renderbuffer implements the GL renderbuffer object.
// It's only a proxy for a RenderbufferInterface instance; the internal object
// FramebufferAttachment implements the GL renderbuffer object.
// It's only a proxy for a FramebufferAttachmentInterface instance; the internal object
// can change whenever glRenderbufferStorage is called.
class Renderbuffer : public RefCountObject
class FramebufferAttachment : public RefCountObject
{
public:
Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *storage);
FramebufferAttachment(rx::Renderer *renderer, GLuint id, FramebufferAttachmentInterface *storage);
virtual ~Renderbuffer();
virtual ~FramebufferAttachment();
// These functions from RefCountObject are overloaded here because
// Textures need to maintain their own count of references to them via
// Renderbuffers/RenderbufferTextures. These functions invoke those
// reference counting functions on the RenderbufferInterface.
// reference counting functions on the FramebufferAttachmentInterface.
void addRef() const;
void release() const;
......@@ -281,10 +281,10 @@ class Renderbuffer : public RefCountObject
void setStorage(RenderbufferStorage *newStorage);
private:
DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
DISALLOW_COPY_AND_ASSIGN(FramebufferAttachment);
rx::Renderer const *mRenderer;
RenderbufferInterface *mInstance;
FramebufferAttachmentInterface *mInstance;
};
class Colorbuffer : public RenderbufferStorage
......
......@@ -14,7 +14,7 @@
namespace gl
{
void RenderbufferProxySet::addRef(const Renderbuffer *proxy)
void RenderbufferProxySet::addRef(const FramebufferAttachment *proxy)
{
RefCountMap::iterator i = mRefCountMap.find(proxy);
if (i != mRefCountMap.end())
......@@ -23,7 +23,7 @@ void RenderbufferProxySet::addRef(const Renderbuffer *proxy)
}
}
void RenderbufferProxySet::release(const Renderbuffer *proxy)
void RenderbufferProxySet::release(const FramebufferAttachment *proxy)
{
RefCountMap::iterator i = mRefCountMap.find(proxy);
if (i != mRefCountMap.end())
......@@ -35,7 +35,7 @@ void RenderbufferProxySet::release(const Renderbuffer *proxy)
if (i->second == 0)
{
// Clear the buffer map of references to this Renderbuffer
// Clear the buffer map of references to this FramebufferAttachment
BufferMap::iterator j = mBufferMap.begin();
while (j != mBufferMap.end())
{
......@@ -54,7 +54,7 @@ void RenderbufferProxySet::release(const Renderbuffer *proxy)
}
}
void RenderbufferProxySet::add(unsigned int mipLevel, unsigned int layer, Renderbuffer *renderBuffer)
void RenderbufferProxySet::add(unsigned int mipLevel, unsigned int layer, FramebufferAttachment *renderBuffer)
{
if (mRefCountMap.find(renderBuffer) == mRefCountMap.end())
{
......@@ -70,7 +70,7 @@ void RenderbufferProxySet::add(unsigned int mipLevel, unsigned int layer, Render
}
}
Renderbuffer *RenderbufferProxySet::get(unsigned int mipLevel, unsigned int layer) const
FramebufferAttachment *RenderbufferProxySet::get(unsigned int mipLevel, unsigned int layer) const
{
RenderbufferKey key;
key.mipLevel = mipLevel;
......
......@@ -14,16 +14,16 @@
namespace gl
{
class Renderbuffer;
class FramebufferAttachment;
class RenderbufferProxySet
{
public:
void addRef(const Renderbuffer *proxy);
void release(const Renderbuffer *proxy);
void addRef(const FramebufferAttachment *proxy);
void release(const FramebufferAttachment *proxy);
void add(unsigned int mipLevel, unsigned int layer, Renderbuffer *renderBuffer);
Renderbuffer *get(unsigned int mipLevel, unsigned int layer) const;
void add(unsigned int mipLevel, unsigned int layer, FramebufferAttachment *renderBuffer);
FramebufferAttachment *get(unsigned int mipLevel, unsigned int layer) const;
private:
struct RenderbufferKey
......@@ -34,10 +34,10 @@ class RenderbufferProxySet
bool operator<(const RenderbufferKey &other) const;
};
typedef std::map<RenderbufferKey, Renderbuffer*> BufferMap;
typedef std::map<RenderbufferKey, FramebufferAttachment*> BufferMap;
BufferMap mBufferMap;
typedef std::map<const Renderbuffer*, unsigned int> RefCountMap;
typedef std::map<const FramebufferAttachment*, unsigned int> RefCountMap;
RefCountMap mRefCountMap;
};
......
......@@ -311,7 +311,7 @@ Program *ResourceManager::getProgram(unsigned int handle)
}
}
Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
FramebufferAttachment *ResourceManager::getRenderbuffer(unsigned int handle)
{
RenderbufferMap::iterator renderbuffer = mRenderbufferMap.find(handle);
......@@ -353,7 +353,7 @@ FenceSync *ResourceManager::getFenceSync(unsigned int handle)
}
}
void ResourceManager::setRenderbuffer(GLuint handle, Renderbuffer *buffer)
void ResourceManager::setRenderbuffer(GLuint handle, FramebufferAttachment *buffer)
{
mRenderbufferMap[handle] = buffer;
}
......@@ -405,7 +405,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer)
{
if (renderbuffer != 0 && !getRenderbuffer(renderbuffer))
{
Renderbuffer *renderbufferObject = new Renderbuffer(mRenderer, renderbuffer, new Colorbuffer(mRenderer, 0, 0, GL_RGBA4, 0));
FramebufferAttachment *renderbufferObject = new FramebufferAttachment(mRenderer, renderbuffer, new Colorbuffer(mRenderer, 0, 0, GL_RGBA4, 0));
mRenderbufferMap[renderbuffer] = renderbufferObject;
renderbufferObject->addRef();
}
......
......@@ -30,7 +30,7 @@ class Buffer;
class Shader;
class Program;
class Texture;
class Renderbuffer;
class FramebufferAttachment;
class Sampler;
class FenceSync;
......@@ -63,11 +63,11 @@ class ResourceManager
Shader *getShader(GLuint handle);
Program *getProgram(GLuint handle);
Texture *getTexture(GLuint handle);
Renderbuffer *getRenderbuffer(GLuint handle);
FramebufferAttachment *getRenderbuffer(GLuint handle);
Sampler *getSampler(GLuint handle);
FenceSync *getFenceSync(GLuint handle);
void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
void setRenderbuffer(GLuint handle, FramebufferAttachment *renderbuffer);
void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, TextureType type);
......@@ -97,7 +97,7 @@ class ResourceManager
TextureMap mTextureMap;
HandleAllocator mTextureHandleAllocator;
typedef std::unordered_map<GLuint, Renderbuffer*> RenderbufferMap;
typedef std::unordered_map<GLuint, FramebufferAttachment*> RenderbufferMap;
RenderbufferMap mRenderbufferMap;
HandleAllocator mRenderbufferHandleAllocator;
......
......@@ -87,12 +87,12 @@ GLenum Texture::getTarget() const
return mTarget;
}
void Texture::addProxyRef(const Renderbuffer *proxy)
void Texture::addProxyRef(const FramebufferAttachment *proxy)
{
mRenderbufferProxies.addRef(proxy);
}
void Texture::releaseProxy(const Renderbuffer *proxy)
void Texture::releaseProxy(const FramebufferAttachment *proxy)
{
mRenderbufferProxies.release(proxy);
}
......@@ -1027,16 +1027,16 @@ rx::TextureStorageInterface *Texture2D::getBaseLevelStorage()
return mTexStorage;
}
Renderbuffer *Texture2D::getRenderbuffer(GLint level)
FramebufferAttachment *Texture2D::getAttachment(GLint level)
{
Renderbuffer *renderBuffer = mRenderbufferProxies.get(level, 0);
if (!renderBuffer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, 0);
if (!attachment)
{
renderBuffer = new Renderbuffer(mRenderer, id(), new RenderbufferTexture2D(this, level));
mRenderbufferProxies.add(level, 0, renderBuffer);
attachment = new FramebufferAttachment(mRenderer, id(), new Texture2DAttachment(this, level));
mRenderbufferProxies.add(level, 0, attachment);
}
return renderBuffer;
return attachment;
}
unsigned int Texture2D::getRenderTargetSerial(GLint level)
......@@ -1662,19 +1662,19 @@ rx::TextureStorageInterface *TextureCubeMap::getBaseLevelStorage()
return mTexStorage;
}
Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target, GLint level)
FramebufferAttachment *TextureCubeMap::getAttachment(GLenum target, GLint level)
{
ASSERT(!IsCubemapTextureTarget(target));
int faceIndex = targetToIndex(target);
Renderbuffer *renderBuffer = mRenderbufferProxies.get(level, faceIndex);
if (!renderBuffer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, faceIndex);
if (!attachment)
{
renderBuffer = new Renderbuffer(mRenderer, id(), new RenderbufferTextureCubeMap(this, target, level));
mRenderbufferProxies.add(level, faceIndex, renderBuffer);
attachment = new FramebufferAttachment(mRenderer, id(), new TextureCubeMapAttachment(this, target, level));
mRenderbufferProxies.add(level, faceIndex, attachment);
}
return renderBuffer;
return attachment;
}
unsigned int TextureCubeMap::getRenderTargetSerial(GLenum target, GLint level)
......@@ -2042,16 +2042,16 @@ bool Texture3D::isLevelComplete(int level) const
return true;
}
Renderbuffer *Texture3D::getRenderbuffer(GLint level, GLint layer)
FramebufferAttachment *Texture3D::getAttachment(GLint level, GLint layer)
{
Renderbuffer *renderBuffer = mRenderbufferProxies.get(level, layer);
if (!renderBuffer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer);
if (!attachment)
{
renderBuffer = new Renderbuffer(mRenderer, id(), new RenderbufferTexture3DLayer(this, level, layer));
mRenderbufferProxies.add(level, 0, renderBuffer);
attachment = new FramebufferAttachment(mRenderer, id(), new Texture3DAttachment(this, level, layer));
mRenderbufferProxies.add(level, 0, attachment);
}
return renderBuffer;
return attachment;
}
unsigned int Texture3D::getRenderTargetSerial(GLint level, GLint layer)
......@@ -2593,16 +2593,16 @@ bool Texture2DArray::isLevelComplete(int level) const
return true;
}
Renderbuffer *Texture2DArray::getRenderbuffer(GLint level, GLint layer)
FramebufferAttachment *Texture2DArray::getAttachment(GLint level, GLint layer)
{
Renderbuffer *renderBuffer = mRenderbufferProxies.get(level, layer);
if (!renderBuffer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer);
if (!attachment)
{
renderBuffer = new Renderbuffer(mRenderer, id(), new RenderbufferTexture2DArrayLayer(this, level, layer));
mRenderbufferProxies.add(level, 0, renderBuffer);
attachment = new FramebufferAttachment(mRenderer, id(), new Texture2DArrayAttachment(this, level, layer));
mRenderbufferProxies.add(level, 0, attachment);
}
return renderBuffer;
return attachment;
}
unsigned int Texture2DArray::getRenderTargetSerial(GLint level, GLint layer)
......
......@@ -41,7 +41,7 @@ class Image;
namespace gl
{
class Framebuffer;
class Renderbuffer;
class FramebufferAttachment;
enum
{
......@@ -65,8 +65,8 @@ class Texture : public RefCountObject
virtual ~Texture();
void addProxyRef(const Renderbuffer *proxy);
void releaseProxy(const Renderbuffer *proxy);
void addProxyRef(const FramebufferAttachment *proxy);
void releaseProxy(const FramebufferAttachment *proxy);
GLenum getTarget() const;
......@@ -161,7 +161,7 @@ class Texture : public RefCountObject
// because, as the renderbuffer acting as proxy will maintain a binding pointer
// back to this texture, there would be a circular reference if we used a binding
// pointer here. This reference count will cause the pointer to be set to NULL if
// the count drops to zero, but will not cause deletion of the Renderbuffer.
// the count drops to zero, but will not cause deletion of the FramebufferAttachment.
RenderbufferProxySet mRenderbufferProxies;
private:
......@@ -199,11 +199,11 @@ class Texture2D : public Texture
virtual void generateMipmaps();
Renderbuffer *getRenderbuffer(GLint level);
FramebufferAttachment *getAttachment(GLint level);
unsigned int getRenderTargetSerial(GLint level);
protected:
friend class RenderbufferTexture2D;
friend class Texture2DAttachment;
rx::RenderTarget *getRenderTarget(GLint level);
rx::RenderTarget *getDepthSencil(GLint level);
......@@ -267,13 +267,13 @@ class TextureCubeMap : public Texture
virtual void generateMipmaps();
Renderbuffer *getRenderbuffer(GLenum target, GLint level);
FramebufferAttachment *getAttachment(GLenum target, GLint level);
unsigned int getRenderTargetSerial(GLenum target, GLint level);
static int targetToIndex(GLenum target);
protected:
friend class RenderbufferTextureCubeMap;
friend class TextureCubeMapAttachment;
rx::RenderTarget *getRenderTarget(GLenum target, GLint level);
rx::RenderTarget *getDepthStencil(GLenum target, GLint level);
......@@ -330,11 +330,11 @@ class Texture3D : public Texture
virtual bool isSamplerComplete(const SamplerState &samplerState) const;
virtual bool isMipmapComplete() const;
Renderbuffer *getRenderbuffer(GLint level, GLint layer);
FramebufferAttachment *getAttachment(GLint level, GLint layer);
unsigned int getRenderTargetSerial(GLint level, GLint layer);
protected:
friend class RenderbufferTexture3DLayer;
friend class Texture3DAttachment;
rx::RenderTarget *getRenderTarget(GLint level);
rx::RenderTarget *getRenderTarget(GLint level, GLint layer);
rx::RenderTarget *getDepthStencil(GLint level, GLint layer);
......@@ -391,11 +391,11 @@ class Texture2DArray : public Texture
virtual bool isSamplerComplete(const SamplerState &samplerState) const;
virtual bool isMipmapComplete() const;
Renderbuffer *getRenderbuffer(GLint level, GLint layer);
FramebufferAttachment *getAttachment(GLint level, GLint layer);
unsigned int getRenderTargetSerial(GLint level, GLint layer);
protected:
friend class RenderbufferTexture2DArrayLayer;
friend class Texture2DArrayAttachment;
rx::RenderTarget *getRenderTarget(GLint level, GLint layer);
rx::RenderTarget *getDepthStencil(GLint level, GLint layer);
......
......@@ -169,16 +169,16 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
gl::Extents framebufferSize;
if (frameBuffer->getFirstColorbuffer() != NULL)
{
gl::Renderbuffer *renderBuffer = frameBuffer->getFirstColorbuffer();
framebufferSize.width = renderBuffer->getWidth();
framebufferSize.height = renderBuffer->getHeight();
gl::FramebufferAttachment *attachment = frameBuffer->getFirstColorbuffer();
framebufferSize.width = attachment->getWidth();
framebufferSize.height = attachment->getHeight();
framebufferSize.depth = 1;
}
else if (frameBuffer->getDepthOrStencilbuffer() != NULL)
{
gl::Renderbuffer *renderBuffer = frameBuffer->getDepthOrStencilbuffer();
framebufferSize.width = renderBuffer->getWidth();
framebufferSize.height = renderBuffer->getHeight();
gl::FramebufferAttachment *attachment = frameBuffer->getDepthOrStencilbuffer();
framebufferSize.width = attachment->getWidth();
framebufferSize.height = attachment->getHeight();
framebufferSize.depth = 1;
}
else
......@@ -211,18 +211,18 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
{
if (clearParams.clearColor[colorAttachment] && frameBuffer->isEnabledColorAttachment(colorAttachment))
{
gl::Renderbuffer *renderbuffer = frameBuffer->getColorbuffer(colorAttachment);
if (renderbuffer)
gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(colorAttachment);
if (attachment)
{
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(renderbuffer->getRenderTarget());
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getRenderTarget());
if (!renderTarget)
{
ERR("Render target pointer unexpectedly null.");
return;
}
GLenum internalFormat = renderbuffer->getInternalFormat();
GLenum actualFormat = renderbuffer->getActualFormat();
GLenum internalFormat = attachment->getInternalFormat();
GLenum actualFormat = attachment->getActualFormat();
GLenum componentType = gl::GetComponentType(internalFormat, clientVersion);
if (clearParams.colorClearType == GL_FLOAT &&
!(componentType == GL_FLOAT || componentType == GL_UNSIGNED_NORMALIZED || componentType == GL_SIGNED_NORMALIZED))
......@@ -287,17 +287,17 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
if (clearParams.clearDepth || clearParams.clearStencil)
{
gl::Renderbuffer *renderbuffer = frameBuffer->getDepthOrStencilbuffer();
if (renderbuffer)
gl::FramebufferAttachment *attachment = frameBuffer->getDepthOrStencilbuffer();
if (attachment)
{
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(renderbuffer->getDepthStencil());
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getDepthStencil());
if (!renderTarget)
{
ERR("Depth stencil render target pointer unexpectedly null.");
return;
}
GLenum actualFormat = renderbuffer->getActualFormat();
GLenum actualFormat = attachment->getActualFormat();
unsigned int stencilUnmasked = frameBuffer->hasStencil() ? (1 << gl::GetStencilBits(actualFormat, clientVersion)) - 1 : 0;
bool needMaskedStencilClear = clearParams.clearStencil && (clearParams.stencilWriteMask & stencilUnmasked) != stencilUnmasked;
......
......@@ -213,7 +213,7 @@ void Image11::loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GL
void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source)
{
gl::Renderbuffer *colorbuffer = source->getReadColorbuffer();
gl::FramebufferAttachment *colorbuffer = source->getReadColorbuffer();
if (colorbuffer && colorbuffer->getActualFormat() == mActualFormat)
{
......
......@@ -93,18 +93,18 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu
key.blendState = blendState;
for (unsigned int i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++)
{
gl::Renderbuffer *renderBuffer = framebuffer->getColorbuffer(i);
if (renderBuffer)
gl::FramebufferAttachment *attachment = framebuffer->getColorbuffer(i);
if (attachment)
{
if (i > 0)
{
mrt = true;
}
key.rtChannels[i][0] = renderBuffer->getRedSize() > 0;
key.rtChannels[i][1] = renderBuffer->getGreenSize() > 0;
key.rtChannels[i][2] = renderBuffer->getBlueSize() > 0;
key.rtChannels[i][3] = renderBuffer->getAlphaSize() > 0;
key.rtChannels[i][0] = attachment->getRedSize() > 0;
key.rtChannels[i][1] = attachment->getGreenSize() > 0;
key.rtChannels[i][2] = attachment->getBlueSize() > 0;
key.rtChannels[i][3] = attachment->getAlphaSize() > 0;
}
else
{
......
......@@ -979,7 +979,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
// the draw buffer must be either "none", "back" for the default buffer or the same index as this color (in order)
ASSERT(drawBufferState == GL_BACK || drawBufferState == (GL_COLOR_ATTACHMENT0_EXT + colorAttachment));
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(colorAttachment);
gl::FramebufferAttachment *colorbuffer = framebuffer->getColorbuffer(colorAttachment);
if (!colorbuffer)
{
......@@ -1026,7 +1026,7 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
}
// Get the depth stencil render buffer and serials
gl::Renderbuffer *depthStencil = NULL;
gl::FramebufferAttachment *depthStencil = NULL;
unsigned int depthbufferSerial = 0;
unsigned int stencilbufferSerial = 0;
if (framebuffer->getDepthbufferType() != GL_NONE)
......@@ -2634,7 +2634,7 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterface2DArray *dest, Textur
bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface2D *storage, GLint level)
{
gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer)
{
ERR("Failed to retrieve the color buffer from the frame buffer.");
......@@ -2695,7 +2695,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterfaceCube *storage, GLenum target, GLint level)
{
gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer)
{
ERR("Failed to retrieve the color buffer from the frame buffer.");
......@@ -2756,7 +2756,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface3D *storage, GLint level)
{
gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer)
{
ERR("Failed to retrieve the color buffer from the frame buffer.");
......@@ -2817,7 +2817,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface2DArray *storage, GLint level)
{
gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer)
{
ERR("Failed to retrieve the color buffer from the frame buffer.");
......@@ -3169,7 +3169,7 @@ bool Renderer11::fastCopyBufferToTexture(const gl::PixelUnpackState &unpack, uns
return mPixelTransfer->copyBufferToTexture(unpack, offset, destRenderTarget, destinationFormat, sourcePixelsType, destArea);
}
bool Renderer11::getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
bool Renderer11::getRenderTargetResource(gl::FramebufferAttachment *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
{
ASSERT(colorbuffer != NULL);
......@@ -3210,7 +3210,7 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
{
if (blitRenderTarget)
{
gl::Renderbuffer *readBuffer = readTarget->getReadColorbuffer();
gl::FramebufferAttachment *readBuffer = readTarget->getReadColorbuffer();
if (!readBuffer)
{
......@@ -3224,7 +3224,7 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
{
if (drawTarget->isEnabledColorAttachment(colorAttachment))
{
gl::Renderbuffer *drawBuffer = drawTarget->getColorbuffer(colorAttachment);
gl::FramebufferAttachment *drawBuffer = drawTarget->getColorbuffer(colorAttachment);
if (!drawBuffer)
{
......@@ -3245,8 +3245,8 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
if (blitDepth || blitStencil)
{
gl::Renderbuffer *readBuffer = readTarget->getDepthOrStencilbuffer();
gl::Renderbuffer *drawBuffer = drawTarget->getDepthOrStencilbuffer();
gl::FramebufferAttachment *readBuffer = readTarget->getDepthOrStencilbuffer();
gl::FramebufferAttachment *drawBuffer = drawTarget->getDepthOrStencilbuffer();
if (!readBuffer)
{
......@@ -3281,7 +3281,7 @@ void Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsi
ID3D11Texture2D *colorBufferTexture = NULL;
unsigned int subresourceIndex = 0;
gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (colorbuffer && getRenderTargetResource(colorbuffer, &subresourceIndex, &colorBufferTexture))
{
......@@ -3749,9 +3749,10 @@ ID3D11Texture2D *Renderer11::resolveMultisampledTexture(ID3D11Texture2D *source,
}
}
void Renderer11::invalidateRenderbufferSwizzles(gl::Renderbuffer *renderBuffer, int mipLevel)
void Renderer11::invalidateFBOAttachmentSwizzles(gl::FramebufferAttachment *attachment, int mipLevel)
{
TextureStorage *texStorage = renderBuffer->getTextureStorage();
ASSERT(attachment->isTexture());
TextureStorage *texStorage = attachment->getTextureStorage();
if (texStorage)
{
TextureStorage11 *texStorage11 = TextureStorage11::makeTextureStorage11(texStorage);
......@@ -3769,23 +3770,23 @@ void Renderer11::invalidateFramebufferSwizzles(gl::Framebuffer *framebuffer)
{
for (unsigned int colorAttachment = 0; colorAttachment < gl::IMPLEMENTATION_MAX_DRAW_BUFFERS; colorAttachment++)
{
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(colorAttachment);
if (colorbuffer)
gl::FramebufferAttachment *attachment = framebuffer->getColorbuffer(colorAttachment);
if (attachment && attachment->isTexture())
{
invalidateRenderbufferSwizzles(colorbuffer, framebuffer->getColorbufferMipLevel(colorAttachment));
invalidateFBOAttachmentSwizzles(attachment, framebuffer->getColorbufferMipLevel(colorAttachment));
}
}
gl::Renderbuffer *depthBuffer = framebuffer->getDepthbuffer();
if (depthBuffer)
gl::FramebufferAttachment *depthAttachment = framebuffer->getDepthbuffer();
if (depthAttachment && depthAttachment->isTexture())
{
invalidateRenderbufferSwizzles(depthBuffer, framebuffer->getDepthbufferMipLevel());
invalidateFBOAttachmentSwizzles(depthAttachment, framebuffer->getDepthbufferMipLevel());
}
gl::Renderbuffer *stencilBuffer = framebuffer->getStencilbuffer();
if (stencilBuffer)
gl::FramebufferAttachment *stencilAttachment = framebuffer->getStencilbuffer();
if (stencilAttachment && stencilAttachment->isTexture())
{
invalidateRenderbufferSwizzles(stencilBuffer, framebuffer->getStencilbufferMipLevel());
invalidateFBOAttachmentSwizzles(stencilAttachment, framebuffer->getStencilbufferMipLevel());
}
}
......
......@@ -21,7 +21,7 @@
namespace gl
{
class Renderbuffer;
class FramebufferAttachment;
}
namespace rx
......@@ -229,7 +229,7 @@ class Renderer11 : public Renderer
virtual bool fastCopyBufferToTexture(const gl::PixelUnpackState &unpack, unsigned int offset, RenderTarget *destRenderTarget,
GLenum destinationFormat, GLenum sourcePixelsType, const gl::Box &destArea);
bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
bool getRenderTargetResource(gl::FramebufferAttachment *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
void unapplyRenderTargets();
void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView);
void packPixels(ID3D11Texture2D *readTexture, const PackPixelsParams &params, void *pixelsOut);
......@@ -255,7 +255,7 @@ class Renderer11 : public Renderer
bool colorBlit, bool depthBlit, bool stencilBlit);
ID3D11Texture2D *resolveMultisampledTexture(ID3D11Texture2D *source, unsigned int subresource);
static void invalidateRenderbufferSwizzles(gl::Renderbuffer *renderBuffer, int mipLevel);
static void invalidateFBOAttachmentSwizzles(gl::FramebufferAttachment *attachment, int mipLevel);
static void invalidateFramebufferSwizzles(gl::Framebuffer *framebuffer);
HMODULE mD3d11Module;
......
......@@ -213,7 +213,7 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de
{
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *source = NULL;
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
gl::FramebufferAttachment *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer)
{
......@@ -249,7 +249,7 @@ bool Blit9::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum de
{
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *source = NULL;
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
gl::FramebufferAttachment *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer)
{
......
......@@ -452,7 +452,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *surface = NULL;
gl::Renderbuffer *colorbuffer = source->getColorbuffer(0);
gl::FramebufferAttachment *colorbuffer = source->getColorbuffer(0);
if (colorbuffer)
{
......
......@@ -930,8 +930,8 @@ void Renderer9::setBlendState(gl::Framebuffer *framebuffer, const gl::BlendState
FIXME("Sample alpha to coverage is unimplemented.");
}
gl::Renderbuffer *renderBuffer = framebuffer->getFirstColorbuffer();
GLenum internalFormat = renderBuffer ? renderBuffer->getInternalFormat() : GL_NONE;
gl::FramebufferAttachment *attachment = framebuffer->getFirstColorbuffer();
GLenum internalFormat = attachment ? attachment->getInternalFormat() : GL_NONE;
GLuint clientVersion = getCurrentClientVersion();
// Set the color mask
......@@ -1225,7 +1225,7 @@ bool Renderer9::applyPrimitiveType(GLenum mode, GLsizei count)
}
gl::Renderbuffer *Renderer9::getNullColorbuffer(gl::Renderbuffer *depthbuffer)
gl::FramebufferAttachment *Renderer9::getNullColorbuffer(gl::FramebufferAttachment *depthbuffer)
{
if (!depthbuffer)
{
......@@ -1248,7 +1248,7 @@ gl::Renderbuffer *Renderer9::getNullColorbuffer(gl::Renderbuffer *depthbuffer)
}
}
gl::Renderbuffer *nullbuffer = new gl::Renderbuffer(this, 0, new gl::Colorbuffer(this, width, height, GL_NONE, 0));
gl::FramebufferAttachment *nullbuffer = new gl::FramebufferAttachment(this, 0, new gl::Colorbuffer(this, width, height, GL_NONE, 0));
// add nullbuffer to the cache
NullColorbufferCacheEntry *oldest = &mNullColorbufferCache[0];
......@@ -1273,7 +1273,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
{
// if there is no color attachment we must synthesize a NULL colorattachment
// to keep the D3D runtime happy. This should only be possible if depth texturing.
gl::Renderbuffer *renderbufferObject = NULL;
gl::FramebufferAttachment *renderbufferObject = NULL;
if (framebuffer->getColorbufferType(0) != GL_NONE)
{
renderbufferObject = framebuffer->getColorbuffer(0);
......@@ -1314,7 +1314,7 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
renderTargetChanged = true;
}
gl::Renderbuffer *depthStencil = NULL;
gl::FramebufferAttachment *depthStencil = NULL;
unsigned int depthbufferSerial = 0;
unsigned int stencilbufferSerial = 0;
if (framebuffer->getDepthbufferType() != GL_NONE)
......@@ -1902,9 +1902,9 @@ void Renderer9::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *f
D3DCOLOR color = D3DCOLOR_ARGB(255, 0, 0, 0);
if (clearColor)
{
gl::Renderbuffer *renderbuffer = frameBuffer->getFirstColorbuffer();
GLenum internalFormat = renderbuffer->getInternalFormat();
GLenum actualFormat = renderbuffer->getActualFormat();
gl::FramebufferAttachment *attachment = frameBuffer->getFirstColorbuffer();
GLenum internalFormat = attachment->getInternalFormat();
GLenum actualFormat = attachment->getActualFormat();
GLuint clientVersion = getCurrentClientVersion();
GLuint internalRedBits = gl::GetRedBits(internalFormat, clientVersion);
......@@ -2935,8 +2935,8 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle &
if (blitRenderTarget)
{
gl::Renderbuffer *readBuffer = readFramebuffer->getColorbuffer(0);
gl::Renderbuffer *drawBuffer = drawFramebuffer->getColorbuffer(0);
gl::FramebufferAttachment *readBuffer = readFramebuffer->getColorbuffer(0);
gl::FramebufferAttachment *drawBuffer = drawFramebuffer->getColorbuffer(0);
RenderTarget9 *readRenderTarget = NULL;
RenderTarget9 *drawRenderTarget = NULL;
IDirect3DSurface9* readSurface = NULL;
......@@ -3064,8 +3064,8 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle &
if (blitDepth || blitStencil)
{
gl::Renderbuffer *readBuffer = readFramebuffer->getDepthOrStencilbuffer();
gl::Renderbuffer *drawBuffer = drawFramebuffer->getDepthOrStencilbuffer();
gl::FramebufferAttachment *readBuffer = readFramebuffer->getDepthOrStencilbuffer();
gl::FramebufferAttachment *drawBuffer = drawFramebuffer->getDepthOrStencilbuffer();
RenderTarget9 *readDepthStencil = NULL;
RenderTarget9 *drawDepthStencil = NULL;
IDirect3DSurface9* readSurface = NULL;
......@@ -3117,7 +3117,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *surface = NULL;
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
gl::FramebufferAttachment *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer)
{
......
......@@ -19,7 +19,7 @@
namespace gl
{
class Renderbuffer;
class FramebufferAttachment;
}
namespace rx
......@@ -249,7 +249,7 @@ class Renderer9 : public Renderer
void drawIndexedPoints(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer);
bool copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *source, bool fromManaged);
gl::Renderbuffer *getNullColorbuffer(gl::Renderbuffer *depthbuffer);
gl::FramebufferAttachment *getNullColorbuffer(gl::FramebufferAttachment *depthbuffer);
D3DPOOL getBufferPool(DWORD usage) const;
......@@ -401,7 +401,7 @@ class Renderer9 : public Renderer
UINT lruCount;
int width;
int height;
gl::Renderbuffer *buffer;
gl::FramebufferAttachment *buffer;
} mNullColorbufferCache[NUM_NULL_COLORBUFFER_CACHE_ENTRIES];
UINT mMaxNullColorbufferLRU;
......
......@@ -375,7 +375,7 @@ bool ValidateFramebufferRenderbufferParameters(gl::Context *context, GLenum targ
return true;
}
static bool IsPartialBlit(gl::Context *context, gl::Renderbuffer *readBuffer, gl::Renderbuffer *writeBuffer,
static bool IsPartialBlit(gl::Context *context, gl::FramebufferAttachment *readBuffer, gl::FramebufferAttachment *writeBuffer,
GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1)
{
......@@ -472,8 +472,8 @@ bool ValidateBlitFramebufferParameters(gl::Context *context, GLint srcX0, GLint
if (mask & GL_COLOR_BUFFER_BIT)
{
gl::Renderbuffer *readColorBuffer = readFramebuffer->getReadColorbuffer();
gl::Renderbuffer *drawColorBuffer = drawFramebuffer->getFirstColorbuffer();
gl::FramebufferAttachment *readColorBuffer = readFramebuffer->getReadColorbuffer();
gl::FramebufferAttachment *drawColorBuffer = drawFramebuffer->getFirstColorbuffer();
if (readColorBuffer && drawColorBuffer)
{
......@@ -555,8 +555,8 @@ bool ValidateBlitFramebufferParameters(gl::Context *context, GLint srcX0, GLint
if (mask & GL_DEPTH_BUFFER_BIT)
{
gl::Renderbuffer *readDepthBuffer = readFramebuffer->getDepthbuffer();
gl::Renderbuffer *drawDepthBuffer = drawFramebuffer->getDepthbuffer();
gl::FramebufferAttachment *readDepthBuffer = readFramebuffer->getDepthbuffer();
gl::FramebufferAttachment *drawDepthBuffer = drawFramebuffer->getDepthbuffer();
if (readDepthBuffer && drawDepthBuffer)
{
......@@ -589,8 +589,8 @@ bool ValidateBlitFramebufferParameters(gl::Context *context, GLint srcX0, GLint
if (mask & GL_STENCIL_BUFFER_BIT)
{
gl::Renderbuffer *readStencilBuffer = readFramebuffer->getStencilbuffer();
gl::Renderbuffer *drawStencilBuffer = drawFramebuffer->getStencilbuffer();
gl::FramebufferAttachment *readStencilBuffer = readFramebuffer->getStencilbuffer();
gl::FramebufferAttachment *drawStencilBuffer = drawFramebuffer->getStencilbuffer();
if (readStencilBuffer && drawStencilBuffer)
{
......@@ -1078,8 +1078,8 @@ bool ValidateStateQuery(gl::Context *context, GLenum pname, GLenum *nativeType,
return gl::error(GL_INVALID_OPERATION, false);
}
Renderbuffer *renderbuffer = framebuffer->getReadColorbuffer();
if (!renderbuffer)
FramebufferAttachment *attachment = framebuffer->getReadColorbuffer();
if (!attachment)
{
return gl::error(GL_INVALID_OPERATION, false);
}
......
......@@ -316,7 +316,18 @@ bool ValidateES3CopyTexImageParameters(gl::Context *context, GLenum target, GLin
}
gl::Framebuffer *framebuffer = context->getReadFramebuffer();
gl::Renderbuffer *source = framebuffer->getReadColorbuffer();
if (framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)
{
return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION, false);
}
if (context->getReadFramebufferHandle() != 0 && framebuffer->getSamples() != 0)
{
return gl::error(GL_INVALID_OPERATION, false);
}
gl::FramebufferAttachment *source = framebuffer->getReadColorbuffer();
GLenum colorbufferInternalFormat = source->getInternalFormat();
if (isSubImage)
......
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