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)
stream.write(mDxPointsOrLinesLocation);
UINT pixelShaderSize;
HRESULT result = mPixelExecutable->getPixelShader()->GetFunction(NULL, &pixelShaderSize);
ASSERT(SUCCEEDED(result));
bool result = mPixelExecutable->getPixelFunction(NULL, &pixelShaderSize);
ASSERT(result);
stream.write(pixelShaderSize);
UINT vertexShaderSize;
result = mVertexExecutable->getVertexShader()->GetFunction(NULL, &vertexShaderSize);
ASSERT(SUCCEEDED(result));
result = mVertexExecutable->getVertexFunction(NULL, &vertexShaderSize);
ASSERT(result);
stream.write(vertexShaderSize);
GUID identifier = mRenderer->getAdapterIdentifier();
......@@ -1767,12 +1767,12 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length)
memcpy(ptr, &identifier, sizeof(GUID));
ptr += sizeof(GUID);
result = mPixelExecutable->getPixelShader()->GetFunction(ptr, &pixelShaderSize);
ASSERT(SUCCEEDED(result));
result = mPixelExecutable->getPixelFunction(ptr, &pixelShaderSize);
ASSERT(result);
ptr += pixelShaderSize;
result = mVertexExecutable->getVertexShader()->GetFunction(ptr, &vertexShaderSize);
ASSERT(SUCCEEDED(result));
result = mVertexExecutable->getVertexFunction(ptr, &vertexShaderSize);
ASSERT(result);
ptr += vertexShaderSize;
ASSERT(ptr - totalLength == binary);
......
......@@ -21,6 +21,9 @@ class ShaderExecutable
ShaderExecutable() {};
virtual ~ShaderExecutable() {};
virtual bool getVertexFunction(void *pData, UINT *pSizeOfData) = 0;
virtual bool getPixelFunction(void *pData, UINT *pSizeOfData) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(ShaderExecutable);
};
......
......@@ -48,6 +48,26 @@ ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *ex
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()
{
return mVertexExecutable;
......
......@@ -25,6 +25,9 @@ class ShaderExecutable9 : public ShaderExecutable
ShaderExecutable9(IDirect3DVertexShader9 *executable, gl::D3DConstantTable *constantTable);
virtual ~ShaderExecutable9();
virtual bool getVertexFunction(void *pData, UINT *pSizeOfData);
virtual bool getPixelFunction(void *pData, UINT *pSizeOfData);
static ShaderExecutable9 *makeShaderExecutable9(ShaderExecutable *executable);
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