Fix regressions in the unit tests related to setting gl_PointSize, and using other draw modes.
This had two regressions, using gl_PointSize and drawing triangles, and drawing points and triangles
with the same binary program.
TRAC #22526
Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Jamie Madill
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1853 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index d43a7be..2088ac2 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -101,6 +101,8 @@
mDriverConstantBufferPS = NULL;
mBGRATextureSupport = false;
+
+ mIsGeometryShaderActive = false;
}
Renderer11::~Renderer11()
@@ -1096,7 +1098,6 @@
{
ShaderExecutable *vertexExe = programBinary->getVertexExecutable();
ShaderExecutable *pixelExe = programBinary->getPixelExecutable();
- ShaderExecutable *geometryExe = programBinary->getGeometryExecutable();
ID3D11VertexShader *vertexShader = NULL;
if (vertexExe) vertexShader = ShaderExecutable11::makeShaderExecutable11(vertexExe)->getVertexShader();
@@ -1104,14 +1105,23 @@
ID3D11PixelShader *pixelShader = NULL;
if (pixelExe) pixelShader = ShaderExecutable11::makeShaderExecutable11(pixelExe)->getPixelShader();
- ID3D11GeometryShader *geometryShader = NULL;
- if (geometryExe) geometryShader = ShaderExecutable11::makeShaderExecutable11(geometryExe)->getGeometryShader();
-
mDeviceContext->PSSetShader(pixelShader, NULL, 0);
mDeviceContext->VSSetShader(vertexShader, NULL, 0);
- if (geometryShader)
+ programBinary->dirtyAllUniforms();
+
+ mAppliedProgramBinarySerial = programBinarySerial;
+ }
+
+ // Only use the geometry shader currently for point sprite drawing
+ const bool usesGeometryShader = programBinary->usesGeometryShader() && mCurRasterState.pointDrawMode;
+
+ if (programBinarySerial != mAppliedProgramBinarySerial || usesGeometryShader != mIsGeometryShaderActive)
+ {
+ if (usesGeometryShader)
{
+ ShaderExecutable *geometryExe = programBinary->getGeometryExecutable();
+ ID3D11GeometryShader *geometryShader = ShaderExecutable11::makeShaderExecutable11(geometryExe)->getGeometryShader();
mDeviceContext->GSSetShader(geometryShader, NULL, 0);
}
else
@@ -1119,9 +1129,7 @@
mDeviceContext->GSSetShader(NULL, NULL, 0);
}
- programBinary->dirtyAllUniforms();
-
- mAppliedProgramBinarySerial = programBinarySerial;
+ mIsGeometryShaderActive = usesGeometryShader;
}
}