Zebediah Figura : vkd3d-shader: Check for missing semantics on entry function parameters.

Alexandre Julliard julliard at winehq.org
Tue Mar 30 14:57:57 CDT 2021


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

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Sun Mar 28 21:46:56 2021 +0200

vkd3d-shader: Check for missing semantics on entry function parameters.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d-shader/hlsl.c       |  9 +++++++++
 tests/hlsl-invalid.shader_test | 13 +++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
index 794166d..daf354d 100644
--- a/libs/vkd3d-shader/hlsl.c
+++ b/libs/vkd3d-shader/hlsl.c
@@ -1626,6 +1626,7 @@ int hlsl_compile_shader(const struct vkd3d_shader_code *hlsl, const struct vkd3d
     struct hlsl_ir_function_decl *entry_func;
     const struct hlsl_profile_info *profile;
     const char *entry_point;
+    struct hlsl_ir_var *var;
     struct hlsl_ctx ctx;
     int ret;
 
@@ -1668,6 +1669,14 @@ int hlsl_compile_shader(const struct vkd3d_shader_code *hlsl, const struct vkd3d
         return VKD3D_ERROR_INVALID_SHADER;
     }
 
+    LIST_FOR_EACH_ENTRY(var, entry_func->parameters, struct hlsl_ir_var, param_entry)
+    {
+        if (var->data_type->type != HLSL_CLASS_STRUCT && !var->semantic
+                && (var->is_input_varying || var->is_output_varying))
+            hlsl_error(&ctx, var->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_SEMANTIC,
+                    "Parameter \"%s\" is missing a semantic.", var->name);
+    }
+
     if (!hlsl_type_is_void(entry_func->return_type)
             && entry_func->return_type->type != HLSL_CLASS_STRUCT && !entry_func->semantic)
         hlsl_error(&ctx, entry_func->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_SEMANTIC,
diff --git a/tests/hlsl-invalid.shader_test b/tests/hlsl-invalid.shader_test
index 370d84d..b30ff3d 100644
--- a/tests/hlsl-invalid.shader_test
+++ b/tests/hlsl-invalid.shader_test
@@ -108,6 +108,19 @@ float4 main(out float4 o : sv_target)
     return 0;
 }
 
+[pixel shader fail]
+float4 main(out float4 o) : sv_target
+{
+    o = 1;
+    return 0;
+}
+
+[pixel shader fail]
+float4 main(in float4 i) : sv_target
+{
+    return 0;
+}
+
 [pixel shader fail]
 struct {float4 a;};
 




More information about the wine-cvs mailing list