Fixed skipping over internal uniforms in getActiveUniform.
TRAC #14390
Signed-off-by: Daniel Koch
git-svn-id: https://angleproject.googlecode.com/svn/trunk@483 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Program.cpp b/src/libGLESv2/Program.cpp
index c5e7505..45f5c07 100644
--- a/src/libGLESv2/Program.cpp
+++ b/src/libGLESv2/Program.cpp
@@ -1374,7 +1374,7 @@
{
mPixelHLSL += " float4 gl_FragCoord : " + varyingSemantic + str(registers) + ";\n";
if (sm3) {
- mPixelHLSL += " float4 dx_VPos : VPOS;\n";
+ mPixelHLSL += " float2 dx_VPos : VPOS;\n";
}
}
@@ -2641,18 +2641,26 @@
void Program::getActiveUniform(GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
{
- unsigned int uniform = 0;
- for (unsigned int i = 0; i < index; i++)
+ // Skip over internal uniforms
+ unsigned int activeUniform = 0;
+ unsigned int uniform;
+ for (uniform = 0; uniform < mUniforms.size(); uniform++)
{
- do
+ while (mUniforms[uniform]->name.substr(0, 3) == "dx_")
{
uniform++;
-
- ASSERT(uniform < mUniforms.size()); // index must be smaller than getActiveUniformCount()
}
- while (mUniforms[uniform]->name.substr(0, 3) == "dx_");
+
+ if (activeUniform == index)
+ {
+ break;
+ }
+
+ activeUniform++;
}
+ ASSERT(uniform < mUniforms.size()); // index must be smaller than getActiveUniformCount()
+
if (bufsize > 0)
{
std::string string = undecorate(mUniforms[uniform]->name);