Commit a6abd891 by Geoff Lang

Cache applied constant buffers.

Issue #451 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Geoff Lang
parent b312b1c6
...@@ -1442,9 +1442,18 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra ...@@ -1442,9 +1442,18 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra
{ {
mDeviceContext->Unmap(pixelConstantBuffer, 0); mDeviceContext->Unmap(pixelConstantBuffer, 0);
} }
mDeviceContext->VSSetConstantBuffers(0, 1, &vertexConstantBuffer); if (mCurrentVertexConstantBuffer != vertexConstantBuffer)
mDeviceContext->PSSetConstantBuffers(0, 1, &pixelConstantBuffer); {
mDeviceContext->VSSetConstantBuffers(0, 1, &vertexConstantBuffer);
mCurrentVertexConstantBuffer = vertexConstantBuffer;
}
if (mCurrentPixelConstantBuffer != pixelConstantBuffer)
{
mDeviceContext->PSSetConstantBuffers(0, 1, &pixelConstantBuffer);
mCurrentPixelConstantBuffer = pixelConstantBuffer;
}
// Driver uniforms // Driver uniforms
if (!mDriverConstantBufferVS) if (!mDriverConstantBufferVS)
...@@ -1492,7 +1501,11 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra ...@@ -1492,7 +1501,11 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra
} }
// needed for the point sprite geometry shader // needed for the point sprite geometry shader
mDeviceContext->GSSetConstantBuffers(0, 1, &mDriverConstantBufferPS); if (mCurrentGeometryConstantBuffer != mDriverConstantBufferPS)
{
mDeviceContext->GSSetConstantBuffers(0, 1, &mDriverConstantBufferPS);
mCurrentGeometryConstantBuffer = mDriverConstantBufferPS;
}
} }
void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer) void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
...@@ -1799,6 +1812,10 @@ void Renderer11::markAllStateDirty() ...@@ -1799,6 +1812,10 @@ void Renderer11::markAllStateDirty()
memset(&mAppliedPixelConstants, 0, sizeof(dx_PixelConstants)); memset(&mAppliedPixelConstants, 0, sizeof(dx_PixelConstants));
mInputLayoutCache.markDirty(); mInputLayoutCache.markDirty();
mCurrentVertexConstantBuffer = NULL;
mCurrentPixelConstantBuffer = NULL;
mCurrentGeometryConstantBuffer = NULL;
} }
void Renderer11::releaseDeviceResources() void Renderer11::releaseDeviceResources()
......
...@@ -298,10 +298,14 @@ class Renderer11 : public Renderer ...@@ -298,10 +298,14 @@ class Renderer11 : public Renderer
dx_VertexConstants mVertexConstants; dx_VertexConstants mVertexConstants;
dx_VertexConstants mAppliedVertexConstants; dx_VertexConstants mAppliedVertexConstants;
ID3D11Buffer *mDriverConstantBufferVS; ID3D11Buffer *mDriverConstantBufferVS;
ID3D11Buffer *mCurrentVertexConstantBuffer;
dx_PixelConstants mPixelConstants; dx_PixelConstants mPixelConstants;
dx_PixelConstants mAppliedPixelConstants; dx_PixelConstants mAppliedPixelConstants;
ID3D11Buffer *mDriverConstantBufferPS; ID3D11Buffer *mDriverConstantBufferPS;
ID3D11Buffer *mCurrentPixelConstantBuffer;
ID3D11Buffer *mCurrentGeometryConstantBuffer;
// Vertex, index and input layouts // Vertex, index and input layouts
VertexDataManager *mVertexDataManager; VertexDataManager *mVertexDataManager;
......
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