[PATCH 2/5] d3dx9_36: Implemented ID3DXConstantTable_SetIntArray and ID3DXConstantTable_SetInt (Try 5)

Travis Athougies iammisc at gmail.com
Sun Mar 27 15:22:10 CDT 2011


---
 dlls/d3dx9_36/shader.c |   37 ++++++++++++++++++++++++++++++-------
 1 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c
index 4a3caab..874d916 100644
--- a/dlls/d3dx9_36/shader.c
+++ b/dlls/d3dx9_36/shader.c
@@ -847,11 +847,7 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetBoolArray(ID3DXConstantTable* if
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetInt(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device, D3DXHANDLE constant, INT n)
 {
-    ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface);
-
-    FIXME("(%p)->(%p, %p, %d): stub\n", This, device, constant, n);
-
-    return E_NOTIMPL;
+    return ID3DXConstantTable_SetIntArray(iface, device, constant, &n, 1);
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
@@ -859,9 +855,36 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(ID3DXConstantTable* ifa
 {
     ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface);
 
-    FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, n, count);
+    D3DXCONSTANT_DESC desc;
+    HRESULT hr;
+    UINT i, desc_count = 1;
+    float row[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+
+    hr = ID3DXConstantTable_GetConstantDesc(iface, constant, &desc, &desc_count);
+    if (FAILED(hr))
+    {
+        TRACE("ID3DXConstantTable_GetConstantDesc failed: %08x", hr);
+        return D3DERR_INVALIDCALL;
+    }
 
-    return E_NOTIMPL;
+    switch (desc.RegisterSet)
+    {
+    case D3DXRS_FLOAT4:
+        for (i = 0; i < count && i < desc.RegisterCount; i++)
+        {
+            row[0] = n[i];
+            if (is_vertex_shader(This->desc.Version))
+                IDirect3DDevice9_SetVertexShaderConstantF(device, desc.RegisterIndex + i, row, 1);
+            else
+                IDirect3DDevice9_SetPixelShaderConstantF(device, desc.RegisterIndex + i, row, 1);
+        }
+        break;
+    default:
+        FIXME("Can't handle RegisterSets other than D3DXRS_FlOAT4\n");
+        return E_NOTIMPL;
+    }
+
+    return D3D_OK;
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetFloat(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
-- 
1.7.0.4




More information about the wine-patches mailing list