[PATCH vkd3d 1/4] vkd3d-shader: Add enum for minimum-precision data types.

Józef Kucia joseph.kucia at gmail.com
Tue May 21 03:57:19 CDT 2019


From: Józef Kucia <jkucia at codeweavers.com>

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 include/vkd3d_shader.h   | 11 ++++++++++-
 libs/vkd3d-shader/dxbc.c |  5 +++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 318a438501c9..e6cccd84cc67 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -571,6 +571,15 @@ enum vkd3d_sysval_semantic
     VKD3D_FORCE_32_BIT_ENUM(VKD3D_SYSVAL_SEMANTIC),
 };
 
+enum vkd3d_shader_minimum_precision
+{
+    VKD3D_SHADER_MINIMUM_PRECISION_NONE      = 0,
+    VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_16  = 1,
+    VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_8_2 = 2,
+    VKD3D_SHADER_MINIMUM_PRECISION_INT_16    = 4,
+    VKD3D_SHADER_MINIMUM_PRECISION_UINT_16   = 5,
+};
+
 struct vkd3d_shader_signature_element
 {
     const char *semantic_name;
@@ -580,7 +589,7 @@ struct vkd3d_shader_signature_element
     enum vkd3d_component_type component_type;
     unsigned int register_index;
     unsigned int mask;
-    unsigned int min_precision;
+    enum vkd3d_shader_minimum_precision min_precision;
 };
 
 struct vkd3d_shader_signature
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 92ea174bb6cf..a9cda49162d8 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -1992,11 +1992,11 @@ static int parse_dxbc(const char *data, size_t data_size,
 static int shader_parse_signature(DWORD tag, const char *data, DWORD data_size,
         struct vkd3d_shader_signature *s)
 {
+    bool has_stream_index, has_min_precision;
     struct vkd3d_shader_signature_element *e;
     const char *ptr = data;
     unsigned int i;
     DWORD count;
-    bool has_stream_index, has_min_precision;
 
     if (!require_space(0, 2, sizeof(DWORD), data_size))
     {
@@ -2032,6 +2032,7 @@ static int shader_parse_signature(DWORD tag, const char *data, DWORD data_size,
             read_dword(&ptr, &e[i].stream_index);
         else
             e[i].stream_index = 0;
+
         read_dword(&ptr, &name_offset);
         if (!(e[i].semantic_name = shader_get_string(data, data_size, name_offset)))
         {
@@ -2048,7 +2049,7 @@ static int shader_parse_signature(DWORD tag, const char *data, DWORD data_size,
         if (has_min_precision)
             read_dword(&ptr, &e[i].min_precision);
         else
-            e[i].min_precision = 0;
+            e[i].min_precision = VKD3D_SHADER_MINIMUM_PRECISION_NONE;
 
         TRACE("Stream: %u, semantic: %s, semantic idx: %u, sysval_semantic %#x, "
                 "type %u, register idx: %u, use_mask %#x, input_mask %#x, precision %u.\n",
-- 
2.21.0




More information about the wine-devel mailing list