On 9/10/21 11:13 PM, Matteo Bruni wrote:
On Thu, Sep 9, 2021 at 7:58 AM Nikolay Sivov nsivov@codeweavers.com wrote:
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
dlls/d3d10/effect.c | 23 ++++++++++++----------- dlls/d3d10/tests/effect.c | 36 ++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index f8e7674ae1a..4807136f670 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -2045,6 +2045,9 @@ static HRESULT parse_fx10_numeric_variable(const char *data, size_t data_size, return hr; }
- if (v->flag & D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT)
v->explicit_bind_point = v->buffer_offset;
- return S_OK;
}
@@ -3967,7 +3970,7 @@ static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_variable_GetType static HRESULT STDMETHODCALLTYPE d3d10_effect_variable_GetDesc(ID3D10EffectVariable *iface, D3D10_EFFECT_VARIABLE_DESC *desc) {
- struct d3d10_effect_variable *This = impl_from_ID3D10EffectVariable(iface);
struct d3d10_effect_variable *v = impl_from_ID3D10EffectVariable(iface);
TRACE("iface %p, desc %p\n", iface, desc);
@@ -3985,16 +3988,14 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_variable_GetDesc(ID3D10EffectVaria
/* FIXME: This isn't correct. Anonymous shaders let desc->ExplicitBindPoint untouched, but normal shaders set it! */ memset(desc, 0, sizeof(*desc));
- desc->Name = This->name;
- desc->Semantic = This->semantic;
- desc->Flags = This->flag;
- desc->Annotations = This->annotation_count;
- desc->BufferOffset = This->buffer_offset;
- if (This->flag & D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT)
- {
desc->ExplicitBindPoint = This->buffer_offset;
- }
desc->Name = v->name;
desc->Semantic = v->semantic;
desc->Flags = v->flag;
desc->Annotations = v->annotation_count;
desc->BufferOffset = v->buffer_offset;
if (v->flag & D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT)
desc->ExplicitBindPoint = v->explicit_bind_point;
return S_OK;
}
Incidentally, what is that FIXME at the top of the hunk? Any idea what's trying to say?
No idea. If I had to guess, maybe it means that memset() clears too much, and instead ExplicitBindPoint is not written to, when variable is anonymous shader.
I'll need to test, it's impossible to guess. I'd expect whole thing to be zeroed for anonymous case, except maybe for Name.