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)
{
switch (pname)
{
case GL_RED_BITS: *params = colorbuffer->getRedSize(); break;
case GL_GREEN_BITS: *params = colorbuffer->getGreenSize(); break;
case GL_BLUE_BITS: *params = colorbuffer->getBlueSize(); break;
case GL_ALPHA_BITS: *params = colorbuffer->getAlphaSize(); break;
case GL_RED_BITS: *params = colorbuffer->getRedSize(mClientVersion); break;
case GL_GREEN_BITS: *params = colorbuffer->getGreenSize(mClientVersion); break;
case GL_BLUE_BITS: *params = colorbuffer->getBlueSize(mClientVersion); break;
case GL_ALPHA_BITS: *params = colorbuffer->getAlphaSize(mClientVersion); break;
}
}
else
......@@ -1868,7 +1868,7 @@ void Context::getIntegerv(GLenum pname, GLint *params)
if (depthbuffer)
{
*params = depthbuffer->getDepthSize();
*params = depthbuffer->getDepthSize(mClientVersion);
}
else
{
......@@ -1883,7 +1883,7 @@ void Context::getIntegerv(GLenum pname, GLint *params)
if (stencilbuffer)
{
*params = stencilbuffer->getStencilSize();
*params = stencilbuffer->getStencilSize(mClientVersion);
}
else
{
......
......@@ -132,7 +132,7 @@ void Framebuffer::setColorbuffer(unsigned int colorAttachment, GLenum type, GLui
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, colorbuffer, level, layer);
if (attachmentImpl)
{
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, colorbuffer, attachmentImpl);
FramebufferAttachment *newAttachment = new FramebufferAttachment(colorbuffer, attachmentImpl);
mColorbuffers[colorAttachment].set(newAttachment, type, level, layer);
}
else
......@@ -146,7 +146,7 @@ void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level, G
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, depthbuffer, level, layer);
if (attachmentImpl)
{
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, depthbuffer, attachmentImpl);
FramebufferAttachment *newAttachment = new FramebufferAttachment(depthbuffer, attachmentImpl);
mDepthbuffer.set(newAttachment, type, level, layer);
}
else
......@@ -160,7 +160,7 @@ void Framebuffer::setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint leve
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, stencilbuffer, level, layer);
if (attachmentImpl)
{
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, stencilbuffer, attachmentImpl);
FramebufferAttachment *newAttachment = new FramebufferAttachment(stencilbuffer, attachmentImpl);
mStencilbuffer.set(newAttachment, type, level, layer);
}
else
......@@ -177,8 +177,9 @@ void Framebuffer::setDepthStencilBuffer(GLenum type, GLuint depthStencilBuffer,
FramebufferAttachmentImpl *attachmentImpl = createAttachmentImpl(type, depthStencilBuffer, level, layer);
if (attachmentImpl)
{
FramebufferAttachment *newAttachment = new FramebufferAttachment(mRenderer, depthStencilBuffer, attachmentImpl);
if (newAttachment->getDepthSize() > 0 && newAttachment->getStencilSize() > 0)
FramebufferAttachment *newAttachment = new FramebufferAttachment(depthStencilBuffer, attachmentImpl);
int clientVersion = mRenderer->getCurrentClientVersion();
if (newAttachment->getDepthSize(clientVersion) > 0 && newAttachment->getStencilSize(clientVersion) > 0)
{
mDepthbuffer.set(newAttachment, type, level, layer);
mStencilbuffer.set(newAttachment, type, level, layer);
......@@ -445,7 +446,8 @@ bool Framebuffer::hasStencil() const
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
: Framebuffer(renderer)
{
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);
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);
mStencilbuffer.set(depthStencilAttachment, (depthStencilRenderbuffer->getStencilSize() != 0) ? GL_RENDERBUFFER : GL_NONE, 0, 0);
......
......@@ -355,12 +355,10 @@ unsigned int Texture2DArrayAttachment::getTextureSerial() const
////// FramebufferAttachment Implementation //////
FramebufferAttachment::FramebufferAttachment(rx::Renderer *renderer, GLuint id, FramebufferAttachmentImpl *instance)
FramebufferAttachment::FramebufferAttachment(GLuint id, FramebufferAttachmentImpl *instance)
: RefCountObject(id),
mRenderer(renderer),
mImpl(instance)
{
ASSERT(mRenderer != NULL);
ASSERT(mImpl != NULL);
}
......@@ -420,11 +418,11 @@ GLenum FramebufferAttachment::getActualFormat() const
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
{
......@@ -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
{
......@@ -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
{
......@@ -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
{
......@@ -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
{
......@@ -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
{
......@@ -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
......
......@@ -42,7 +42,7 @@ class Renderbuffer;
class FramebufferAttachment : public RefCountObject
{
public:
FramebufferAttachment(rx::Renderer *renderer, GLuint id, FramebufferAttachmentImpl *storage);
FramebufferAttachment(GLuint id, FramebufferAttachmentImpl *storage);
virtual ~FramebufferAttachment();
......@@ -61,14 +61,14 @@ class FramebufferAttachment : public RefCountObject
GLsizei getHeight() const;
GLenum getInternalFormat() const;
GLenum getActualFormat() const;
GLuint getRedSize() const;
GLuint getGreenSize() const;
GLuint getBlueSize() const;
GLuint getAlphaSize() const;
GLuint getDepthSize() const;
GLuint getStencilSize() const;
GLenum getComponentType() const;
GLenum getColorEncoding() const;
GLuint getRedSize(int clientVersion) const;
GLuint getGreenSize(int clientVersion) const;
GLuint getBlueSize(int clientVersion) const;
GLuint getAlphaSize(int clientVersion) const;
GLuint getDepthSize(int clientVersion) const;
GLuint getStencilSize(int clientVersion) const;
GLenum getComponentType(int clientVersion) const;
GLenum getColorEncoding(int clientVersion) const;
GLsizei getSamples() const;
unsigned int getSerial() const;
......@@ -81,7 +81,6 @@ class FramebufferAttachment : public RefCountObject
private:
DISALLOW_COPY_AND_ASSIGN(FramebufferAttachment);
rx::Renderer const *mRenderer;
FramebufferAttachmentImpl *mImpl;
};
......
......@@ -1032,7 +1032,7 @@ FramebufferAttachment *Texture2D::getAttachment(GLint level)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, 0);
if (!attachment)
{
attachment = new FramebufferAttachment(mRenderer, id(), new Texture2DAttachment(this, level));
attachment = new FramebufferAttachment(id(), new Texture2DAttachment(this, level));
mRenderbufferProxies.add(level, 0, attachment);
}
......@@ -1670,7 +1670,7 @@ FramebufferAttachment *TextureCubeMap::getAttachment(GLenum target, GLint level)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, faceIndex);
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);
}
......@@ -2047,7 +2047,7 @@ FramebufferAttachment *Texture3D::getAttachment(GLint level, GLint layer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer);
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);
}
......@@ -2598,7 +2598,7 @@ FramebufferAttachment *Texture2DArray::getAttachment(GLint level, GLint layer)
FramebufferAttachment *attachment = mRenderbufferProxies.get(level, layer);
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);
}
......
......@@ -2537,6 +2537,8 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
return gl::error(GL_INVALID_ENUM);
}
int clientVersion = context->getClientVersion();
switch (pname)
{
case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
......@@ -2553,7 +2555,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
if (context->getClientVersion() >= 3)
if (clientVersion >= 3)
{
break;
}
......@@ -2569,7 +2571,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
case GL_DEPTH:
case GL_STENCIL:
case GL_DEPTH_STENCIL_ATTACHMENT:
if (context->getClientVersion() < 3)
if (clientVersion < 3)
{
return gl::error(GL_INVALID_ENUM);
}
......@@ -2600,7 +2602,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
if (framebufferHandle == 0)
{
if (context->getClientVersion() < 3)
if (clientVersion < 3)
{
return gl::error(GL_INVALID_OPERATION);
}
......@@ -2713,7 +2715,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
break;
case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
if (context->getClientVersion() < 3)
if (clientVersion < 3)
{
return gl::error(GL_INVALID_ENUM);
}
......@@ -2721,7 +2723,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
break;
default:
if (context->getClientVersion() < 3)
if (clientVersion < 3)
{
return gl::error(GL_INVALID_ENUM);
}
......@@ -2768,27 +2770,27 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
break;
case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
*params = attachmentObject->getRedSize();
*params = attachmentObject->getRedSize(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
*params = attachmentObject->getGreenSize();
*params = attachmentObject->getGreenSize(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
*params = attachmentObject->getBlueSize();
*params = attachmentObject->getBlueSize(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
*params = attachmentObject->getAlphaSize();
*params = attachmentObject->getAlphaSize(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
*params = attachmentObject->getDepthSize();
*params = attachmentObject->getDepthSize(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
*params = attachmentObject->getStencilSize();
*params = attachmentObject->getStencilSize(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
......@@ -2796,11 +2798,11 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
{
gl::error(GL_INVALID_OPERATION);
}
*params = attachmentObject->getComponentType();
*params = attachmentObject->getComponentType(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
*params = attachmentObject->getColorEncoding();
*params = attachmentObject->getColorEncoding(clientVersion);
break;
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
......
......@@ -10,7 +10,7 @@
#include "libGLESv2/renderer/d3d11/RenderStateCache.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/Renderbuffer.h"
......@@ -38,7 +38,7 @@ const unsigned int RenderStateCache::kMaxRasterizerStates = 4096;
const unsigned int RenderStateCache::kMaxDepthStencilStates = 4096;
const unsigned int RenderStateCache::kMaxSamplerStates = 4096;
RenderStateCache::RenderStateCache() : mDevice(NULL), mCounter(0),
RenderStateCache::RenderStateCache() : mRenderer(NULL), mCounter(0),
mBlendStateCache(kMaxBlendStates, hashBlendState, compareBlendStates),
mRasterizerStateCache(kMaxRasterizerStates, hashRasterizerState, compareRasterizerStates),
mDepthStencilStateCache(kMaxDepthStencilStates, hashDepthStencilState, compareDepthStencilStates),
......@@ -51,10 +51,10 @@ RenderStateCache::~RenderStateCache()
clear();
}
void RenderStateCache::initialize(ID3D11Device *device)
void RenderStateCache::initialize(Renderer11 *renderer)
{
clear();
mDevice = device;
mRenderer = renderer;
}
void RenderStateCache::clear()
......@@ -81,7 +81,7 @@ bool RenderStateCache::compareBlendStates(const BlendStateKey &a, const BlendSta
ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebuffer, const gl::BlendState &blendState)
{
if (!mDevice)
if (!mRenderer)
{
ERR("RenderStateCache is not initialized.");
return NULL;
......@@ -89,6 +89,8 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu
bool mrt = false;
int clientVersion = mRenderer->getCurrentClientVersion();
BlendStateKey key = { 0 };
key.blendState = blendState;
for (unsigned int i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++)
......@@ -101,10 +103,10 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu
mrt = true;
}
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;
key.rtChannels[i][0] = attachment->getRedSize(clientVersion) > 0;
key.rtChannels[i][1] = attachment->getGreenSize(clientVersion) > 0;
key.rtChannels[i][2] = attachment->getBlueSize(clientVersion) > 0;
key.rtChannels[i][3] = attachment->getAlphaSize(clientVersion) > 0;
}
else
{
......@@ -169,7 +171,8 @@ ID3D11BlendState *RenderStateCache::getBlendState(const gl::Framebuffer *framebu
}
ID3D11BlendState *dx11BlendState = NULL;
HRESULT result = mDevice->CreateBlendState(&blendDesc, &dx11BlendState);
ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateBlendState(&blendDesc, &dx11BlendState);
if (FAILED(result) || !dx11BlendState)
{
ERR("Unable to create a ID3D11BlendState, HRESULT: 0x%X.", result);
......@@ -198,7 +201,7 @@ bool RenderStateCache::compareRasterizerStates(const RasterizerStateKey &a, cons
ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::RasterizerState &rasterState, bool scissorEnabled)
{
if (!mDevice)
if (!mRenderer)
{
ERR("RenderStateCache is not initialized.");
return NULL;
......@@ -264,7 +267,8 @@ ID3D11RasterizerState *RenderStateCache::getRasterizerState(const gl::Rasterizer
}
ID3D11RasterizerState *dx11RasterizerState = NULL;
HRESULT result = mDevice->CreateRasterizerState(&rasterDesc, &dx11RasterizerState);
ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateRasterizerState(&rasterDesc, &dx11RasterizerState);
if (FAILED(result) || !dx11RasterizerState)
{
ERR("Unable to create a ID3D11RasterizerState, HRESULT: 0x%X.", result);
......@@ -293,7 +297,7 @@ bool RenderStateCache::compareDepthStencilStates(const gl::DepthStencilState &a,
ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthStencilState &dsState)
{
if (!mDevice)
if (!mRenderer)
{
ERR("RenderStateCache is not initialized.");
return NULL;
......@@ -342,7 +346,8 @@ ID3D11DepthStencilState *RenderStateCache::getDepthStencilState(const gl::DepthS
dsDesc.BackFace.StencilFunc = gl_d3d11::ConvertComparison(dsState.stencilBackFunc);
ID3D11DepthStencilState *dx11DepthStencilState = NULL;
HRESULT result = mDevice->CreateDepthStencilState(&dsDesc, &dx11DepthStencilState);
ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateDepthStencilState(&dsDesc, &dx11DepthStencilState);
if (FAILED(result) || !dx11DepthStencilState)
{
ERR("Unable to create a ID3D11DepthStencilState, HRESULT: 0x%X.", result);
......@@ -371,7 +376,7 @@ bool RenderStateCache::compareSamplerStates(const gl::SamplerState &a, const gl:
ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &samplerState)
{
if (!mDevice)
if (!mRenderer)
{
ERR("RenderStateCache is not initialized.");
return NULL;
......@@ -420,7 +425,8 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
samplerDesc.MaxLOD = samplerState.maxLod;
ID3D11SamplerState *dx11SamplerState = NULL;
HRESULT result = mDevice->CreateSamplerState(&samplerDesc, &dx11SamplerState);
ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateSamplerState(&samplerDesc, &dx11SamplerState);
if (FAILED(result) || !dx11SamplerState)
{
ERR("Unable to create a ID3D11DepthStencilState, HRESULT: 0x%X.", result);
......
......@@ -20,6 +20,7 @@ class Framebuffer;
namespace rx
{
class Renderer11;
class RenderStateCache
{
......@@ -27,7 +28,7 @@ class RenderStateCache
RenderStateCache();
virtual ~RenderStateCache();
void initialize(ID3D11Device *device);
void initialize(Renderer11 *renderer);
void clear();
ID3D11BlendState *getBlendState(const gl::Framebuffer *framebuffer, const gl::BlendState &blendState);
......@@ -100,7 +101,7 @@ class RenderStateCache
SamplerStateEqualityFunction> SamplerStateMap;
SamplerStateMap mSamplerStateCache;
ID3D11Device *mDevice;
Renderer11 *mRenderer;
};
}
......
......@@ -291,7 +291,7 @@ EGLint Renderer11::initialize()
// to reset the scene status and ensure the default states are reset.
void Renderer11::initializeDevice()
{
mStateCache.initialize(mDevice);
mStateCache.initialize(this);
mInputLayoutCache.initialize(mDevice, mDeviceContext);
ASSERT(!mVertexDataManager && !mIndexDataManager);
......
......@@ -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::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
NullColorbufferCacheEntry *oldest = &mNullColorbufferCache[0];
......@@ -1241,8 +1241,8 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
mDevice->SetDepthStencilSurface(depthStencilSurface);
SafeRelease(depthStencilSurface);
depthSize = depthStencil->getDepthSize();
stencilSize = depthStencil->getStencilSize();
depthSize = depthStencil->getDepthSize(getCurrentClientVersion());
stencilSize = depthStencil->getStencilSize(getCurrentClientVersion());
}
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