[PATCH vkd3d 5/9] vkd3d-shader: Translate global float64 flags.

Henri Verbeet hverbeet at gmail.com
Tue Jun 15 16:53:48 CDT 2021


On Mon, 14 Jun 2021 at 05:27, Conor McCarthy <cmccarthy at codeweavers.com> wrote:
> diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
> index d5152a38..c2826445 100644
> --- a/libs/vkd3d-shader/spirv.c
> +++ b/libs/vkd3d-shader/spirv.c
> @@ -335,6 +335,7 @@ struct vkd3d_spirv_builder
>      uint64_t capability_mask;
>      uint64_t capability_draw_parameters : 1;
>      uint64_t capability_demote_to_helper_invocation : 1;
> +    uint64_t capability_float_64 : 1;
>      uint32_t ext_instr_set_glsl_450;
>      uint32_t invocation_count;
>      SpvExecutionModel execution_model;
> @@ -385,6 +386,10 @@ static void vkd3d_spirv_enable_capability(struct vkd3d_spirv_builder *builder,
>      {
>          builder->capability_demote_to_helper_invocation = 1;
>      }
> +    else if (cap == SpvCapabilityFloat64)
> +    {
> +        builder->capability_float_64 = 1;
> +    }

This is dead code; SpvCapabilityFloat64 is one of the capabilities <
64, so we'll use the "capability_mask" field, and never set
"capability_float_64". If it did get set, we'd need a corresponding
vkd3d_spirv_build_op_capability() call in
vkd3d_spirv_compile_module().

> diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
> index 859c428c..dd12b896 100644
> --- a/libs/vkd3d-shader/trace.c
> +++ b/libs/vkd3d-shader/trace.c
> @@ -368,6 +368,8 @@ static void shader_dump_global_flags(struct vkd3d_d3d_asm_compiler *compiler, ui
>          {VKD3DSGF_ENABLE_RAW_AND_STRUCTURED_BUFFERS, "enableRawAndStructuredBuffers"},
>          {VKD3DSGF_ENABLE_MINIMUM_PRECISION,          "enableMinimumPrecision"},
>          {VKD3DSGF_SKIP_OPTIMIZATION,                 "skipOptimization"},
> +        {VKD3DSGF_ENABLE_DOUBLE_PRECISION_FLOAT_OPS, "enableDoublePrecisionFloatOps"},
> +        {VKD3DSGF_ENABLE_11_1_DOUBLE_EXTENSIONS,     "enable11_1DoubleExtensions"},
>      };
>
>      for (i = 0; i < ARRAY_SIZE(global_flag_info); ++i)
> diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
> index f56ca183..f7a3c60e 100644
> --- a/libs/vkd3d-shader/vkd3d_shader_private.h
> +++ b/libs/vkd3d-shader/vkd3d_shader_private.h
> @@ -485,10 +485,12 @@ enum vkd3d_shader_interpolation_mode
>  enum vkd3d_shader_global_flags
>  {
>      VKD3DSGF_REFACTORING_ALLOWED               = 0x01,
> +    VKD3DSGF_ENABLE_DOUBLE_PRECISION_FLOAT_OPS = 0x02,
>      VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL         = 0x04,
>      VKD3DSGF_ENABLE_RAW_AND_STRUCTURED_BUFFERS = 0x08,
>      VKD3DSGF_SKIP_OPTIMIZATION                 = 0x10,
> -    VKD3DSGF_ENABLE_MINIMUM_PRECISION          = 0x20
> +    VKD3DSGF_ENABLE_MINIMUM_PRECISION          = 0x20,
> +    VKD3DSGF_ENABLE_11_1_DOUBLE_EXTENSIONS     = 0x40,
>  };
>

It ends up being not so bad in this case, but as a matter of
principle, this patch does three separate things:

  - Disassembler support for "enableDoublePrecisionFloatOps".
  - Disassembler support for "enable11_1DoubleExtensions".
  - Enabling SpvCapabilityFloat64 when either of those is set.



More information about the wine-devel mailing list