Avoid repeated getDevice() calls when applying uniforms.

TRAC #18399 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@806 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent c941e25b
#define MAJOR_VERSION 0 #define MAJOR_VERSION 0
#define MINOR_VERSION 0 #define MINOR_VERSION 0
#define BUILD_VERSION 0 #define BUILD_VERSION 0
#define BUILD_REVISION 805 #define BUILD_REVISION 806
#define STRINGIFY(x) #x #define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x) #define MACRO_STRINGIFY(x) STRINGIFY(x)
......
...@@ -59,6 +59,7 @@ UniformLocation::UniformLocation(const std::string &_name, unsigned int element, ...@@ -59,6 +59,7 @@ UniformLocation::UniformLocation(const std::string &_name, unsigned int element,
Program::Program(ResourceManager *manager, GLuint handle) : mResourceManager(manager), mHandle(handle), mSerial(issueSerial()) Program::Program(ResourceManager *manager, GLuint handle) : mResourceManager(manager), mHandle(handle), mSerial(issueSerial())
{ {
mDevice = getDevice();
mFragmentShader = NULL; mFragmentShader = NULL;
mVertexShader = NULL; mVertexShader = NULL;
...@@ -1675,9 +1676,8 @@ void Program::link() ...@@ -1675,9 +1676,8 @@ void Program::link()
if (vertexBinary && pixelBinary) if (vertexBinary && pixelBinary)
{ {
IDirect3DDevice9 *device = getDevice(); HRESULT vertexResult = mDevice->CreateVertexShader((DWORD*)vertexBinary->GetBufferPointer(), &mVertexExecutable);
HRESULT vertexResult = device->CreateVertexShader((DWORD*)vertexBinary->GetBufferPointer(), &mVertexExecutable); HRESULT pixelResult = mDevice->CreatePixelShader((DWORD*)pixelBinary->GetBufferPointer(), &mPixelExecutable);
HRESULT pixelResult = device->CreatePixelShader((DWORD*)pixelBinary->GetBufferPointer(), &mPixelExecutable);
if (vertexResult == D3DERR_OUTOFVIDEOMEMORY || vertexResult == E_OUTOFMEMORY || pixelResult == D3DERR_OUTOFVIDEOMEMORY || pixelResult == E_OUTOFMEMORY) if (vertexResult == D3DERR_OUTOFVIDEOMEMORY || vertexResult == E_OUTOFMEMORY || pixelResult == D3DERR_OUTOFVIDEOMEMORY || pixelResult == E_OUTOFMEMORY)
{ {
...@@ -2051,8 +2051,6 @@ std::string Program::undecorateUniform(const std::string &_name) ...@@ -2051,8 +2051,6 @@ std::string Program::undecorateUniform(const std::string &_name)
void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, const GLboolean *v) void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, const GLboolean *v)
{ {
IDirect3DDevice9 *device = getDevice();
float *vector = NULL; float *vector = NULL;
BOOL *boolVector = NULL; BOOL *boolVector = NULL;
...@@ -2091,11 +2089,11 @@ void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, ...@@ -2091,11 +2089,11 @@ void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width,
{ {
if (targetUniform->ps.registerSet == D3DXRS_FLOAT4) if (targetUniform->ps.registerSet == D3DXRS_FLOAT4)
{ {
device->SetPixelShaderConstantF(targetUniform->ps.registerIndex, vector, targetUniform->ps.registerCount); mDevice->SetPixelShaderConstantF(targetUniform->ps.registerIndex, vector, targetUniform->ps.registerCount);
} }
else if (targetUniform->ps.registerSet == D3DXRS_BOOL) else if (targetUniform->ps.registerSet == D3DXRS_BOOL)
{ {
device->SetPixelShaderConstantB(targetUniform->ps.registerIndex, boolVector, targetUniform->ps.registerCount); mDevice->SetPixelShaderConstantB(targetUniform->ps.registerIndex, boolVector, targetUniform->ps.registerCount);
} }
else UNREACHABLE(); else UNREACHABLE();
} }
...@@ -2104,11 +2102,11 @@ void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, ...@@ -2104,11 +2102,11 @@ void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width,
{ {
if (targetUniform->vs.registerSet == D3DXRS_FLOAT4) if (targetUniform->vs.registerSet == D3DXRS_FLOAT4)
{ {
device->SetVertexShaderConstantF(targetUniform->vs.registerIndex, vector, targetUniform->vs.registerCount); mDevice->SetVertexShaderConstantF(targetUniform->vs.registerIndex, vector, targetUniform->vs.registerCount);
} }
else if (targetUniform->vs.registerSet == D3DXRS_BOOL) else if (targetUniform->vs.registerSet == D3DXRS_BOOL)
{ {
device->SetVertexShaderConstantB(targetUniform->vs.registerIndex, boolVector, targetUniform->vs.registerCount); mDevice->SetVertexShaderConstantB(targetUniform->vs.registerIndex, boolVector, targetUniform->vs.registerCount);
} }
else UNREACHABLE(); else UNREACHABLE();
} }
...@@ -2119,16 +2117,14 @@ void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, ...@@ -2119,16 +2117,14 @@ void Program::applyUniformnbv(Uniform *targetUniform, GLsizei count, int width,
bool Program::applyUniformnfv(Uniform *targetUniform, const GLfloat *v) bool Program::applyUniformnfv(Uniform *targetUniform, const GLfloat *v)
{ {
IDirect3DDevice9 *device = getDevice();
if (targetUniform->ps.registerCount) if (targetUniform->ps.registerCount)
{ {
device->SetPixelShaderConstantF(targetUniform->ps.registerIndex, v, targetUniform->ps.registerCount); mDevice->SetPixelShaderConstantF(targetUniform->ps.registerIndex, v, targetUniform->ps.registerCount);
} }
if (targetUniform->vs.registerCount) if (targetUniform->vs.registerCount)
{ {
device->SetVertexShaderConstantF(targetUniform->vs.registerIndex, v, targetUniform->vs.registerCount); mDevice->SetVertexShaderConstantF(targetUniform->vs.registerIndex, v, targetUniform->vs.registerCount);
} }
return true; return true;
...@@ -2143,8 +2139,6 @@ bool Program::applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint ...@@ -2143,8 +2139,6 @@ bool Program::applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint
vector[i] = D3DXVECTOR4((float)v[i], 0, 0, 0); vector[i] = D3DXVECTOR4((float)v[i], 0, 0, 0);
} }
IDirect3DDevice9 *device = getDevice();
if (targetUniform->ps.registerCount) if (targetUniform->ps.registerCount)
{ {
if (targetUniform->ps.registerSet == D3DXRS_SAMPLER) if (targetUniform->ps.registerSet == D3DXRS_SAMPLER)
...@@ -2165,7 +2159,7 @@ bool Program::applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint ...@@ -2165,7 +2159,7 @@ bool Program::applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint
else else
{ {
ASSERT(targetUniform->ps.registerSet == D3DXRS_FLOAT4); ASSERT(targetUniform->ps.registerSet == D3DXRS_FLOAT4);
device->SetPixelShaderConstantF(targetUniform->ps.registerIndex, (const float*)vector, targetUniform->ps.registerCount); mDevice->SetPixelShaderConstantF(targetUniform->ps.registerIndex, (const float*)vector, targetUniform->ps.registerCount);
} }
} }
...@@ -2189,7 +2183,7 @@ bool Program::applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint ...@@ -2189,7 +2183,7 @@ bool Program::applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint
else else
{ {
ASSERT(targetUniform->vs.registerSet == D3DXRS_FLOAT4); ASSERT(targetUniform->vs.registerSet == D3DXRS_FLOAT4);
device->SetVertexShaderConstantF(targetUniform->vs.registerIndex, (const float *)vector, targetUniform->vs.registerCount); mDevice->SetVertexShaderConstantF(targetUniform->vs.registerIndex, (const float *)vector, targetUniform->vs.registerCount);
} }
} }
...@@ -2254,18 +2248,16 @@ bool Program::applyUniform4iv(Uniform *targetUniform, GLsizei count, const GLint ...@@ -2254,18 +2248,16 @@ bool Program::applyUniform4iv(Uniform *targetUniform, GLsizei count, const GLint
void Program::applyUniformniv(Uniform *targetUniform, GLsizei count, const D3DXVECTOR4 *vector) void Program::applyUniformniv(Uniform *targetUniform, GLsizei count, const D3DXVECTOR4 *vector)
{ {
IDirect3DDevice9 *device = getDevice();
if (targetUniform->ps.registerCount) if (targetUniform->ps.registerCount)
{ {
ASSERT(targetUniform->ps.registerSet == D3DXRS_FLOAT4); ASSERT(targetUniform->ps.registerSet == D3DXRS_FLOAT4);
device->SetPixelShaderConstantF(targetUniform->ps.registerIndex, (const float *)vector, targetUniform->ps.registerCount); mDevice->SetPixelShaderConstantF(targetUniform->ps.registerIndex, (const float *)vector, targetUniform->ps.registerCount);
} }
if (targetUniform->vs.registerCount) if (targetUniform->vs.registerCount)
{ {
ASSERT(targetUniform->vs.registerSet == D3DXRS_FLOAT4); ASSERT(targetUniform->vs.registerSet == D3DXRS_FLOAT4);
device->SetVertexShaderConstantF(targetUniform->vs.registerIndex, (const float *)vector, targetUniform->vs.registerCount); mDevice->SetVertexShaderConstantF(targetUniform->vs.registerIndex, (const float *)vector, targetUniform->vs.registerCount);
} }
} }
......
...@@ -172,6 +172,7 @@ class Program ...@@ -172,6 +172,7 @@ class Program
static unsigned int issueSerial(); static unsigned int issueSerial();
IDirect3DDevice9 *mDevice;
FragmentShader *mFragmentShader; FragmentShader *mFragmentShader;
VertexShader *mVertexShader; VertexShader *mVertexShader;
......
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