Commit 1e3fa74d by Jamie Madill

Remove Renderer pointer from FBO attachments.

Removing the Renderer pointer is one step towards making FBO attachments a minimal state object. Eventually we will be able to store them as arrays instead of arrays of pointers. BUG=angle:660 Change-Id: Idce34e06c339ecb18c60fef12d2ed911d0c4e0f6 Reviewed-on: https://chromium-review.googlesource.com/201835Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 6c7b4ada
...@@ -1849,10 +1849,10 @@ void Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1849,10 +1849,10 @@ void Context::getIntegerv(GLenum pname, GLint *params)
{ {
switch (pname) switch (pname)
{ {
case GL_RED_BITS: *params = colorbuffer->getRedSize(); break; case GL_RED_BITS: *params = colorbuffer->getRedSize(mClientVersion); break;
case GL_GREEN_BITS: *params = colorbuffer->getGreenSize(); break; case GL_GREEN_BITS: *params = colorbuffer->getGreenSize(mClientVersion); break;
case GL_BLUE_BITS: *params = colorbuffer->getBlueSize(); break; case GL_BLUE_BITS: *params = colorbuffer->getBlueSize(mClientVersion); break;
case GL_ALPHA_BITS: *params = colorbuffer->getAlphaSize(); break; case GL_ALPHA_BITS: *params = colorbuffer->getAlphaSize(mClientVersion); break;
} }
} }
else else
...@@ -1868,7 +1868,7 @@ void Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1868,7 +1868,7 @@ void Context::getIntegerv(GLenum pname, GLint *params)
if (depthbuffer) if (depthbuffer)
{ {
*params = depthbuffer->getDepthSize(); *params = depthbuffer->getDepthSize(mClientVersion);
} }
else else
{ {
...@@ -1883,7 +1883,7 @@ void Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1883,7 +1883,7 @@ void Context::getIntegerv(GLenum pname, GLint *params)
if (stencilbuffer) if (stencilbuffer)
{ {
*params = stencilbuffer->getStencilSize(); *params = stencilbuffer->getStencilSize(mClientVersion);
} }
else else
{ {
......
...@@ -132,7 +132,7 @@ void Framebuffer::setColorbuffer(unsigned int colorAttachment, GLenum type, GLui ...@@ -132,7 +132,7 @@ void Framebuffer::setColorbuffer(unsigned int colorAttachment, GLenum type, GLui
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, colorbuffer, level, layer); FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, colorbuffer, level, layer);
if (attachmentImpl) if (attachmentImpl)
{ {
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, colorbuffer, attachmentImpl); FramebufferAttachment *newAttachment = new FramebufferAttachment(colorbuffer, attachmentImpl);
mColorbuffers[colorAttachment].set(newAttachment, type, level, layer); mColorbuffers[colorAttachment].set(newAttachment, type, level, layer);
} }
else else
...@@ -146,7 +146,7 @@ void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level, G ...@@ -146,7 +146,7 @@ void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level, G
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, depthbuffer, level, layer); FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, depthbuffer, level, layer);
if (attachmentImpl) if (attachmentImpl)
{ {
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, depthbuffer, attachmentImpl); FramebufferAttachment *newAttachment = new FramebufferAttachment(depthbuffer, attachmentImpl);
mDepthbuffer.set(newAttachment, type, level, layer); mDepthbuffer.set(newAttachment, type, level, layer);
} }
else else
...@@ -160,7 +160,7 @@ void Framebuffer::setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint leve ...@@ -160,7 +160,7 @@ void Framebuffer::setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint leve
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, stencilbuffer, level, layer); FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, stencilbuffer, level, layer);
if (attachmentImpl) if (attachmentImpl)
{ {
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, stencilbuffer, attachmentImpl); FramebufferAttachment *newAttachment = new FramebufferAttachment(stencilbuffer, attachmentImpl);
mStencilbuffer.set(newAttachment, type, level, layer); mStencilbuffer.set(newAttachment, type, level, layer);
} }
else else
...@@ -177,8 +177,9 @@ void Framebuffer::setDepthStencilBuffer(GLenum type, GLuint depthStencilBuffer, ...@@ -177,8 +177,9 @@ void Framebuffer::setDepthStencilBuffer(GLenum type, GLuint depthStencilBuffer,
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, depthStencilBuffer, level, layer); FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, depthStencilBuffer, level, layer);
if (attachmentImpl) if (attachmentImpl)
{ {
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, depthStencilBuffer, attachmentImpl); FramebufferAttachment *newAttachment = new FramebufferAttachment(depthStencilBuffer, attachmentImpl);
if (newAttachment->getDepthSize() > 0 && newAttachment->getStencilSize() > 0) int clientVersion = mRenderer->getCurrentClientVersion();
if (newAttachment->getDepthSize(clientVersion) > 0 && newAttachment->getStencilSize(clientVersion) > 0)
{ {
mDepthbuffer.set(newAttachment, type, level, layer); mDepthbuffer.set(newAttachment, type, level, layer);
mStencilbuffer.set(newAttachment, type, level, layer); mStencilbuffer.set(newAttachment, type, level, layer);
...@@ -445,7 +446,8 @@ bool Framebuffer::hasStencil() const ...@@ -445,7 +446,8 @@ bool Framebuffer::hasStencil() const
if (stencilbufferObject) if (stencilbufferObject)
{ {
return stencilbufferObject->getStencilSize() > 0; int clientVersion = mRenderer->getCurrentClientVersion();
return stencilbufferObject->getStencilSize(clientVersion) > 0;
} }
} }
...@@ -717,11 +719,11 @@ DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colo ...@@ -717,11 +719,11 @@ DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colo
: Framebuffer(renderer) : Framebuffer(renderer)
{ {
Renderbuffer *colorRenderbuffer = new Renderbuffer(mRenderer, 0, colorbuffer); Renderbuffer *colorRenderbuffer = new Renderbuffer(mRenderer, 0, colorbuffer);
FramebufferAttachment *colorAttachment = new FramebufferAttachment(mRenderer, 0, new RenderbufferAttachment(colorRenderbuffer)); FramebufferAttachment *colorAttachment = new FramebufferAttachment(0, new RenderbufferAttachment(colorRenderbuffer));
mColorbuffers[0].set(colorAttachment, GL_RENDERBUFFER, 0, 0); mColorbuffers[0].set(colorAttachment, GL_RENDERBUFFER, 0, 0);
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(mRenderer, 0, depthStencil); Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(mRenderer, 0, depthStencil);
FramebufferAttachment *depthStencilAttachment = new FramebufferAttachment(mRenderer, 0, new RenderbufferAttachment(depthStencilRenderbuffer)); FramebufferAttachment *depthStencilAttachment = new FramebufferAttachment(0, new RenderbufferAttachment(depthStencilRenderbuffer));
mDepthbuffer.set(depthStencilAttachment, (depthStencilRenderbuffer->getDepthSize() != 0) ? GL_RENDERBUFFER : GL_NONE, 0, 0); mDepthbuffer.set(depthStencilAttachment, (depthStencilRenderbuffer->getDepthSize() != 0) ? GL_RENDERBUFFER : GL_NONE, 0, 0);
mStencilbuffer.set(depthStencilAttachment, (depthStencilRenderbuffer->getStencilSize() != 0) ? GL_RENDERBUFFER : GL_NONE, 0, 0); mStencilbuffer.set(depthStencilAttachment, (depthStencilRenderbuffer->getStencilSize() != 0) ? GL_RENDERBUFFER : GL_NONE, 0, 0);
......
...@@ -355,12 +355,10 @@ unsigned int Texture2DArrayAttachment::getTextureSerial() const ...@@ -355,12 +355,10 @@ unsigned int Texture2DArrayAttachment::getTextureSerial() const
////// FramebufferAttachment Implementation ////// ////// FramebufferAttachment Implementation //////
FramebufferAttachment::FramebufferAttachment(rx::Renderer *renderer, GLuint id, FramebufferAttachmentImpl *instance) FramebufferAttachment::FramebufferAttachment(GLuint id, FramebufferAttachmentImpl *instance)
: RefCountObject(id), : RefCountObject(id),
mRenderer(renderer),
mImpl(instance) mImpl(instance)
{ {
ASSERT(mRenderer != NULL);
ASSERT(mImpl != NULL); ASSERT(mImpl != NULL);
} }
...@@ -420,11 +418,11 @@ GLenum FramebufferAttachment::getActualFormat() const ...@@ -420,11 +418,11 @@ GLenum FramebufferAttachment::getActualFormat() const
return mImpl->getActualFormat(); return mImpl->getActualFormat();
} }
GLuint FramebufferAttachment::getRedSize() const GLuint FramebufferAttachment::getRedSize(int clientVersion) const
{ {
if (gl::GetRedBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0) if (gl::GetRedBits(getInternalFormat(), clientVersion) > 0)
{ {
return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetRedBits(getActualFormat(), clientVersion);
} }
else else
{ {
...@@ -432,11 +430,11 @@ GLuint FramebufferAttachment::getRedSize() const ...@@ -432,11 +430,11 @@ GLuint FramebufferAttachment::getRedSize() const
} }
} }
GLuint FramebufferAttachment::getGreenSize() const GLuint FramebufferAttachment::getGreenSize(int clientVersion) const
{ {
if (gl::GetGreenBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0) if (gl::GetGreenBits(getInternalFormat(), clientVersion) > 0)
{ {
return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetGreenBits(getActualFormat(), clientVersion);
} }
else else
{ {
...@@ -444,11 +442,11 @@ GLuint FramebufferAttachment::getGreenSize() const ...@@ -444,11 +442,11 @@ GLuint FramebufferAttachment::getGreenSize() const
} }
} }
GLuint FramebufferAttachment::getBlueSize() const GLuint FramebufferAttachment::getBlueSize(int clientVersion) const
{ {
if (gl::GetBlueBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0) if (gl::GetBlueBits(getInternalFormat(), clientVersion) > 0)
{ {
return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetBlueBits(getActualFormat(), clientVersion);
} }
else else
{ {
...@@ -456,11 +454,11 @@ GLuint FramebufferAttachment::getBlueSize() const ...@@ -456,11 +454,11 @@ GLuint FramebufferAttachment::getBlueSize() const
} }
} }
GLuint FramebufferAttachment::getAlphaSize() const GLuint FramebufferAttachment::getAlphaSize(int clientVersion) const
{ {
if (gl::GetAlphaBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0) if (gl::GetAlphaBits(getInternalFormat(), clientVersion) > 0)
{ {
return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetAlphaBits(getActualFormat(), clientVersion);
} }
else else
{ {
...@@ -468,11 +466,11 @@ GLuint FramebufferAttachment::getAlphaSize() const ...@@ -468,11 +466,11 @@ GLuint FramebufferAttachment::getAlphaSize() const
} }
} }
GLuint FramebufferAttachment::getDepthSize() const GLuint FramebufferAttachment::getDepthSize(int clientVersion) const
{ {
if (gl::GetDepthBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0) if (gl::GetDepthBits(getInternalFormat(), clientVersion) > 0)
{ {
return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetDepthBits(getActualFormat(), clientVersion);
} }
else else
{ {
...@@ -480,11 +478,11 @@ GLuint FramebufferAttachment::getDepthSize() const ...@@ -480,11 +478,11 @@ GLuint FramebufferAttachment::getDepthSize() const
} }
} }
GLuint FramebufferAttachment::getStencilSize() const GLuint FramebufferAttachment::getStencilSize(int clientVersion) const
{ {
if (gl::GetStencilBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0) if (gl::GetStencilBits(getInternalFormat(), clientVersion) > 0)
{ {
return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetStencilBits(getActualFormat(), clientVersion);
} }
else else
{ {
...@@ -492,14 +490,14 @@ GLuint FramebufferAttachment::getStencilSize() const ...@@ -492,14 +490,14 @@ GLuint FramebufferAttachment::getStencilSize() const
} }
} }
GLenum FramebufferAttachment::getComponentType() const GLenum FramebufferAttachment::getComponentType(int clientVersion) const
{ {
return gl::GetComponentType(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetComponentType(getActualFormat(), clientVersion);
} }
GLenum FramebufferAttachment::getColorEncoding() const GLenum FramebufferAttachment::getColorEncoding(int clientVersion) const
{ {
return gl::GetColorEncoding(getActualFormat(), mRenderer->getCurrentClientVersion()); return gl::GetColorEncoding(getActualFormat(), clientVersion);
} }
GLsizei FramebufferAttachment::getSamples() const GLsizei FramebufferAttachment::getSamples() const
......
...@@ -42,7 +42,7 @@ class Renderbuffer; ...@@ -42,7 +42,7 @@ class Renderbuffer;
class FramebufferAttachment : public RefCountObject class FramebufferAttachment : public RefCountObject
{ {
public: public:
FramebufferAttachment(rx::Renderer *renderer, GLuint id, FramebufferAttachmentImpl *storage); FramebufferAttachment(GLuint id, FramebufferAttachmentImpl *storage);
virtual ~FramebufferAttachment(); virtual ~FramebufferAttachment();
...@@ -61,14 +61,14 @@ class FramebufferAttachment : public RefCountObject ...@@ -61,14 +61,14 @@ class FramebufferAttachment : public RefCountObject
GLsizei getHeight() const; GLsizei getHeight() const;
GLenum getInternalFormat() const; GLenum getInternalFormat() const;
GLenum getActualFormat() const; GLenum getActualFormat() const;
GLuint getRedSize() const; GLuint getRedSize(int clientVersion) const;
GLuint getGreenSize() const; GLuint getGreenSize(int clientVersion) const;
GLuint getBlueSize() const; GLuint getBlueSize(int clientVersion) const;
GLuint getAlphaSize() const; GLuint getAlphaSize(int clientVersion) const;
GLuint getDepthSize() const; GLuint getDepthSize(int clientVersion) const;
GLuint getStencilSize() const; GLuint getStencilSize(int clientVersion) const;
GLenum getComponentType() const; GLenum getComponentType(int clientVersion) const;
GLenum getColorEncoding() const; GLenum getColorEncoding(int clientVersion) const;
GLsizei getSamples() const; GLsizei getSamples() const;
unsigned int getSerial() const; unsigned int getSerial() const;
...@@ -81,7 +81,6 @@ class FramebufferAttachment : public RefCountObject ...@@ -81,7 +81,6 @@ class FramebufferAttachment : public RefCountObject
private: private:
DISALLOW_COPY_AND_ASSIGN(FramebufferAttachment); DISALLOW_COPY_AND_ASSIGN(FramebufferAttachment);
rx::Renderer const *mRenderer;
FramebufferAttachmentImpl *mImpl; FramebufferAttachmentImpl *mImpl;
}; };
......
...@@ -1032,7 +1032,7 @@ FramebufferAttachment *Texture2D::getAttachment(GLint level) ...@@ -1032,7 +1032,7 @@ FramebufferAttachment *Texture2D::getAttachment(GLint level)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, 0); FramebufferAttachment *attachment = mRenderbufferProxies.get(level, 0);
if (!attachment) if (!attachment)
{ {
attachment = new FramebufferAttachment(mRenderer, id(), new Texture2DAttachment(this, level)); attachment = new FramebufferAttachment(id(), new Texture2DAttachment(this, level));
mRenderbufferProxies.add(level, 0, attachment); mRenderbufferProxies.add(level, 0, attachment);
} }
...@@ -1670,7 +1670,7 @@ FramebufferAttachment *TextureCubeMap::getAttachment(GLenum target, GLint level) ...@@ -1670,7 +1670,7 @@ FramebufferAttachment *TextureCubeMap::getAttachment(GLenum target, GLint level)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, faceIndex); FramebufferAttachment *attachment = mRenderbufferProxies.get(level, faceIndex);
if (!attachment) if (!attachment)
{ {
attachment = new FramebufferAttachment(mRenderer, id(), new TextureCubeMapAttachment(this, target, level)); attachment = new FramebufferAttachment(id(), new TextureCubeMapAttachment(this, target, level));
mRenderbufferProxies.add(level, faceIndex, attachment); mRenderbufferProxies.add(level, faceIndex, attachment);
} }
...@@ -2047,7 +2047,7 @@ FramebufferAttachment *Texture3D::getAttachment(GLint level, GLint layer) ...@@ -2047,7 +2047,7 @@ FramebufferAttachment *Texture3D::getAttachment(GLint level, GLint layer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer); FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer);
if (!attachment) if (!attachment)
{ {
attachment = new FramebufferAttachment(mRenderer, id(), new Texture3DAttachment(this, level, layer)); attachment = new FramebufferAttachment(id(), new Texture3DAttachment(this, level, layer));
mRenderbufferProxies.add(level, 0, attachment); mRenderbufferProxies.add(level, 0, attachment);
} }
...@@ -2598,7 +2598,7 @@ FramebufferAttachment *Texture2DArray::getAttachment(GLint level, GLint layer) ...@@ -2598,7 +2598,7 @@ FramebufferAttachment *Texture2DArray::getAttachment(GLint level, GLint layer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer); FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer);
if (!attachment) if (!attachment)
{ {
attachment = new FramebufferAttachment(mRenderer, id(), new Texture2DArrayAttachment(this, level, layer)); attachment = new FramebufferAttachment(id(), new Texture2DArrayAttachment(this, level, layer));
mRenderbufferProxies.add(level, 0, attachment); mRenderbufferProxies.add(level, 0, attachment);
} }
......
...@@ -2537,6 +2537,8 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2537,6 +2537,8 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
int clientVersion = context->getClientVersion();
switch (pname) switch (pname)
{ {
case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
...@@ -2553,7 +2555,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2553,7 +2555,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
if (context->getClientVersion() >= 3) if (clientVersion >= 3)
{ {
break; break;
} }
...@@ -2569,7 +2571,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2569,7 +2571,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
case GL_DEPTH: case GL_DEPTH:
case GL_STENCIL: case GL_STENCIL:
case GL_DEPTH_STENCIL_ATTACHMENT: case GL_DEPTH_STENCIL_ATTACHMENT:
if (context->getClientVersion() < 3) if (clientVersion < 3)
{ {
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -2600,7 +2602,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2600,7 +2602,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
if (framebufferHandle == 0) if (framebufferHandle == 0)
{ {
if (context->getClientVersion() < 3) if (clientVersion < 3)
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
...@@ -2713,7 +2715,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2713,7 +2715,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
if (context->getClientVersion() < 3) if (clientVersion < 3)
{ {
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -2721,7 +2723,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2721,7 +2723,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
break; break;
default: default:
if (context->getClientVersion() < 3) if (clientVersion < 3)
{ {
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -2768,27 +2770,27 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2768,27 +2770,27 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
*params = attachmentObject->getRedSize(); *params = attachmentObject->getRedSize(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
*params = attachmentObject->getGreenSize(); *params = attachmentObject->getGreenSize(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
*params = attachmentObject->getBlueSize(); *params = attachmentObject->getBlueSize(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
*params = attachmentObject->getAlphaSize(); *params = attachmentObject->getAlphaSize(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
*params = attachmentObject->getDepthSize(); *params = attachmentObject->getDepthSize(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
*params = attachmentObject->getStencilSize(); *params = attachmentObject->getStencilSize(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
...@@ -2796,11 +2798,11 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac ...@@ -2796,11 +2798,11 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
{ {
gl::error(GL_INVALID_OPERATION); gl::error(GL_INVALID_OPERATION);
} }
*params = attachmentObject->getComponentType(); *params = attachmentObject->getComponentType(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
*params = attachmentObject->getColorEncoding(); *params = attachmentObject->getColorEncoding(clientVersion);
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "libGLESv2/renderer/d3d11/RenderStateCache.h" #include "libGLESv2/renderer/d3d11/RenderStateCache.h"
#include "libGLESv2/renderer/d3d11/renderer11_utils.h" #include "libGLESv2/renderer/d3d11/renderer11_utils.h"
#include "libGLESv2/renderer/Renderer.h" #include "libGLESv2/renderer/d3d11/Renderer11.h"
#include "libGLESv2/Framebuffer.h" #include "libGLESv2/Framebuffer.h"
#include "libGLESv2/Renderbuffer.h" #include "libGLESv2/Renderbuffer.h"
...@@ -38,7 +38,7 @@ const unsigned int RenderStateCache::kMaxRasterizerStates = 4096; ...@@ -38,7 +38,7 @@ const unsigned int RenderStateCache::kMaxRasterizerStates = 4096;
const unsigned int RenderStateCache::kMaxDepthStencilStates = 4096; const unsigned int RenderStateCache::kMaxDepthStencilStates = 4096;
const unsigned int RenderStateCache::kMaxSamplerStates = 4096; const unsigned int RenderStateCache::kMaxSamplerStates = 4096;
RenderStateCache::RenderStateCache() : mDevice(NULL), mCounter(0), RenderStateCache::RenderStateCache() : mRenderer(NULL), mCounter(0),
mBlendStateCache(kMaxBlendStates, hashBlendState, compareBlendStates), mBlendStateCache(kMaxBlendStates, hashBlendState, compareBlendStates),
mRasterizerStateCache(kMaxRasterizerStates, hashRasterizerState, compareRasterizerStates), mRasterizerStateCache(kMaxRasterizerStates, hashRasterizerState, compareRasterizerStates),
mDepthStencilStateCache(kMaxDepthStencilStates, hashDepthStencilState, compareDepthStencilStates), mDepthStencilStateCache(kMaxDepthStencilStates, hashDepthStencilState, compareDepthStencilStates),
...@@ -51,10 +51,10 @@ RenderStateCache::~RenderStateCache() ...@@ -51,10 +51,10 @@ RenderStateCache::~RenderStateCache()
clear(); clear();
} }
void RenderStateCache::initialize(ID3D11Device *device) void RenderStateCache::initialize(Renderer11 *renderer)
{ {
clear(); clear();
mDevice = device; mRenderer = renderer;
} }
void RenderStateCache::clear() void RenderStateCache::clear()
...@@ -81,7 +81,7 @@ bool RenderStateCache::compareBlendStates(const BlendStateKey &a, const BlendSta ...@@ -81,7 +81,7 @@ bool RenderStateCache::compareBlendStates(const BlendStateKey &a, const BlendSta
ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebuffer, const gl::BlendState &blendState) ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebuffer, const gl::BlendState &blendState)
{ {
if (!mDevice) if (!mRenderer)
{ {
ERR("RenderStateCache is not initialized."); ERR("RenderStateCache is not initialized.");
return NULL; return NULL;
...@@ -89,6 +89,8 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu ...@@ -89,6 +89,8 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu
bool mrt = false; bool mrt = false;
int clientVersion = mRenderer->getCurrentClientVersion();
BlendStateKey key = { 0 }; BlendStateKey key = { 0 };
key.blendState = blendState; key.blendState = blendState;
for (unsigned int i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++) for (unsigned int i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++)
...@@ -101,10 +103,10 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu ...@@ -101,10 +103,10 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu
mrt = true; mrt = true;
} }
key.rtChannels[i][0] = attachment->getRedSize() > 0; key.rtChannels[i][0] = attachment->getRedSize(clientVersion) > 0;
key.rtChannels[i][1] = attachment->getGreenSize() > 0; key.rtChannels[i][1] = attachment->getGreenSize(clientVersion) > 0;
key.rtChannels[i][2] = attachment->getBlueSize() > 0; key.rtChannels[i][2] = attachment->getBlueSize(clientVersion) > 0;
key.rtChannels[i][3] = attachment->getAlphaSize() > 0; key.rtChannels[i][3] = attachment->getAlphaSize(clientVersion) > 0;
} }
else else
{ {
...@@ -169,7 +171,8 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu ...@@ -169,7 +171,8 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu
} }
ID3D11BlendState *dx11BlendState = NULL; ID3D11BlendState *dx11BlendState = NULL;
HRESULT result = mDevice->CreateBlendState(&blendDesc, &dx11BlendState); ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateBlendState(&blendDesc, &dx11BlendState);
if (FAILED(result) || !dx11BlendState) if (FAILED(result) || !dx11BlendState)
{ {
ERR("Unable to create a ID3D11BlendState, HRESULT: 0x%X.", result); ERR("Unable to create a ID3D11BlendState, HRESULT: 0x%X.", result);
...@@ -198,7 +201,7 @@ bool RenderStateCache::compareRasterizerStates(const RasterizerStateKey &a, cons ...@@ -198,7 +201,7 @@ bool RenderStateCache::compareRasterizerStates(const RasterizerStateKey &a, cons
ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::RasterizerState &rasterState, bool scissorEnabled) ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::RasterizerState &rasterState, bool scissorEnabled)
{ {
if (!mDevice) if (!mRenderer)
{ {
ERR("RenderStateCache is not initialized."); ERR("RenderStateCache is not initialized.");
return NULL; return NULL;
...@@ -264,7 +267,8 @@ ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::Rasterizer ...@@ -264,7 +267,8 @@ ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::Rasterizer
} }
ID3D11RasterizerState *dx11RasterizerState = NULL; ID3D11RasterizerState *dx11RasterizerState = NULL;
HRESULT result = mDevice->CreateRasterizerState(&rasterDesc, &dx11RasterizerState); ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateRasterizerState(&rasterDesc, &dx11RasterizerState);
if (FAILED(result) || !dx11RasterizerState) if (FAILED(result) || !dx11RasterizerState)
{ {
ERR("Unable to create a ID3D11RasterizerState, HRESULT: 0x%X.", result); ERR("Unable to create a ID3D11RasterizerState, HRESULT: 0x%X.", result);
...@@ -293,7 +297,7 @@ bool RenderStateCache::compareDepthStencilStates(const gl::DepthStencilState &a, ...@@ -293,7 +297,7 @@ bool RenderStateCache::compareDepthStencilStates(const gl::DepthStencilState &a,
ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthStencilState &dsState) ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthStencilState &dsState)
{ {
if (!mDevice) if (!mRenderer)
{ {
ERR("RenderStateCache is not initialized."); ERR("RenderStateCache is not initialized.");
return NULL; return NULL;
...@@ -342,7 +346,8 @@ ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthS ...@@ -342,7 +346,8 @@ ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthS
dsDesc.BackFace.StencilFunc = gl_d3d11::ConvertComparison(dsState.stencilBackFunc); dsDesc.BackFace.StencilFunc = gl_d3d11::ConvertComparison(dsState.stencilBackFunc);
ID3D11DepthStencilState *dx11DepthStencilState = NULL; ID3D11DepthStencilState *dx11DepthStencilState = NULL;
HRESULT result = mDevice->CreateDepthStencilState(&dsDesc, &dx11DepthStencilState); ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateDepthStencilState(&dsDesc, &dx11DepthStencilState);
if (FAILED(result) || !dx11DepthStencilState) if (FAILED(result) || !dx11DepthStencilState)
{ {
ERR("Unable to create a ID3D11DepthStencilState, HRESULT: 0x%X.", result); ERR("Unable to create a ID3D11DepthStencilState, HRESULT: 0x%X.", result);
...@@ -371,7 +376,7 @@ bool RenderStateCache::compareSamplerStates(const gl::SamplerState &a, const gl: ...@@ -371,7 +376,7 @@ bool RenderStateCache::compareSamplerStates(const gl::SamplerState &a, const gl:
ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &samplerState) ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &samplerState)
{ {
if (!mDevice) if (!mRenderer)
{ {
ERR("RenderStateCache is not initialized."); ERR("RenderStateCache is not initialized.");
return NULL; return NULL;
...@@ -420,7 +425,8 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa ...@@ -420,7 +425,8 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
samplerDesc.MaxLOD = samplerState.maxLod; samplerDesc.MaxLOD = samplerState.maxLod;
ID3D11SamplerState *dx11SamplerState = NULL; ID3D11SamplerState *dx11SamplerState = NULL;
HRESULT result = mDevice->CreateSamplerState(&samplerDesc, &dx11SamplerState); ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateSamplerState(&samplerDesc, &dx11SamplerState);
if (FAILED(result) || !dx11SamplerState) if (FAILED(result) || !dx11SamplerState)
{ {
ERR("Unable to create a ID3D11DepthStencilState, HRESULT: 0x%X.", result); ERR("Unable to create a ID3D11DepthStencilState, HRESULT: 0x%X.", result);
......
...@@ -20,6 +20,7 @@ class Framebuffer; ...@@ -20,6 +20,7 @@ class Framebuffer;
namespace rx namespace rx
{ {
class Renderer11;
class RenderStateCache class RenderStateCache
{ {
...@@ -27,7 +28,7 @@ class RenderStateCache ...@@ -27,7 +28,7 @@ class RenderStateCache
RenderStateCache(); RenderStateCache();
virtual ~RenderStateCache(); virtual ~RenderStateCache();
void initialize(ID3D11Device *device); void initialize(Renderer11 *renderer);
void clear(); void clear();
ID3D11BlendState *getBlendState(const gl::Framebuffer *framebuffer, const gl::BlendState &blendState); ID3D11BlendState *getBlendState(const gl::Framebuffer *framebuffer, const gl::BlendState &blendState);
...@@ -100,7 +101,7 @@ class RenderStateCache ...@@ -100,7 +101,7 @@ class RenderStateCache
SamplerStateEqualityFunction> SamplerStateMap; SamplerStateEqualityFunction> SamplerStateMap;
SamplerStateMap mSamplerStateCache; SamplerStateMap mSamplerStateCache;
ID3D11Device *mDevice; Renderer11 *mRenderer;
}; };
} }
......
...@@ -291,7 +291,7 @@ EGLint Renderer11::initialize() ...@@ -291,7 +291,7 @@ EGLint Renderer11::initialize()
// to reset the scene status and ensure the default states are reset. // to reset the scene status and ensure the default states are reset.
void Renderer11::initializeDevice() void Renderer11::initializeDevice()
{ {
mStateCache.initialize(mDevice); mStateCache.initialize(this);
mInputLayoutCache.initialize(mDevice, mDeviceContext); mInputLayoutCache.initialize(mDevice, mDeviceContext);
ASSERT(!mVertexDataManager && !mIndexDataManager); ASSERT(!mVertexDataManager && !mIndexDataManager);
......
...@@ -1122,7 +1122,7 @@ gl::FramebufferAttachment *Renderer9::getNullColorbuffer(gl::FramebufferAttachme ...@@ -1122,7 +1122,7 @@ gl::FramebufferAttachment *Renderer9::getNullColorbuffer(gl::FramebufferAttachme
} }
gl::Renderbuffer *nullRenderbuffer = new gl::Renderbuffer(this, 0, new gl::Colorbuffer(this, width, height, GL_NONE, 0)); gl::Renderbuffer *nullRenderbuffer = new gl::Renderbuffer(this, 0, new gl::Colorbuffer(this, width, height, GL_NONE, 0));
gl::FramebufferAttachment *nullbuffer = new gl::FramebufferAttachment(this, 0, new gl::RenderbufferAttachment(nullRenderbuffer)); gl::FramebufferAttachment *nullbuffer = new gl::FramebufferAttachment(0, new gl::RenderbufferAttachment(nullRenderbuffer));
// add nullbuffer to the cache // add nullbuffer to the cache
NullColorbufferCacheEntry *oldest = &mNullColorbufferCache[0]; NullColorbufferCacheEntry *oldest = &mNullColorbufferCache[0];
...@@ -1241,8 +1241,8 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1241,8 +1241,8 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
mDevice->SetDepthStencilSurface(depthStencilSurface); mDevice->SetDepthStencilSurface(depthStencilSurface);
SafeRelease(depthStencilSurface); SafeRelease(depthStencilSurface);
depthSize = depthStencil->getDepthSize(); depthSize = depthStencil->getDepthSize(getCurrentClientVersion());
stencilSize = depthStencil->getStencilSize(); stencilSize = depthStencil->getStencilSize(getCurrentClientVersion());
} }
else else
{ {
......
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