Add a get*Function method to the ShaderExecutable interface

Trac #22155 Signed-off-by: Geoff Lang Signed-off-by: Nicolas Capens This allows ProgramBinary::save to avoid knowing about D3D9 shaders git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1508 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 36038547
...@@ -1732,13 +1732,13 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length) ...@@ -1732,13 +1732,13 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length)
stream.write(mDxPointsOrLinesLocation); stream.write(mDxPointsOrLinesLocation);
UINT pixelShaderSize; UINT pixelShaderSize;
HRESULT result = mPixelExecutable->getPixelShader()->GetFunction(NULL, &pixelShaderSize); bool result = mPixelExecutable->getPixelFunction(NULL, &pixelShaderSize);
ASSERT(SUCCEEDED(result)); ASSERT(result);
stream.write(pixelShaderSize); stream.write(pixelShaderSize);
UINT vertexShaderSize; UINT vertexShaderSize;
result = mVertexExecutable->getVertexShader()->GetFunction(NULL, &vertexShaderSize); result = mVertexExecutable->getVertexFunction(NULL, &vertexShaderSize);
ASSERT(SUCCEEDED(result)); ASSERT(result);
stream.write(vertexShaderSize); stream.write(vertexShaderSize);
GUID identifier = mRenderer->getAdapterIdentifier(); GUID identifier = mRenderer->getAdapterIdentifier();
...@@ -1767,12 +1767,12 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length) ...@@ -1767,12 +1767,12 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length)
memcpy(ptr, &identifier, sizeof(GUID)); memcpy(ptr, &identifier, sizeof(GUID));
ptr += sizeof(GUID); ptr += sizeof(GUID);
result = mPixelExecutable->getPixelShader()->GetFunction(ptr, &pixelShaderSize); result = mPixelExecutable->getPixelFunction(ptr, &pixelShaderSize);
ASSERT(SUCCEEDED(result)); ASSERT(result);
ptr += pixelShaderSize; ptr += pixelShaderSize;
result = mVertexExecutable->getVertexShader()->GetFunction(ptr, &vertexShaderSize); result = mVertexExecutable->getVertexFunction(ptr, &vertexShaderSize);
ASSERT(SUCCEEDED(result)); ASSERT(result);
ptr += vertexShaderSize; ptr += vertexShaderSize;
ASSERT(ptr - totalLength == binary); ASSERT(ptr - totalLength == binary);
......
...@@ -21,6 +21,9 @@ class ShaderExecutable ...@@ -21,6 +21,9 @@ class ShaderExecutable
ShaderExecutable() {}; ShaderExecutable() {};
virtual ~ShaderExecutable() {}; virtual ~ShaderExecutable() {};
virtual bool getVertexFunction(void *pData, UINT *pSizeOfData) = 0;
virtual bool getPixelFunction(void *pData, UINT *pSizeOfData) = 0;
private: private:
DISALLOW_COPY_AND_ASSIGN(ShaderExecutable); DISALLOW_COPY_AND_ASSIGN(ShaderExecutable);
}; };
......
...@@ -48,6 +48,26 @@ ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *ex ...@@ -48,6 +48,26 @@ ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *ex
return static_cast<ShaderExecutable9*>(executable); return static_cast<ShaderExecutable9*>(executable);
} }
bool ShaderExecutable9::getVertexFunction(void *pData, UINT *pSizeOfData)
{
HRESULT hr = D3DERR_INVALIDCALL;
if (mVertexExecutable)
{
hr = mVertexExecutable->GetFunction(pData, pSizeOfData);
}
return SUCCEEDED(hr);
}
bool ShaderExecutable9::getPixelFunction(void *pData, UINT *pSizeOfData)
{
HRESULT hr = D3DERR_INVALIDCALL;
if (mPixelExecutable)
{
hr = mPixelExecutable->GetFunction(pData, pSizeOfData);
}
return SUCCEEDED(hr);
}
IDirect3DVertexShader9 *ShaderExecutable9::getVertexShader() IDirect3DVertexShader9 *ShaderExecutable9::getVertexShader()
{ {
return mVertexExecutable; return mVertexExecutable;
......
...@@ -25,6 +25,9 @@ class ShaderExecutable9 : public ShaderExecutable ...@@ -25,6 +25,9 @@ class ShaderExecutable9 : public ShaderExecutable
ShaderExecutable9(IDirect3DVertexShader9 *executable, gl::D3DConstantTable *constantTable); ShaderExecutable9(IDirect3DVertexShader9 *executable, gl::D3DConstantTable *constantTable);
virtual ~ShaderExecutable9(); virtual ~ShaderExecutable9();
virtual bool getVertexFunction(void *pData, UINT *pSizeOfData);
virtual bool getPixelFunction(void *pData, UINT *pSizeOfData);
static ShaderExecutable9 *makeShaderExecutable9(ShaderExecutable *executable); static ShaderExecutable9 *makeShaderExecutable9(ShaderExecutable *executable);
IDirect3DPixelShader9 *getPixelShader(); IDirect3DPixelShader9 *getPixelShader();
......
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