[PATCH 1/2] d3dx9_36: Implemented support for samplers in ID3DXConstantTable (Try 2)
Travis Athougies
iammisc at gmail.com
Wed Jun 22 15:10:51 CDT 2011
Fixes bug 26079 (http://bugs.winehq.org/show_bug.cgi?id=26079)
Changes from last try:
- Constant table in test now easier to edit
- Added TRACE to GetSamplerIndex
- Coding style now consistent with other constant table patches
- Tests are now more thorough
---
dlls/d3dx9_36/shader.c | 27 +++++++++++++++++++++------
1 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c
index 0e0709d..bddef33 100644
--- a/dlls/d3dx9_36/shader.c
+++ b/dlls/d3dx9_36/shader.c
@@ -748,13 +748,23 @@ static HRESULT WINAPI ID3DXConstantTableImpl_GetConstantDesc(ID3DXConstantTable*
return D3D_OK;
}
-static UINT WINAPI ID3DXConstantTableImpl_GetSamplerIndex(LPD3DXCONSTANTTABLE iface, D3DXHANDLE constant)
+static UINT WINAPI ID3DXConstantTableImpl_GetSamplerIndex(ID3DXConstantTable *iface, D3DXHANDLE constant)
{
ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface);
+ D3DXCONSTANT_DESC desc;
+ UINT count = 1;
+ HRESULT res;
+
+ TRACE("(%p)->(%p)\n", This, constant);
+
+ res = ID3DXConstantTable_GetConstantDesc(iface, constant, &desc, &count);
+ if (FAILED(res))
+ return (UINT)-1;
- FIXME("(%p)->(%p): stub\n", This, constant);
+ if (desc.RegisterSet != D3DXRS_SAMPLER)
+ return (UINT)-1;
- return (UINT)-1;
+ return desc.RegisterIndex;
}
static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstant(ID3DXConstantTable* iface, D3DXHANDLE constant, UINT index)
@@ -1225,10 +1235,15 @@ HRESULT WINAPI D3DXGetShaderConstantTableEx(CONST DWORD* byte_code,
if (hr != D3D_OK)
goto error;
- if (constant_info[i].RegisterSet != D3DXRS_FLOAT4)
- FIXME("Don't know how to calculate Bytes for non D3DXRS_FLOAT4 constants\n");
+ if (constant_info[i].RegisterSet != D3DXRS_FLOAT4 &&
+ constant_info[i].RegisterSet != D3DXRS_SAMPLER)
+ FIXME("Don't know how to calculate Bytes for constants of type %d\n",
+ constant_info[i].RegisterSet);
- /* D3DXRS_FLOAT4 has a base size of 4 (not taking into account dimensions and element count) */
+ /*
+ * D3DXRS_FLOAT4 and D3DXRS_SAMPLER have a base size of 4
+ * (not taking into account dimensions and element count)
+ */
object->constants[i].desc.Bytes = 4;
/* Take into account dimensions and elements */
--
1.6.4.4
More information about the wine-patches
mailing list