Henri Verbeet : vkd3d-shader/sm4: Store the message context pointer in the vkd3d_shader_parser structure.

Alexandre Julliard julliard at winehq.org
Tue Oct 5 15:50:42 CDT 2021


Module: vkd3d
Branch: master
Commit: aca39afd7305f47e43a4af3c7f027a24d5c47463
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=aca39afd7305f47e43a4af3c7f027a24d5c47463

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Fri Oct  1 17:51:14 2021 +0200

vkd3d-shader/sm4: Store the message context pointer in the vkd3d_shader_parser structure.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d-shader/dxbc.c                 | 26 +++++++++++++-------------
 libs/vkd3d-shader/vkd3d_shader_main.c    |  7 +++++++
 libs/vkd3d-shader/vkd3d_shader_private.h |  5 +++++
 3 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index b93d618..cc5b1b8 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -97,7 +97,6 @@ struct vkd3d_shader_sm4_parser
     struct list src;
     struct vkd3d_shader_immediate_constant_buffer icb;
 
-    struct vkd3d_shader_message_context *message_context;
     struct vkd3d_shader_parser p;
 };
 
@@ -176,13 +175,13 @@ static bool shader_is_sm_5_1(const struct vkd3d_shader_sm4_parser *sm4)
     return version->major >= 5 && version->minor >= 1;
 }
 
-static void VKD3D_PRINTF_FUNC(3, 4) shader_sm4_error(struct vkd3d_shader_sm4_parser *priv,
+static void VKD3D_PRINTF_FUNC(3, 4) shader_sm4_error(struct vkd3d_shader_sm4_parser *sm4,
         enum vkd3d_shader_error error, const char *format, ...)
 {
     va_list args;
 
     va_start(args, format);
-    vkd3d_shader_verror(priv->message_context, NULL, error, format, args);
+    vkd3d_shader_verror(sm4->p.message_context, NULL, error, format, args);
     va_end(args);
 }
 
@@ -974,6 +973,7 @@ static enum vkd3d_data_type map_data_type(char t)
 static bool shader_sm4_init(struct vkd3d_shader_sm4_parser *sm4, const uint32_t *byte_code, size_t byte_code_size,
         const struct vkd3d_shader_signature *output_signature, struct vkd3d_shader_message_context *message_context)
 {
+    struct vkd3d_shader_version version;
     uint32_t version_token, token_count;
     unsigned int i;
 
@@ -1000,34 +1000,36 @@ static bool shader_sm4_init(struct vkd3d_shader_sm4_parser *sm4, const uint32_t
     switch (version_token >> 16)
     {
         case VKD3D_SM4_PS:
-            sm4->p.shader_version.type = VKD3D_SHADER_TYPE_PIXEL;
+            version.type = VKD3D_SHADER_TYPE_PIXEL;
             break;
 
         case VKD3D_SM4_VS:
-            sm4->p.shader_version.type = VKD3D_SHADER_TYPE_VERTEX;
+            version.type = VKD3D_SHADER_TYPE_VERTEX;
             break;
 
         case VKD3D_SM4_GS:
-            sm4->p.shader_version.type = VKD3D_SHADER_TYPE_GEOMETRY;
+            version.type = VKD3D_SHADER_TYPE_GEOMETRY;
             break;
 
         case VKD3D_SM5_HS:
-            sm4->p.shader_version.type = VKD3D_SHADER_TYPE_HULL;
+            version.type = VKD3D_SHADER_TYPE_HULL;
             break;
 
         case VKD3D_SM5_DS:
-            sm4->p.shader_version.type = VKD3D_SHADER_TYPE_DOMAIN;
+            version.type = VKD3D_SHADER_TYPE_DOMAIN;
             break;
 
         case VKD3D_SM5_CS:
-            sm4->p.shader_version.type = VKD3D_SHADER_TYPE_COMPUTE;
+            version.type = VKD3D_SHADER_TYPE_COMPUTE;
             break;
 
         default:
             FIXME("Unrecognised shader type %#x.\n", version_token >> 16);
     }
-    sm4->p.shader_version.major = VKD3D_SM4_VERSION_MAJOR(version_token);
-    sm4->p.shader_version.minor = VKD3D_SM4_VERSION_MINOR(version_token);
+    version.major = VKD3D_SM4_VERSION_MAJOR(version_token);
+    version.minor = VKD3D_SM4_VERSION_MINOR(version_token);
+
+    vkd3d_shader_parser_init(&sm4->p, message_context, &version);
     sm4->p.ptr = sm4->start;
 
     memset(sm4->output_map, 0xff, sizeof(sm4->output_map));
@@ -1047,8 +1049,6 @@ static bool shader_sm4_init(struct vkd3d_shader_sm4_parser *sm4, const uint32_t
     list_init(&sm4->src_free);
     list_init(&sm4->src);
 
-    sm4->message_context = message_context;
-
     return true;
 }
 
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 8185e12..9f8dd76 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -362,6 +362,13 @@ void vkd3d_shader_dump_shader(enum vkd3d_shader_source_type source_type,
             shader_get_source_type_suffix(source_type), shader->code, shader->size);
 }
 
+void vkd3d_shader_parser_init(struct vkd3d_shader_parser *parser,
+        struct vkd3d_shader_message_context *message_context, const struct vkd3d_shader_version *version)
+{
+    parser->message_context = message_context;
+    parser->shader_version = *version;
+}
+
 static void vkd3d_shader_parser_destroy(struct vkd3d_shader_parser *parser)
 {
     shader_sm4_free(parser);
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 4364ba9..db87c16 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -889,11 +889,16 @@ static inline bool vkd3d_shader_register_is_output(const struct vkd3d_shader_reg
 
 struct vkd3d_shader_parser
 {
+    struct vkd3d_shader_message_context *message_context;
+
     struct vkd3d_shader_desc shader_desc;
     struct vkd3d_shader_version shader_version;
     const uint32_t *ptr;
 };
 
+void vkd3d_shader_parser_init(struct vkd3d_shader_parser *parser,
+        struct vkd3d_shader_message_context *message_context, const struct vkd3d_shader_version *version);
+
 void vkd3d_shader_trace(struct vkd3d_shader_parser *parser);
 
 const char *shader_get_type_prefix(enum vkd3d_shader_type type);




More information about the wine-cvs mailing list