Travis Athougies : d3dx9_36: Implemented ID3DXConstantTable_SetVector and ID3DXConstantTable_SetVectorArray .

Alexandre Julliard julliard at winehq.org
Wed Jun 22 11:48:42 CDT 2011


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

Author: Travis Athougies <iammisc at gmail.com>
Date:   Tue Jun 21 12:14:32 2011 -0700

d3dx9_36: Implemented ID3DXConstantTable_SetVector and ID3DXConstantTable_SetVectorArray.

---

 dlls/d3dx9_36/shader.c |   42 ++++++++++++++++++++++++++++++++++--------
 1 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c
index 8f0c707..6448e65 100644
--- a/dlls/d3dx9_36/shader.c
+++ b/dlls/d3dx9_36/shader.c
@@ -934,24 +934,50 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetFloatArray(ID3DXConstantTable *i
     return set_float_array(iface, device, constant, f, count, D3DXPT_FLOAT);
 }
 
-static HRESULT WINAPI ID3DXConstantTableImpl_SetVector(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
-                                                       D3DXHANDLE constant, CONST D3DXVECTOR4* vector)
+static HRESULT WINAPI ID3DXConstantTableImpl_SetVector(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device,
+                                                       D3DXHANDLE constant, CONST D3DXVECTOR4 *vector)
 {
     ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface);
 
-    FIXME("(%p)->(%p, %p, %p): stub\n", This, device, constant, vector);
+    TRACE("(%p)->(%p, %p, %p)\n", This, device, constant, vector);
 
-    return E_NOTIMPL;
+    return ID3DXConstantTable_SetVectorArray(iface, device, constant, vector, 1);
 }
 
-static HRESULT WINAPI ID3DXConstantTableImpl_SetVectorArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
-                                                            D3DXHANDLE constant, CONST D3DXVECTOR4* vector, UINT count)
+static HRESULT WINAPI ID3DXConstantTableImpl_SetVectorArray(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device,
+                                                            D3DXHANDLE constant, CONST D3DXVECTOR4 *vector, UINT count)
 {
     ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface);
 
-    FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, vector, count);
+    D3DXCONSTANT_DESC desc;
+    HRESULT hr;
+    UINT desc_count = 1;
+
+    TRACE("(%p)->(%p, %p, %p, %d)\n", This, device, constant, vector, count);
 
-    return E_NOTIMPL;
+    hr = ID3DXConstantTable_GetConstantDesc(iface, constant, &desc, &desc_count);
+    if (FAILED(hr))
+    {
+        TRACE("ID3DXConstantTable_GetConstantDesc failed: %08x", hr);
+        return D3DERR_INVALIDCALL;
+    }
+
+    switch (desc.RegisterSet)
+    {
+        case D3DXRS_FLOAT4:
+            if (is_vertex_shader(This->desc.Version))
+                IDirect3DDevice9_SetVertexShaderConstantF(device, desc.RegisterIndex, (float *)vector,
+                        min(desc.RegisterCount, count));
+            else
+                IDirect3DDevice9_SetPixelShaderConstantF(device, desc.RegisterIndex, (float *)vector,
+                        min(desc.RegisterCount, count));
+            break;
+        default:
+            FIXME("Handle other register sets\n");
+            return E_NOTIMPL;
+    }
+
+    return D3D_OK;
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrix(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,




More information about the wine-cvs mailing list