From: Connor McAdams cmcadams@codeweavers.com
Signed-off-by: Connor McAdams cmcadams@codeweavers.com --- dlls/d3dx9_36/effect.c | 17 ++++++++++++----- dlls/d3dx9_36/tests/effect.c | 3 +-- 2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index 75ce872e2c4..d5442777afd 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -2453,6 +2453,7 @@ static HRESULT WINAPI d3dx_effect_GetValue(ID3DXEffect *iface, D3DXHANDLE parame { struct d3dx_effect *effect = impl_from_ID3DXEffect(iface); struct d3dx_parameter *param = get_valid_parameter(effect, parameter); + unsigned int i;
TRACE("iface %p, parameter %p, data %p, bytes %u.\n", iface, parameter, data, bytes);
@@ -2474,12 +2475,22 @@ static HRESULT WINAPI d3dx_effect_GetValue(ID3DXEffect *iface, D3DXHANDLE parame switch (param->type) { case D3DXPT_VOID: - case D3DXPT_BOOL: case D3DXPT_INT: case D3DXPT_FLOAT: case D3DXPT_STRING: break;
+ case D3DXPT_BOOL: + { + BOOL *src = (BOOL *)param->data; + BOOL *dst = (BOOL *)data; + + for (i = 0; i < (param->bytes / sizeof(*src)); ++i) + dst[i] = !!src[i]; + + return D3D_OK; + } + case D3DXPT_VERTEXSHADER: case D3DXPT_PIXELSHADER: case D3DXPT_TEXTURE: @@ -2487,9 +2498,6 @@ static HRESULT WINAPI d3dx_effect_GetValue(ID3DXEffect *iface, D3DXHANDLE parame case D3DXPT_TEXTURE2D: case D3DXPT_TEXTURE3D: case D3DXPT_TEXTURECUBE: - { - unsigned int i; - for (i = 0; i < (param->element_count ? param->element_count : 1); ++i) { IUnknown *unk = ((IUnknown **)param->data)[i]; @@ -2497,7 +2505,6 @@ static HRESULT WINAPI d3dx_effect_GetValue(ID3DXEffect *iface, D3DXHANDLE parame IUnknown_AddRef(unk); } break; - }
default: FIXME("Unhandled type %s.\n", debug_d3dxparameter_type(param->type)); diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c index 939dbc5a1be..028b112cb0b 100644 --- a/dlls/d3dx9_36/tests/effect.c +++ b/dlls/d3dx9_36/tests/effect.c @@ -9136,8 +9136,7 @@ static void test_effect_set_raw_value(IDirect3DDevice9 *device) unexpected_values++; }
- todo_wine_if(param_desc.Type == D3DXPT_BOOL) ok(!unexpected_values, - "Got %u unexpected values.\n", unexpected_values); + ok(!unexpected_values, "Got %u unexpected values.\n", unexpected_values); } winetest_pop_context(); }