From: Conor McCarthy cmccarthy@codeweavers.com
--- Makefile.am | 1 + tests/hlsl/float-comparison.shader_test | 44 +++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 tests/hlsl/float-comparison.shader_test
diff --git a/Makefile.am b/Makefile.am index 002746829..a5c5fe62f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -87,6 +87,7 @@ vkd3d_shader_tests = \ tests/hlsl/entry-point-semantics.shader_test \ tests/hlsl/exp.shader_test \ tests/hlsl/expr-indexing.shader_test \ + tests/hlsl/float-comparison.shader_test \ tests/hlsl/floor.shader_test \ tests/hlsl/fmod.shader_test \ tests/hlsl/for.shader_test \ diff --git a/tests/hlsl/float-comparison.shader_test b/tests/hlsl/float-comparison.shader_test new file mode 100644 index 000000000..bdfff5b9f --- /dev/null +++ b/tests/hlsl/float-comparison.shader_test @@ -0,0 +1,44 @@ +[pixel shader] +uniform float4 u; + +float4 main() : sv_target +{ + float4 result; + float n = u.x/u.w; + + /* '!(condition)' forces use of the unordered instruction variant */ + + result.x = u.y > u.x; + result.x += (u.y < u.x) ? 10.0 : 0.0; + result.x += (u.y >= u.x) ? 100.0 : 0.0; + result.x += (u.y <= u.x) ? 1000.0 : 0.0; + result.x += !(u.y <= u.x) ? 10000.0 : 0.0; + result.x += !(u.y >= u.x) ? 100000.0 : 0.0; + result.x += !(u.y < u.x) ? 1000000.0 : 0.0; + result.x += !(u.y > u.x) ? 10000000.0 : 0.0; + result.y = n > u.x; + result.y += (n < u.x) ? 10.0 : 0.0; + result.y += (n >= u.x) ? 100.0 : 0.0; + result.y += (n <= u.x) ? 1000.0 : 0.0; + result.y += !(n <= u.x) ? 10000.0 : 0.0; + result.y += !(n >= u.x) ? 100000.0 : 0.0; + result.y += !(n < u.x) ? 1000000.0 : 0.0; + result.y += !(n > u.x) ? 10000000.0 : 0.0; + result.z = u.z == u.y; + result.z += (u.z != u.y) ? 10.0 : 0.0; + result.z += !(u.z == u.y) ? 100.0 : 0.0; + result.z += !(u.z != u.y) ? 1000.0 : 0.0; + result.z += (n == u.y) ? 10000.0 : 0.0; + result.z += (n != u.y) ? 100000.0 : 0.0; + result.z += !(n == u.y) ? 1000000.0 : 0.0; + result.z += !(n != u.y) ? 10000000.0 : 0.0; + /* It doesn't seem possible to generate instructions for 'is ordered' or 'is unordered'. + * Expressions 'isnan(n)' and '(isnan(n) || isnan(u.x))' compile into function calls. */ + result.w = 0; + return result; +} + +[test] +uniform 0 float4 0.0 1.5 1.5 0.0 +todo(sm>=6) draw quad +probe all rgba (1010101.0, 11110000.0, 1101001.0, 0.0)