-- v2: vkd3d-shader/hlsl: Implement asfloat(). tests: Fix a typo in asuint() test shader.
From: Nikolay Sivov nsivov@codeweavers.com
--- tests/asuint.shader_test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/asuint.shader_test b/tests/asuint.shader_test index a08beaf3..633a543a 100644 --- a/tests/asuint.shader_test +++ b/tests/asuint.shader_test @@ -51,5 +51,5 @@ float4 main() : sv_target { double d = 1.0;
- return asuint(b); + return asuint(d); }
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- Makefile.am | 1 + libs/vkd3d-shader/hlsl.y | 24 ++++++++++++++++++++ tests/asfloat.shader_test | 48 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 tests/asfloat.shader_test
diff --git a/Makefile.am b/Makefile.am index e3d52ac5..bfa12e6a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -51,6 +51,7 @@ vkd3d_shader_tests = \ tests/arithmetic-int-uniform.shader_test \ tests/arithmetic-uint.shader_test \ tests/array-parameters.shader_test \ + tests/asfloat.shader_test \ tests/asuint.shader_test \ tests/bitwise.shader_test \ tests/bool-semantics.shader_test \ diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index ab0b3f65..5bf2bab4 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -2534,6 +2534,29 @@ static struct hlsl_type *convert_numeric_type(const struct hlsl_ctx *ctx, return hlsl_get_numeric_type(ctx, type->class, base_type, type->dimx, type->dimy); }
+static bool intrinsic_asfloat(struct hlsl_ctx *ctx, + const struct parse_initializer *params, const struct vkd3d_shader_location *loc) +{ + struct hlsl_ir_node *operands[HLSL_MAX_OPERANDS] = {0}; + struct hlsl_type *data_type; + + data_type = params->args[0]->data_type; + if (data_type->base_type == HLSL_TYPE_BOOL || data_type->base_type == HLSL_TYPE_DOUBLE) + { + struct vkd3d_string_buffer *string; + + if ((string = hlsl_type_to_string(ctx, data_type))) + hlsl_error(ctx, loc, VKD3D_SHADER_ERROR_HLSL_INVALID_TYPE, + "Wrong argument type of asfloat(): expected 'int', 'uint', 'float', or 'half', but got '%s'.", + string->buffer); + hlsl_release_string_buffer(ctx, string); + } + data_type = convert_numeric_type(ctx, data_type, HLSL_TYPE_FLOAT); + + operands[0] = params->args[0]; + return add_expr(ctx, params->instrs, HLSL_OP1_REINTERPRET, operands, data_type, loc); +} + static bool intrinsic_asuint(struct hlsl_ctx *ctx, const struct parse_initializer *params, const struct vkd3d_shader_location *loc) { @@ -3488,6 +3511,7 @@ intrinsic_functions[] = {"abs", 1, true, intrinsic_abs}, {"all", 1, true, intrinsic_all}, {"any", 1, true, intrinsic_any}, + {"asfloat", 1, true, intrinsic_asfloat}, {"asuint", -1, true, intrinsic_asuint}, {"clamp", 3, true, intrinsic_clamp}, {"cos", 1, true, intrinsic_cos}, diff --git a/tests/asfloat.shader_test b/tests/asfloat.shader_test new file mode 100644 index 00000000..9c0d9373 --- /dev/null +++ b/tests/asfloat.shader_test @@ -0,0 +1,48 @@ +[require] +shader model >= 4.0 + +[pixel shader] +float4 main(uniform float f, uniform int i, uniform uint u, uniform half h) : sv_target +{ + float4 ret; + + ret.x = asfloat(f); + ret.y = asfloat(i); + ret.z = asfloat(u); + ret.w = asfloat(h); + return ret; +} + +[test] +uniform 0 float4 123.0 -2.0 456 0.01 +draw quad +probe (320,240) rgba (123.0, -2.0, 456.0, 0.01) + +[pixel shader] +float4 main(uniform float2x2 m, uniform float4 v) : sv_target +{ + return float4(asfloat(m)[0][1], asfloat(v).y, 0, 0); +} + +[test] +uniform 0 float4 11 12 0 0 +uniform 4 float4 13 14 0 0 +uniform 8 float4 20 21 22 23 +draw quad +probe (320,240) rgba (13.0, 21.0, 0.0, 0.0) + +[pixel shader fail] +float4 main() : sv_target +{ + bool b = true; + + return asfloat(b); +} + +[pixel shader fail] +float4 main() : sv_target +{ + double d = 1.0; + + return asfloat(d); +}
On Tue May 2 12:37:02 2023 +0000, Giovanni Mascellani wrote:
In commit subject "tests: Fix a type in asuint() test shader." there is a typo. Weirdly, there correct way to get rid of the typo is to add a "typo" (and remove a "type").
Thanks, now with the typo.
This merge request was approved by Henri Verbeet.