summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-08-21 16:04:42 -0400
committerGitHub <noreply@github.com>2020-08-21 13:04:42 -0700
commitfcac02e405661de311b5ceebbd6d3e2c78bf8aea (patch)
tree6e79865b39f0739d2ac9c3f91cc4129c244b6977 /tests
parent49067fd2e97b40649df3fa2ce096f78c2e45da5a (diff)
Vulkan update/NVAPI support (#1511)
* First pass at incorporating nvapi into test harness. * D3d12 Atomic Float Add via NVAPI working * Dx12 atomic float appears to work. * Atomic float add on Dx12. * Added atomic64 feature addition to vk. Fix correct output for atomic-float-byte-address.slang * Disable atomic float failing tests. * Upgraded VK headers. * Detect atomic float availability on VK. * Try to get test working for in64 atomic. * Made HLSL prelude controlled via the render-test requirements. * Added -enable-nvapi to premake. * Fix D3D12Renderer when NVAPI is not available. * Small improvements to VKRenderer. * Improve atomic documentation in target-compatibility.md.
Diffstat (limited to 'tests')
-rw-r--r--tests/slang-extension/atomic-float-byte-address-buffer.slang48
-rw-r--r--tests/slang-extension/atomic-float-byte-address-buffer.slang.expected.txt9
-rw-r--r--tests/slang-extension/atomic-int64-byte-address-buffer.slang13
3 files changed, 46 insertions, 24 deletions
diff --git a/tests/slang-extension/atomic-float-byte-address-buffer.slang b/tests/slang-extension/atomic-float-byte-address-buffer.slang
index d89ee8bd1..a332ddeac 100644
--- a/tests/slang-extension/atomic-float-byte-address-buffer.slang
+++ b/tests/slang-extension/atomic-float-byte-address-buffer.slang
@@ -1,18 +1,28 @@
-// byte-address-buffer.slang
+// atomic-float-byte-address-buffer.slang
-//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute
-//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -output-using-type
+// Produces a different result
+//TEST(compute):COMPARE_COMPUTE_EX:-dx11 -slang -compute -render-features atomic-float -output-using-type -nvapi-register u0
// Disabled because crashes currently on vulkan
-//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute
-// Disabled because requires nvapi to work
-// Note for this feature we require dxc and we can force that with -use-dxil
-//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-d3d12 -compute -use-dxil
-//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute
+// https://vulkan.gpuinfo.org/listdevicescoverage.php?extension=VK_EXT_shader_atomic_float
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -render-features atomic-float -output-using-type
+// Doesn't work on D3D12 for unknown reasons
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-d3d12 -compute -render-features atomic-float -output-using-type -compile-arg -O2 -nvapi-register u0
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-d3d12 -compute -use-dxil -render-features atomic-float -output-using-type -compile-arg -O2 -nvapi-register u0
+//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -output-using-type
-//TEST_INPUT:ubuffer(data=[0.1 0.2 0.3 0.4]):out,name=outputBuffer
-RWByteAddressBuffer outputBuffer;
+// We don't use this, but having this defined makes the 0 slot available if nvapi is going to be used
+// Only strictly necessary on the dx12 path
+//TEST_INPUT:ubuffer(data=[0 0 0 0 ], stride=4):name=nvapiBuffer
+RWStructuredBuffer<int> nvapiBuffer;
-//TEST_INPUT:ubuffer(data=[0.7 0.5 0.2 0.6]):name=anotherBuffer
+//TEST_INPUT:ubuffer(data=[1.0 2.0 3.0 4.0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<float> outputBuffer;
+
+//TEST_INPUT:ubuffer(data=[1.0 2.0 3.0 4.0], stride=4):name=workBuffer
+RWByteAddressBuffer workBuffer;
+
+//TEST_INPUT:ubuffer(data=[0.7 0.5 0.2 0.6], stride=4):name=anotherBuffer
RWStructuredBuffer<float> anotherBuffer;
[numthreads(16, 1, 1)]
@@ -22,13 +32,19 @@ void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
int idx = (tid & 3) ^ (tid >> 2);
//const float delta = anotherBuffer[idx & 3];
- const float delta = 0.0f;
-
+
float previousValue = 0;
- outputBuffer.InterlockedAddFp32((idx << 2), 1.0f, previousValue);
- //outputBuffer.InterlockedAddFp32((idx ^ 2) << 2, 2.0f + delta);
+ workBuffer.InterlockedAddFp32((idx << 2), 1.0f, previousValue);
+ //workBuffer.InterlockedAddFp32((idx ^ 2) << 2, 2.0f + delta);
// The sum of values in anotherBuffer should also be added
//int anotherIdx = tid >> 2;
- //outputBuffer.InterlockedAddFp32(anotherIdx << 2, delta);
+ //workBuffer.InterlockedAddFp32(anotherIdx << 2, delta);
+
+ GroupMemoryBarrierWithGroupSync();
+
+ if (tid < 4)
+ {
+ outputBuffer[tid] = asfloat(workBuffer.Load(tid << 2));
+ }
} \ No newline at end of file
diff --git a/tests/slang-extension/atomic-float-byte-address-buffer.slang.expected.txt b/tests/slang-extension/atomic-float-byte-address-buffer.slang.expected.txt
index 4affc7d87..c0e0cfb4b 100644
--- a/tests/slang-extension/atomic-float-byte-address-buffer.slang.expected.txt
+++ b/tests/slang-extension/atomic-float-byte-address-buffer.slang.expected.txt
@@ -1,4 +1,5 @@
-40833333
-40866666
-4089999A
-408CCCCD
+type: float
+5.000000
+6.000000
+7.000000
+8.000000
diff --git a/tests/slang-extension/atomic-int64-byte-address-buffer.slang b/tests/slang-extension/atomic-int64-byte-address-buffer.slang
index 22f21408c..216e55dc2 100644
--- a/tests/slang-extension/atomic-int64-byte-address-buffer.slang
+++ b/tests/slang-extension/atomic-int64-byte-address-buffer.slang
@@ -4,12 +4,17 @@
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute
// No support for int64_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
-// Disable for now, because can only test when NVAPI is available, and it is not by default.
-//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -nvapi-register u0
+// Doesn't work on current version of driver. The atomics have no effect perhaps meaning they aren't being decoded correctly
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -nvapi-register u0 -compile-arg -O2
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -render-features atomic-int64
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute
+// We don't use this, but having this defined makes the 0 slot available if nvapi is going to be used
+// Only strictly necessary on the dx12 path
+//TEST_INPUT:ubuffer(data=[0 0 0 0 ], stride=4):name=nvapiBuffer
+RWStructuredBuffer<int> nvapiBuffer;
+
//TEST_INPUT:ubuffer(data=[0 1 2 3 4 5 6 7]):out,name=outputBuffer
RWByteAddressBuffer outputBuffer;