[PATCH vkd3d 2/5] vkd3d-shader: Check for missing semantics on entry function parameters.

Zebediah Figura zfigura at codeweavers.com
Wed Mar 24 16:12:28 CDT 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 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 794166dd..daf354df 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 370d84d4..b30ff3d7 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;};
 
-- 
2.31.0




More information about the wine-devel mailing list