From: Zebediah Figura zfigura@codeweavers.com
Signed-off-by: Zebediah Figura zfigura@codeweavers.com Signed-off-by: Matteo Bruni mbruni@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 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;};