From 5942ff81d9a63ee1e37ba81172ea579646be774e Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 30 Jan 2020 16:28:50 -0500 Subject: Support for 64 bit integer types (#1191) * * For integer literals add postfix, and use unsigned/signed output appropriately * Extend GLSL extension handling by type, and for adding 64 bit int extensions * Added tests for int/uint64 types * Add explicit Int/UInt64 emit functions to avoid ambiguity. --- tests/hlsl-intrinsic/scalar-int64.slang | 21 +++++++++++++++++++ .../hlsl-intrinsic/scalar-int64.slang.expected.txt | 4 ++++ tests/hlsl-intrinsic/scalar-uint64.slang | 24 ++++++++++++++++++++++ .../scalar-uint64.slang.expected.txt | 4 ++++ 4 files changed, 53 insertions(+) create mode 100644 tests/hlsl-intrinsic/scalar-int64.slang create mode 100644 tests/hlsl-intrinsic/scalar-int64.slang.expected.txt create mode 100644 tests/hlsl-intrinsic/scalar-uint64.slang create mode 100644 tests/hlsl-intrinsic/scalar-uint64.slang.expected.txt (limited to 'tests') diff --git a/tests/hlsl-intrinsic/scalar-int64.slang b/tests/hlsl-intrinsic/scalar-int64.slang new file mode 100644 index 000000000..4da2a553e --- /dev/null +++ b/tests/hlsl-intrinsic/scalar-int64.slang @@ -0,0 +1,21 @@ +//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute +// No support for int64_t on dx11 +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute +// No support for int64_t on HLSL +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-cuda -compute + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer +RWStructuredBuffer outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + uint idx = dispatchThreadID.x; + + int64_t v = int64_t(idx) * 0x400010035435435ll; + + outputBuffer[idx] = int(v) ^ int(((v >> 32) & 0xffffffff)); +} \ No newline at end of file diff --git a/tests/hlsl-intrinsic/scalar-int64.slang.expected.txt b/tests/hlsl-intrinsic/scalar-int64.slang.expected.txt new file mode 100644 index 000000000..c0bb016cd --- /dev/null +++ b/tests/hlsl-intrinsic/scalar-int64.slang.expected.txt @@ -0,0 +1,4 @@ +0 +31435535 +6286AA6A +93C9FF9F diff --git a/tests/hlsl-intrinsic/scalar-uint64.slang b/tests/hlsl-intrinsic/scalar-uint64.slang new file mode 100644 index 000000000..a990ccc22 --- /dev/null +++ b/tests/hlsl-intrinsic/scalar-uint64.slang @@ -0,0 +1,24 @@ +//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute +// No support for uint64_t on DX11 +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute +// No support for uint64_t on fxc - we need SM6.0 and dxil +// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/hlsl-shader-model-6-0-features-for-direct3d-12 +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_3 -use-dxil +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-cuda -compute + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer +RWStructuredBuffer outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + uint idx = dispatchThreadID.x; + + uint64_t v = uint64_t(idx) * 0x8000100354354354ull; + // Let's check all the bits make it + v |= 0x8000000000000000ull; + + outputBuffer[idx] = int(v) ^ int(v >> 32); +} \ No newline at end of file diff --git a/tests/hlsl-intrinsic/scalar-uint64.slang.expected.txt b/tests/hlsl-intrinsic/scalar-uint64.slang.expected.txt new file mode 100644 index 000000000..b8be0469a --- /dev/null +++ b/tests/hlsl-intrinsic/scalar-uint64.slang.expected.txt @@ -0,0 +1,4 @@ +80000000 +D4355357 +286AA6AE +7C9FF9F5 -- cgit v1.2.3