[PATCH vkd3d v2 7/7] vkd3d-shader: Decorate SPIR-V for nonuniform access where flagged in dxbc.

Henri Verbeet hverbeet at gmail.com
Thu Aug 19 10:02:10 CDT 2021


On Mon, 16 Aug 2021 at 06:16, Conor McCarthy <cmccarthy at codeweavers.com> wrote:
> @@ -1169,7 +1170,7 @@ static bool shader_sm4_read_param(struct vkd3d_sm4_data *priv, const DWORD **ptr
>                  WARN("Ignoring minimum precision %#x.\n", min_precis);
>
>              if (non_uniform)
> -                FIXME("Ignoring extended modifier NON_UNIFORM.\n");
> +                param->modifier = VKD3DSPRM_NONUNIFORM;
>          }

Should there be trace.c changes to go along with this?

> @@ -3242,6 +3252,9 @@ static uint32_t vkd3d_dxbc_compiler_get_descriptor_index(struct vkd3d_dxbc_compi
>
>      index.offset -= binding_base_idx;
>      index_id = vkd3d_dxbc_compiler_emit_register_addressing(compiler, &index);
> +    /* AMD drivers rely on the index being marked as nonuniform */
> +    if (reg->modifier == VKD3DSPRM_NONUNIFORM)
> +        vkd3d_dxbc_compiler_decorate_nonuniform(compiler, index_id);
>
Is that radv, amdvlk, or radeonsi? Any particular version?

> +enum vkd3d_shader_register_modifier
> +{
> +    VKD3DSPRM_NONE = 0,
> +    VKD3DSPRM_NONUNIFORM = 1,
> +};
> +
>  enum vkd3d_shader_src_modifier
>  {
>      VKD3DSPSM_NONE = 0,
> @@ -612,6 +618,7 @@ struct vkd3d_shader_register_index
>  struct vkd3d_shader_register
>  {
>      enum vkd3d_shader_register_type type;
> +    enum vkd3d_shader_register_modifier modifier;
>      enum vkd3d_data_type data_type;
>      struct vkd3d_shader_register_index idx[3];
>      enum vkd3d_immconst_type immconst_type;

It seems tempting to simply add a "bool non_uniform;" field.



More information about the wine-devel mailing list