Travis Athougies : d3dx9_36: Implemented support for samplers in ID3DXConstantTable.

Alexandre Julliard julliard at winehq.org
Thu Jun 23 04:10:07 CDT 2011


Module: wine
Branch: master
Commit: a76ac0a894f2d046ba7f69795fc421a8ec061e65
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a76ac0a894f2d046ba7f69795fc421a8ec061e65

Author: Travis Athougies <iammisc at gmail.com>
Date:   Wed Jun 22 13:10:51 2011 -0700

d3dx9_36: Implemented support for samplers in ID3DXConstantTable.

---

 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 */




More information about the wine-cvs mailing list