Skip applying uniforms for the D3D11 renderer (unimplemented for now), to make ProgramBinary back-end independent.
TRAC #22191
Signed-off-by: Shannon Woods
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1526 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/ProgramBinary.cpp b/src/libGLESv2/ProgramBinary.cpp
index fe3b58c..cb7f3aa 100644
--- a/src/libGLESv2/ProgramBinary.cpp
+++ b/src/libGLESv2/ProgramBinary.cpp
@@ -57,12 +57,8 @@
unsigned int ProgramBinary::mCurrentSerial = 1;
-ProgramBinary::ProgramBinary(rx::Renderer *renderer) : RefCountObject(0), mSerial(issueSerial())
+ProgramBinary::ProgramBinary(rx::Renderer *renderer) : mRenderer(renderer), RefCountObject(0), mSerial(issueSerial())
{
- ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
- mRenderer = static_cast<rx::Renderer9*>(renderer);
- mDevice = mRenderer->getDevice(); // D3D9_REPLACE
-
mPixelExecutable = NULL;
mVertexExecutable = NULL;
@@ -983,6 +979,13 @@
// Applies all the uniforms set for this program object to the Direct3D 9 device
void ProgramBinary::applyUniforms()
{
+ if (dynamic_cast<rx::Renderer9*>(mRenderer) == NULL) // D3D9_REPLACE
+ {
+ return; // UNIMPLEMENTED
+ }
+
+ IDirect3DDevice9 *device = rx::Renderer9::makeRenderer9(mRenderer)->getDevice(); // D3D9_REPLACE
+
for (std::vector<Uniform*>::iterator ub = mUniforms.begin(), ue = mUniforms.end(); ub != ue; ++ub) {
Uniform *targetUniform = *ub;
@@ -995,23 +998,23 @@
switch (targetUniform->type)
{
- case GL_BOOL: applyUniformnbv(targetUniform, arraySize, 1, b); break;
- case GL_BOOL_VEC2: applyUniformnbv(targetUniform, arraySize, 2, b); break;
- case GL_BOOL_VEC3: applyUniformnbv(targetUniform, arraySize, 3, b); break;
- case GL_BOOL_VEC4: applyUniformnbv(targetUniform, arraySize, 4, b); break;
+ case GL_BOOL: applyUniformnbv(device, targetUniform, arraySize, 1, b); break;
+ case GL_BOOL_VEC2: applyUniformnbv(device, targetUniform, arraySize, 2, b); break;
+ case GL_BOOL_VEC3: applyUniformnbv(device, targetUniform, arraySize, 3, b); break;
+ case GL_BOOL_VEC4: applyUniformnbv(device, targetUniform, arraySize, 4, b); break;
case GL_FLOAT:
case GL_FLOAT_VEC2:
case GL_FLOAT_VEC3:
case GL_FLOAT_VEC4:
case GL_FLOAT_MAT2:
case GL_FLOAT_MAT3:
- case GL_FLOAT_MAT4: applyUniformnfv(targetUniform, f); break;
+ case GL_FLOAT_MAT4: applyUniformnfv(device, targetUniform, f); break;
case GL_SAMPLER_2D:
case GL_SAMPLER_CUBE:
- case GL_INT: applyUniform1iv(targetUniform, arraySize, i); break;
- case GL_INT_VEC2: applyUniform2iv(targetUniform, arraySize, i); break;
- case GL_INT_VEC3: applyUniform3iv(targetUniform, arraySize, i); break;
- case GL_INT_VEC4: applyUniform4iv(targetUniform, arraySize, i); break;
+ case GL_INT: applyUniform1iv(device, targetUniform, arraySize, i); break;
+ case GL_INT_VEC2: applyUniform2iv(device, targetUniform, arraySize, i); break;
+ case GL_INT_VEC3: applyUniform3iv(device, targetUniform, arraySize, i); break;
+ case GL_INT_VEC4: applyUniform4iv(device, targetUniform, arraySize, i); break;
default:
UNREACHABLE();
}
@@ -2191,7 +2194,8 @@
return name;
}
-void ProgramBinary::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, const GLboolean *v)
+// D3D9_REPLACE begin
+void ProgramBinary::applyUniformnbv(IDirect3DDevice9 *device, Uniform *targetUniform, GLsizei count, int width, const GLboolean *v)
{
float vector[D3D9_MAX_FLOAT_CONSTANTS * 4];
BOOL boolVector[D3D9_MAX_BOOL_CONSTANTS];
@@ -2229,41 +2233,41 @@
if (targetUniform->ps.float4Index >= 0)
{
- mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, vector, targetUniform->ps.registerCount);
+ device->SetPixelShaderConstantF(targetUniform->ps.float4Index, vector, targetUniform->ps.registerCount);
}
if (targetUniform->ps.boolIndex >= 0)
{
- mDevice->SetPixelShaderConstantB(targetUniform->ps.boolIndex, boolVector, targetUniform->ps.registerCount);
+ device->SetPixelShaderConstantB(targetUniform->ps.boolIndex, boolVector, targetUniform->ps.registerCount);
}
if (targetUniform->vs.float4Index >= 0)
{
- mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, vector, targetUniform->vs.registerCount);
+ device->SetVertexShaderConstantF(targetUniform->vs.float4Index, vector, targetUniform->vs.registerCount);
}
if (targetUniform->vs.boolIndex >= 0)
{
- mDevice->SetVertexShaderConstantB(targetUniform->vs.boolIndex, boolVector, targetUniform->vs.registerCount);
+ device->SetVertexShaderConstantB(targetUniform->vs.boolIndex, boolVector, targetUniform->vs.registerCount);
}
}
-bool ProgramBinary::applyUniformnfv(Uniform *targetUniform, const GLfloat *v)
+bool ProgramBinary::applyUniformnfv(IDirect3DDevice9 *device, Uniform *targetUniform, const GLfloat *v)
{
if (targetUniform->ps.registerCount)
{
- mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, v, targetUniform->ps.registerCount);
+ device->SetPixelShaderConstantF(targetUniform->ps.float4Index, v, targetUniform->ps.registerCount);
}
if (targetUniform->vs.registerCount)
{
- mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, v, targetUniform->vs.registerCount);
+ device->SetVertexShaderConstantF(targetUniform->vs.float4Index, v, targetUniform->vs.registerCount);
}
return true;
}
-bool ProgramBinary::applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint *v)
+bool ProgramBinary::applyUniform1iv(IDirect3DDevice9 *device, Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
@@ -2293,7 +2297,7 @@
else
{
ASSERT(targetUniform->ps.float4Index >= 0);
- mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, (const float*)vector, targetUniform->ps.registerCount);
+ device->SetPixelShaderConstantF(targetUniform->ps.float4Index, (const float*)vector, targetUniform->ps.registerCount);
}
}
@@ -2317,14 +2321,14 @@
else
{
ASSERT(targetUniform->vs.float4Index >= 0);
- mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, (const float *)vector, targetUniform->vs.registerCount);
+ device->SetVertexShaderConstantF(targetUniform->vs.float4Index, (const float *)vector, targetUniform->vs.registerCount);
}
}
return true;
}
-bool ProgramBinary::applyUniform2iv(Uniform *targetUniform, GLsizei count, const GLint *v)
+bool ProgramBinary::applyUniform2iv(IDirect3DDevice9 *device, Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
@@ -2336,12 +2340,12 @@
v += 2;
}
- applyUniformniv(targetUniform, count, vector);
+ applyUniformniv(device, targetUniform, count, vector);
return true;
}
-bool ProgramBinary::applyUniform3iv(Uniform *targetUniform, GLsizei count, const GLint *v)
+bool ProgramBinary::applyUniform3iv(IDirect3DDevice9 *device, Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
@@ -2353,12 +2357,12 @@
v += 3;
}
- applyUniformniv(targetUniform, count, vector);
+ applyUniformniv(device, targetUniform, count, vector);
return true;
}
-bool ProgramBinary::applyUniform4iv(Uniform *targetUniform, GLsizei count, const GLint *v)
+bool ProgramBinary::applyUniform4iv(IDirect3DDevice9 *device, Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
@@ -2370,25 +2374,26 @@
v += 4;
}
- applyUniformniv(targetUniform, count, vector);
+ applyUniformniv(device, targetUniform, count, vector);
return true;
}
-void ProgramBinary::applyUniformniv(Uniform *targetUniform, GLsizei count, const Vector4 *vector)
+void ProgramBinary::applyUniformniv(IDirect3DDevice9 *device, Uniform *targetUniform, GLsizei count, const Vector4 *vector)
{
if (targetUniform->ps.registerCount)
{
ASSERT(targetUniform->ps.float4Index >= 0);
- mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, (const float *)vector, targetUniform->ps.registerCount);
+ device->SetPixelShaderConstantF(targetUniform->ps.float4Index, (const float *)vector, targetUniform->ps.registerCount);
}
if (targetUniform->vs.registerCount)
{
ASSERT(targetUniform->vs.float4Index >= 0);
- mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, (const float *)vector, targetUniform->vs.registerCount);
+ device->SetVertexShaderConstantF(targetUniform->vs.float4Index, (const float *)vector, targetUniform->vs.registerCount);
}
}
+// D3D9_REPLACE end
bool ProgramBinary::isValidated() const
{