=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9: Implement ID3DXConstantTable:: SetBool.

Alexandre Julliard julliard at winehq.org
Thu Aug 16 15:26:14 CDT 2012


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

Author: Józef Kucia <joseph.kucia at gmail.com>
Date:   Thu Aug 16 17:21:17 2012 +0200

d3dx9: Implement ID3DXConstantTable::SetBool.

---

 dlls/d3dx9_36/shader.c |   21 ++++++++++++---------
 1 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c
index 728bff2..350b83a 100644
--- a/dlls/d3dx9_36/shader.c
+++ b/dlls/d3dx9_36/shader.c
@@ -857,7 +857,7 @@ static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantElement(ID3DXConstant
     return NULL;
 }
 
-static HRESULT set_float_array(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device, D3DXHANDLE constant, const void *data,
+static HRESULT set_scalar_array(ID3DXConstantTable *iface, IDirect3DDevice9 *device, D3DXHANDLE constant, const void *data,
                                UINT count, D3DXPARAMETER_TYPE type)
 {
     struct ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface);
@@ -876,7 +876,7 @@ static HRESULT set_float_array(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 devi
     switch (desc.RegisterSet)
     {
         case D3DXRS_FLOAT4:
-            for (i = 0; i < count && i < desc.RegisterCount; i++)
+            for (i = 0; i < min(count, desc.RegisterCount); i++)
             {
                 /* We need the for loop since each IDirect3DDevice9_Set*ShaderConstantF expects a float4 */
                 switch(type)
@@ -887,8 +887,11 @@ static HRESULT set_float_array(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 devi
                     case D3DXPT_INT:
                         row[0] = (float)((int *)data)[i];
                         break;
+                    case D3DXPT_BOOL:
+                        row[0] = ((BOOL *)data)[i] ? 1.0f : 0.0f;
+                        break;
                     default:
-                        FIXME("Unhandled type passed to set_float_array\n");
+                        FIXME("Unhandled type %#x\n", type);
                         return D3DERR_INVALIDCALL;
                 }
                 set_float_shader_constant(This, device, desc.RegisterIndex + i, row, 1);
@@ -940,9 +943,9 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetBool(ID3DXConstantTable *iface,
 {
     struct ID3DXConstantTableImpl *This = impl_from_ID3DXConstantTable(iface);
 
-    FIXME("(%p)->(%p, %p, %d): stub\n", This, device, constant, b);
+    TRACE("(%p)->(%p, %p, %d)\n", This, device, constant, b);
 
-    return E_NOTIMPL;
+    return set_scalar_array(iface, device, constant, &b, 1, D3DXPT_BOOL);
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetBoolArray(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device,
@@ -961,7 +964,7 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetInt(ID3DXConstantTable *iface, L
 
     TRACE("(%p)->(%p, %p, %d)\n", This, device, constant, n);
 
-    return ID3DXConstantTable_SetIntArray(iface, device, constant, &n, 1);
+    return set_scalar_array(iface, device, constant, &n, 1, D3DXPT_INT);
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device,
@@ -971,7 +974,7 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(ID3DXConstantTable *ifa
 
     TRACE("(%p)->(%p, %p, %p, %d)\n", This, device, constant, n, count);
 
-    return set_float_array(iface, device, constant, n, count, D3DXPT_INT);
+    return set_scalar_array(iface, device, constant, n, count, D3DXPT_INT);
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetFloat(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device,
@@ -981,7 +984,7 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetFloat(ID3DXConstantTable *iface,
 
     TRACE("(%p)->(%p, %p, %f)\n", This, device, constant, f);
 
-    return ID3DXConstantTable_SetFloatArray(iface, device, constant, &f, 1);
+    return set_scalar_array(iface, device, constant, &f, 1, D3DXPT_FLOAT);
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetFloatArray(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device,
@@ -991,7 +994,7 @@ static HRESULT WINAPI ID3DXConstantTableImpl_SetFloatArray(ID3DXConstantTable *i
 
     TRACE("(%p)->(%p, %p, %p, %d)\n", This, device, constant, f, count);
 
-    return set_float_array(iface, device, constant, f, count, D3DXPT_FLOAT);
+    return set_scalar_array(iface, device, constant, f, count, D3DXPT_FLOAT);
 }
 
 static HRESULT WINAPI ID3DXConstantTableImpl_SetVector(ID3DXConstantTable *iface, LPDIRECT3DDEVICE9 device,




More information about the wine-cvs mailing list