[PATCH 3/6] d3d10/effect: Use same field to return ExplicitBindPoint for all variable types.

Nikolay Sivov nsivov at codeweavers.com
Fri Sep 10 15:22:57 CDT 2021



On 9/10/21 11:13 PM, Matteo Bruni wrote:
> On Thu, Sep 9, 2021 at 7:58 AM Nikolay Sivov <nsivov at codeweavers.com> wrote:
>> Signed-off-by: Nikolay Sivov <nsivov at 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.



More information about the wine-devel mailing list