diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2024-05-02 11:56:13 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-02 11:56:13 -0700 |
| commit | f7d54af67e026feb2546af1deaf2513a36f8516e (patch) | |
| tree | c751573fbfceb114eeac6217bb3ccc4c13f19ef2 /tests | |
| parent | 679a457940027420817a85070b3fdb9bfc0cca2e (diff) | |
Fix fmod behavior targetting GLSL and SPIR-V (#4080)
* Fix fmod behavior targetting GLSL and SPIR-V
The default implementation of fmod was doing "Modulo" operation when
"fmod" in HLSL should do "remainder" operation.
* Fix a mistake in `fmod` GLSL target
When using __intrinsic_asm, the "if" logic wasn't emitted.
"__intrinsic_asm" had to be called from a new function and `fmod` had to
call it.
Alternatively, I am using `operator?()` to workaround.
A similar modification is made to `roundEven()` hoping for a better
performance.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cross-compile/fmod.slang | 3 | ||||
| -rw-r--r-- | tests/glsl-intrinsic/intrinsic-basic.slang | 25 |
2 files changed, 12 insertions, 16 deletions
diff --git a/tests/cross-compile/fmod.slang b/tests/cross-compile/fmod.slang index 6efff35b3..16ecf072a 100644 --- a/tests/cross-compile/fmod.slang +++ b/tests/cross-compile/fmod.slang @@ -4,7 +4,8 @@ // expected output on Vulkan/GLSL. //TEST(compute):COMPARE_COMPUTE:-dx11 -compute -shaderobj -//TEST(compute):COMPARE_COMPUTE:-vk -compute -shaderobj +//TEST(compute):COMPARE_COMPUTE:-vk -compute -shaderobj -emit-spirv-via-glsl +//TEST(compute):COMPARE_COMPUTE:-vk -compute -shaderobj -emit-spirv-directly //TEST_INPUT:cbuffer(data=[4 0 0 0]):name=C cbuffer C diff --git a/tests/glsl-intrinsic/intrinsic-basic.slang b/tests/glsl-intrinsic/intrinsic-basic.slang index 42d416c1e..fbe29a000 100644 --- a/tests/glsl-intrinsic/intrinsic-basic.slang +++ b/tests/glsl-intrinsic/intrinsic-basic.slang @@ -207,12 +207,10 @@ bool Test_ScalarType() && genFType(0) == round(genFType(zero)) && genDType(0) == round(genDType(zero)) -#if 0 - // C-HECK_GLSL-COUNT-2: roundEven( - // C-HECK_SPIR-COUNT-2: RoundEven{{ }} + // CHECK_GLSL-COUNT-2: roundEven( + // CHECK_SPIR-COUNT-2: RoundEven{{ }} && genFType(0) == roundEven(genFType(zero)) && genDType(0) == roundEven(genDType(zero)) -#endif // CHECK_GLSL-COUNT-2: ceil( // CHECK_SPIR-COUNT-2: Ceil{{ }} @@ -224,11 +222,10 @@ bool Test_ScalarType() && genFType(0) == fract(genFType(zero)) && genDType(0) == fract(genDType(zero)) -#if 0 - // C-HECK_GLSL-COUNT-2: mod( + // CHECK_GLSL-COUNT-2: mod( + // CHECK_SPIR-COUNT-2: Floor{{ }} && genFType(0) == mod(genFType(zero), genFType(one)) && genDType(0) == mod(genDType(zero), genDType(one)) -#endif // CHECK_GLSL-COUNT-2: modf( // CHECK_SPIR-COUNT-2: Modf{{ }} @@ -733,13 +730,11 @@ bool Test_VectorType() && genFType(0) == round(genFType(zero)) && genDType(0) == round(genDType(zero)) -#if 0 - // C-HECK_GLSL-COUNT-2: roundEven( - // C-HECK_SPIR-COUNT-2: RoundEven{{ }} - // C-HECK_SPIR-NOT: RoundEven{{ }} + // CHECK_GLSL-COUNT-2: roundEven( + // CHECK_SPIR-COUNT-2: RoundEven{{ }} + // CHECK_SPIR-NOT: RoundEven{{ }} && genFType(0) == roundEven(genFType(zero)) && genDType(0) == roundEven(genDType(zero)) -#endif // CHECK_GLSL-COUNT-2: ceil( // CHECK_SPIR-COUNT-2: Ceil{{ }} @@ -753,13 +748,13 @@ bool Test_VectorType() && genFType(0) == fract(genFType(zero)) && genDType(0) == fract(genDType(zero)) -#if 0 - // C-HECK_GLSL-COUNT-4: mod( + // CHECK_GLSL-COUNT-4: mod( + // CHECK_SPIR-COUNT-4: Floor{{ }} + // CHECK_SPIR-NOT: Floor{{ }} && genFType(0) == mod(genFType(zero), float(one)) && genFType(0) == mod(genFType(zero), genFType(one)) && genDType(0) == mod(genDType(zero), double(one)) && genDType(0) == mod(genDType(zero), genDType(one)) -#endif // CHECK_GLSL-COUNT-2: modf( // CHECK_SPIR-COUNT-2: Modf{{ }} |
