From: Nikolay Sivov nsivov@codeweavers.com
--- libs/vkd3d-shader/hlsl.y | 2 +- tests/cbuffer.shader_test | 21 +++++++++++++++++++-- tests/uav.shader_test | 14 ++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index 0ddae6ee..ce505358 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -1012,7 +1012,7 @@ static struct hlsl_reg_reservation parse_reg_reservation(const char *reg_string) FIXME("Unsupported register reservation syntax.\n"); return reservation; } - reservation.reg_type = reg_string[0]; + reservation.reg_type = tolower(reg_string[0]); return reservation; }
diff --git a/tests/cbuffer.shader_test b/tests/cbuffer.shader_test index 9cf42d9d..86e03607 100644 --- a/tests/cbuffer.shader_test +++ b/tests/cbuffer.shader_test @@ -1,3 +1,21 @@ +% Uppercase register set names +[pixel shader] +cbuffer Constants : register(B1) +{ +}; +Texture2D tex : register(T1); +float4 foo : register(C0); + +float4 main() : sv_target +{ + return foo; +} + +[test] +uniform 0 float4 1.0 2.0 3.0 4.0 +draw quad +probe all rgba (1.0, 2.0, 3.0, 4.0) + [pixel shader] // Test empty constant buffer. cbuffer Constants : register(b1) @@ -16,7 +34,6 @@ uniform 0 float4 1.0 2.0 3.0 4.0 draw quad probe all rgba (1.0, 2.0, 3.0, 4.0)
- % SM1 buffer offset allocation follows different rules than SM4. % Those would have to be tested separately. [require] @@ -611,7 +628,7 @@ float4 main() : sv_target cbuffer buffer { float4 foo : packoffset(c0); - Texture2D tex : register(t1); + Texture2D tex : register(T1); }
float4 main() : sv_target diff --git a/tests/uav.shader_test b/tests/uav.shader_test index 0c690f8e..f0eade4d 100644 --- a/tests/uav.shader_test +++ b/tests/uav.shader_test @@ -121,6 +121,20 @@ float4 main() : sv_target1 draw quad probe uav 3 (0, 0) rgba (0.9, 0.8, 0.7, 0.6)
+% Uppercase register set name +[pixel shader] +RWTexture2D<float4> u : register(U3); + +float4 main() : sv_target1 +{ + u[uint2(0, 0)] = float4(0.9, 0.8, 0.7, 0.6); + return 0; +} + +[test] +draw quad +probe uav 3 (0, 0) rgba (0.9, 0.8, 0.7, 0.6) + % Test that we can declare and use an array of UAVs.
[uav 2]
From: Nikolay Sivov nsivov@codeweavers.com
--- libs/vkd3d-shader/hlsl.y | 2 +- tests/cbuffer.shader_test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index ce505358..f151ebcc 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -1033,7 +1033,7 @@ static struct hlsl_reg_reservation parse_packoffset(struct hlsl_ctx *ctx, const return reservation; }
- reservation.offset_type = reg_string[0]; + reservation.offset_type = tolower(reg_string[0]); if (reservation.offset_type != 'c') { hlsl_error(ctx, loc, VKD3D_SHADER_ERROR_HLSL_INVALID_RESERVATION, diff --git a/tests/cbuffer.shader_test b/tests/cbuffer.shader_test index 86e03607..7e2a91dc 100644 --- a/tests/cbuffer.shader_test +++ b/tests/cbuffer.shader_test @@ -156,7 +156,7 @@ float4 main() : sv_target cbuffer buffer { float4 a : packoffset(c1); - float4 b : packoffset(c2); + float4 b : packoffset(C2); }
float4 main() : sv_target
+ reservation.reg_type = tolower(reg_string[0]);
A (relatively) well-known issue with functions like tolower() is that the lower case variant of 'I' may be either 'ı' or 'i' depending on the locale we're running in. Although I don't think any of I/İ/ı/i is a valid register type in the shader profiles that support register()/packoffset(), it seems preferable to use the locale-independent ascii_tolower() here.