From: Joshua Ashton Subject: Re: [PATCH vkd3d 5/9] vkd3d-shader: Translate global float64 flags. Message-Id: <8a3cd295-388b-dfc7-8057-b31665defca8@froggi.es> Date: Wed, 16 Jun 2021 08:21:26 +0100 In-Reply-To: References: <20210614032643.14994-1-cmccarthy@codeweavers.com> <20210614032643.14994-5-cmccarthy@codeweavers.com> On 6/15/21 10:53 PM, Henri Verbeet wrote: > On Mon, 14 Jun 2021 at 05:27, Conor McCarthy 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(). Despite this patch having my name on it, it was not submitted by me and has been changed from what I wrote without telling me. This defect does not exist in the version I made for use in vkd3d-proton. - Joshie 🐸✨ > >> 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. >