[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