Module: wine Branch: master Commit: 1cfba6cefbef6fe1d2cf1becac8cf183029c14cd URL: http://source.winehq.org/git/wine.git/?a=commit;h=1cfba6cefbef6fe1d2cf1becac...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Jul 18 15:52:32 2012 +0200
d3d10: Add support for parsing sample masks to parse_fx10_object().
---
dlls/d3d10/d3d10_private.h | 2 ++ dlls/d3d10/effect.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h index be1a87d..46af4f4 100644 --- a/dlls/d3d10/d3d10_private.h +++ b/dlls/d3d10/d3d10_private.h @@ -53,6 +53,7 @@ enum d3d10_effect_object_type D3D10_EOT_PIXELSHADER = 0x7, D3D10_EOT_GEOMETRYSHADER = 0x8, D3D10_EOT_BLEND_FACTOR = 0xa, + D3D10_EOT_SAMPLE_MASK = 0xb, };
enum d3d10_effect_object_operation @@ -158,6 +159,7 @@ struct d3d10_effect_pass struct d3d10_effect_object *objects; struct d3d10_effect_variable *annotations;
+ UINT sample_mask; float blend_factor[4]; };
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index 2c22520..fc2be61 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -917,6 +917,20 @@ static BOOL read_float_value(DWORD value, D3D_SHADER_VARIABLE_TYPE in_type, floa } }
+static BOOL read_int32_value(DWORD value, D3D_SHADER_VARIABLE_TYPE in_type, INT *out_data, UINT idx) +{ + switch (in_type) + { + case D3D10_SVT_INT: + out_data[idx] = value; + return TRUE; + + default: + FIXME("Unhandled in_type %#x.\n", in_type); + return FALSE; + } +} + static BOOL read_value_list(const char *ptr, D3D_SHADER_VARIABLE_TYPE out_type, UINT out_size, void *out_data) { @@ -944,6 +958,11 @@ static BOOL read_value_list(const char *ptr, D3D_SHADER_VARIABLE_TYPE out_type, return FALSE; break;
+ case D3D10_SVT_UINT: + if (!read_int32_value(value, in_type, out_data, i)) + return FALSE; + break; + default: FIXME("Unhandled out_type %#x.\n", out_type); return FALSE; @@ -999,6 +1018,16 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr hr = S_OK; break;
+ case D3D10_EOT_SAMPLE_MASK: + if (!read_value_list(data + offset, D3D10_SVT_UINT, 1, &o->pass->sample_mask)) + { + FIXME("Failed to read sample mask.\n"); + return E_FAIL; + } + + hr = S_OK; + break; + case D3D10_EOT_BLEND_FACTOR: if (!read_value_list(data + offset, D3D10_SVT_FLOAT, 4, &o->pass->blend_factor[0])) { @@ -2547,6 +2576,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetDesc(ID3D10EffectPass *ifa } }
+ desc->SampleMask = This->sample_mask; memcpy(desc->BlendFactor, This->blend_factor, 4 * sizeof(float));
return S_OK;