[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