From: Francisco Casas fcasas@codeweavers.com
Dereferences to PixelShader, VertexShader, RenderTargetView, and DepthStencilView can exist in the program even though they don't use any register set.
This is required before introducing the upcoming tests because otherwise we reach unreacheable code when new_offset_instr_from_deref() calls type_get_regset() on pixel or vertex shaders. --- libs/vkd3d-shader/hlsl.c | 6 ++++++ libs/vkd3d-shader/hlsl.h | 1 + libs/vkd3d-shader/hlsl_codegen.c | 1 + 3 files changed, 8 insertions(+)
diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c index a82334e58..73f01eb9f 100644 --- a/libs/vkd3d-shader/hlsl.c +++ b/libs/vkd3d-shader/hlsl.c @@ -242,6 +242,12 @@ static enum hlsl_regset type_get_regset(const struct hlsl_type *type) case HLSL_TYPE_UAV: return HLSL_REGSET_UAVS;
+ case HLSL_TYPE_PIXELSHADER: + case HLSL_TYPE_VERTEXSHADER: + case HLSL_TYPE_DEPTHSTENCILVIEW: + case HLSL_TYPE_RENDERTARGETVIEW: + return HLSL_REGSET_NONE; + default: vkd3d_unreachable(); } diff --git a/libs/vkd3d-shader/hlsl.h b/libs/vkd3d-shader/hlsl.h index 93ec67d0a..85e080ccb 100644 --- a/libs/vkd3d-shader/hlsl.h +++ b/libs/vkd3d-shader/hlsl.h @@ -132,6 +132,7 @@ enum hlsl_regset HLSL_REGSET_LAST_OBJECT = HLSL_REGSET_UAVS, HLSL_REGSET_NUMERIC, HLSL_REGSET_LAST = HLSL_REGSET_NUMERIC, + HLSL_REGSET_NONE, };
/* An HLSL source-level data type, including anonymous structs and typedefs. */ diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index ff349ab49..17421e8ef 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -3748,6 +3748,7 @@ static char get_regset_name(enum hlsl_regset regset) case HLSL_REGSET_UAVS: return 'u'; case HLSL_REGSET_NUMERIC: + case HLSL_REGSET_NONE: vkd3d_unreachable(); } vkd3d_unreachable();