Commit 8d31422d by Nicolas Capens

Reimplement Direct3D GetFunction().

Copied from old Shader::GetFunction(). Bug 22533227 Change-Id: I587a4112bc97f75c010b6f572f8f4388d5af9225 Reviewed-on: https://swiftshader-review.googlesource.com/3734Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 813f97d9
......@@ -18,10 +18,23 @@ namespace D3D9
{
Direct3DPixelShader9::Direct3DPixelShader9(Direct3DDevice9 *device, const unsigned long *shaderToken) : device(device), pixelShader(shaderToken)
{
tokenCount = 0;
while(shaderToken[tokenCount] != 0x0000FFFF)
{
tokenCount += sw::Shader::size(shaderToken[tokenCount], (unsigned short)(shaderToken[0] & 0xFFFF)) + 1;
}
tokenCount += 1;
this->shaderToken = new unsigned long[tokenCount];
memcpy(this->shaderToken, shaderToken, tokenCount * sizeof(unsigned long));
}
Direct3DPixelShader9::~Direct3DPixelShader9()
{
delete[] shaderToken;
shaderToken = 0;
}
long Direct3DPixelShader9::QueryInterface(const IID &iid, void **object)
......@@ -86,7 +99,12 @@ namespace D3D9
return INVALIDCALL();
}
UNIMPLEMENTED();
if(data)
{
memcpy(data, shaderToken, tokenCount * 4);
}
*size = tokenCount * 4;
return D3D_OK;
}
......
......@@ -45,6 +45,9 @@ namespace D3D9
// Creation parameters
Direct3DDevice9 *const device;
unsigned long *shaderToken;
int tokenCount;
sw::PixelShader pixelShader;
};
}
......
......@@ -18,10 +18,23 @@ namespace D3D9
{
Direct3DVertexShader9::Direct3DVertexShader9(Direct3DDevice9 *device, const unsigned long *shaderToken) : device(device), vertexShader(shaderToken)
{
tokenCount = 0;
while(shaderToken[tokenCount] != 0x0000FFFF)
{
tokenCount += sw::Shader::size(shaderToken[tokenCount], (unsigned short)(shaderToken[0] & 0xFFFF)) + 1;
}
tokenCount += 1;
this->shaderToken = new unsigned long[tokenCount];
memcpy(this->shaderToken, shaderToken, tokenCount * sizeof(unsigned long));
}
Direct3DVertexShader9::~Direct3DVertexShader9()
{
delete[] shaderToken;
shaderToken = 0;
}
long Direct3DVertexShader9::QueryInterface(const IID &iid, void **object)
......@@ -86,7 +99,12 @@ namespace D3D9
return INVALIDCALL();
}
UNIMPLEMENTED();
if(data)
{
memcpy(data, shaderToken, tokenCount * 4);
}
*size = tokenCount * 4;
return D3D_OK;
}
......
......@@ -45,6 +45,9 @@ namespace D3D9
// Creation parameters
Direct3DDevice9 *const device;
unsigned long *shaderToken;
int tokenCount;
sw::VertexShader vertexShader;
};
}
......
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