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

Conor McCarthy cmccarthy at codeweavers.com
Sun Jun 13 22:26:39 CDT 2021


Based on vkd3d-proton patches.
From: Joshua Ashton <joshua at froggi.es>

Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
 libs/vkd3d-shader/spirv.c                | 11 +++++++++++
 libs/vkd3d-shader/trace.c                |  2 ++
 libs/vkd3d-shader/vkd3d_shader_private.h |  4 +++-
 3 files changed, 16 insertions(+), 1 deletion(-)

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;
+    }
     else
     {
         FIXME("Unhandled capability %#x.\n", cap);
@@ -5187,6 +5192,12 @@ static void vkd3d_dxbc_compiler_emit_dcl_global_flags(struct vkd3d_dxbc_compiler
         flags &= ~VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL;
     }
 
+    if (flags & (VKD3DSGF_ENABLE_DOUBLE_PRECISION_FLOAT_OPS | VKD3DSGF_ENABLE_11_1_DOUBLE_EXTENSIONS))
+    {
+        vkd3d_spirv_enable_capability(&compiler->spirv_builder, SpvCapabilityFloat64);
+        flags &= ~(VKD3DSGF_ENABLE_DOUBLE_PRECISION_FLOAT_OPS | VKD3DSGF_ENABLE_11_1_DOUBLE_EXTENSIONS);
+    }
+
     if (flags & ~(VKD3DSGF_REFACTORING_ALLOWED | VKD3DSGF_ENABLE_RAW_AND_STRUCTURED_BUFFERS))
         FIXME("Unhandled global flags %#x.\n", flags);
     else
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,
 };
 
 enum vkd3d_shader_sync_flags
-- 
2.31.1




More information about the wine-devel mailing list