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 ...@@ -18,10 +18,23 @@ namespace D3D9
{ {
Direct3DPixelShader9::Direct3DPixelShader9(Direct3DDevice9 *device, const unsigned long *shaderToken) : device(device), pixelShader(shaderToken) 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() Direct3DPixelShader9::~Direct3DPixelShader9()
{ {
delete[] shaderToken;
shaderToken = 0;
} }
long Direct3DPixelShader9::QueryInterface(const IID &iid, void **object) long Direct3DPixelShader9::QueryInterface(const IID &iid, void **object)
...@@ -86,7 +99,12 @@ namespace D3D9 ...@@ -86,7 +99,12 @@ namespace D3D9
return INVALIDCALL(); return INVALIDCALL();
} }
UNIMPLEMENTED(); if(data)
{
memcpy(data, shaderToken, tokenCount * 4);
}
*size = tokenCount * 4;
return D3D_OK; return D3D_OK;
} }
......
...@@ -45,6 +45,9 @@ namespace D3D9 ...@@ -45,6 +45,9 @@ namespace D3D9
// Creation parameters // Creation parameters
Direct3DDevice9 *const device; Direct3DDevice9 *const device;
unsigned long *shaderToken;
int tokenCount;
sw::PixelShader pixelShader; sw::PixelShader pixelShader;
}; };
} }
......
...@@ -18,10 +18,23 @@ namespace D3D9 ...@@ -18,10 +18,23 @@ namespace D3D9
{ {
Direct3DVertexShader9::Direct3DVertexShader9(Direct3DDevice9 *device, const unsigned long *shaderToken) : device(device), vertexShader(shaderToken) 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() Direct3DVertexShader9::~Direct3DVertexShader9()
{ {
delete[] shaderToken;
shaderToken = 0;
} }
long Direct3DVertexShader9::QueryInterface(const IID &iid, void **object) long Direct3DVertexShader9::QueryInterface(const IID &iid, void **object)
...@@ -86,7 +99,12 @@ namespace D3D9 ...@@ -86,7 +99,12 @@ namespace D3D9
return INVALIDCALL(); return INVALIDCALL();
} }
UNIMPLEMENTED(); if(data)
{
memcpy(data, shaderToken, tokenCount * 4);
}
*size = tokenCount * 4;
return D3D_OK; return D3D_OK;
} }
......
...@@ -45,6 +45,9 @@ namespace D3D9 ...@@ -45,6 +45,9 @@ namespace D3D9
// Creation parameters // Creation parameters
Direct3DDevice9 *const device; Direct3DDevice9 *const device;
unsigned long *shaderToken;
int tokenCount;
sw::VertexShader vertexShader; 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