diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-08-21 16:04:42 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-21 13:04:42 -0700 |
| commit | fcac02e405661de311b5ceebbd6d3e2c78bf8aea (patch) | |
| tree | 6e79865b39f0739d2ac9c3f91cc4129c244b6977 /tests | |
| parent | 49067fd2e97b40649df3fa2ce096f78c2e45da5a (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')
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; |
