[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    Re: [PATCH 3/6] d3d10/effect: Fix samplers array binding.
From:       Matteo Bruni <matteo.mystral () gmail ! com>
Date:       2021-09-30 19:04:19
Message-ID: CABvNrtPkxZ2fW9P_tVHO5M8h0WyFrxeg-qMSS7NL6ogR+iaM5g () mail ! gmail ! com
[Download RAW message or body]

On Tue, Sep 28, 2021 at 2:23 PM Nikolay Sivov <nsivov@codeweavers.com> wrote:
> 
> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
> ---
> dlls/d3d10/effect.c       | 50 ++++++++++++++++++-------------
> dlls/d3d10/tests/effect.c | 62 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 92 insertions(+), 20 deletions(-)
> 
> diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
> index 70a99601eea..910b05990c1 100644
> --- a/dlls/d3d10/effect.c
> +++ b/dlls/d3d10/effect.c
> @@ -3973,6 +3973,29 @@ static void update_buffer(ID3D10Device *device, struct \
> d3d10_effect_variable *v) b->changed = FALSE;
> }
> 
> +static void set_sampler(ID3D10Device *device, D3D10_SHADER_VARIABLE_TYPE \
> shader_type, +        struct d3d10_effect_variable *v, unsigned int bind_point)
> +{
> +    switch (shader_type)
> +    {
> +        case D3D10_SVT_VERTEXSHADER:
> +            ID3D10Device_VSSetSamplers(device, bind_point, 1, \
> &v->u.state.object.sampler); +            break;
> +
> +        case D3D10_SVT_PIXELSHADER:
> +            ID3D10Device_PSSetSamplers(device, bind_point, 1, \
> &v->u.state.object.sampler); +            break;
> +
> +        case D3D10_SVT_GEOMETRYSHADER:
> +            ID3D10Device_GSSetSamplers(device, bind_point, 1, \
> &v->u.state.object.sampler); +            break;
> +
> +        default:
> +            WARN("Incorrect shader type to bind sampler.\n");
> +            break;
> +    }
> +}
> +
> static void apply_shader_resources(ID3D10Device *device, struct \
> ID3D10EffectShaderVariable *variable) {
> struct d3d10_effect_variable *v = impl_from_ID3D10EffectShaderVariable(variable);
> @@ -3980,7 +4003,7 @@ static void apply_shader_resources(ID3D10Device *device, \
> struct ID3D10EffectShad struct d3d10_effect_shader_resource *sr;
> struct d3d10_effect_variable *rsrc_v;
> ID3D10ShaderResourceView **srv;
> -    unsigned int i;
> +    unsigned int i, j;
> 
> for (i = 0; i < sv->resource_count; ++i)
> {
> @@ -4045,27 +4068,14 @@ static void apply_shader_resources(ID3D10Device *device, \
> struct ID3D10EffectShad break;
> 
> case D3D10_SIT_SAMPLER:
> -                switch (v->type->basetype)
> +                if (!rsrc_v->type->element_count)
> {
> -                    case D3D10_SVT_VERTEXSHADER:
> -                        ID3D10Device_VSSetSamplers(device, sr->bind_point, \
>                 sr->bind_count,
> -                                &rsrc_v->u.state.object.sampler);
> -                        break;
> -
> -                    case D3D10_SVT_PIXELSHADER:
> -                        ID3D10Device_PSSetSamplers(device, sr->bind_point, \
>                 sr->bind_count,
> -                                &rsrc_v->u.state.object.sampler);
> -                        break;
> -
> -                    case D3D10_SVT_GEOMETRYSHADER:
> -                        ID3D10Device_GSSetSamplers(device, sr->bind_point, \
>                 sr->bind_count,
> -                                &rsrc_v->u.state.object.sampler);
> -                        break;
> -
> -                    default:
> -                        WARN("Incorrect shader type to bind sampler.\n");
> -                        break;
> +                    set_sampler(device, v->type->basetype, rsrc_v, \
> sr->bind_point); +                    break;
> }
> +
> +                for (j = 0; j < sr->bind_count; ++j)
> +                    set_sampler(device, v->type->basetype, &rsrc_v->elements[i], \
> sr->bind_point + i);

I think you wanted to use j rather than i in this set_sampler() call.

Which tells me we want to improve the test so that only the correct
version succeeds, probably by checking the results of PSGetSamplers()
and setting a non-0 explicit bind point.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic