summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/windows.yml2
m---------external/slang-binaries0
-rw-r--r--source/core/slang-render-api-util.cpp2
-rw-r--r--tests/bugs/dxbc-double-problem.slang2
-rw-r--r--tests/compute/ray-tracing-inline.slang4
-rw-r--r--tests/compute/texture-sample-grad-offset-clamp.slang4
-rw-r--r--tests/compute/texture-simple.slang12
-rw-r--r--tests/compute/texture-simple.slang.expected.txt9
-rw-r--r--tests/hlsl-intrinsic/bit-cast-double.slang2
-rw-r--r--tests/hlsl-intrinsic/bit-cast/bit-cast-16-bit.slang2
-rw-r--r--tests/hlsl-intrinsic/classify-double.slang2
-rw-r--r--tests/hlsl-intrinsic/literal-int64.slang2
-rw-r--r--tests/hlsl-intrinsic/matrix-double-reduced-intrinsic.slang2
-rw-r--r--tests/hlsl-intrinsic/matrix-double.slang2
-rw-r--r--tests/hlsl-intrinsic/scalar-double-d3d-intrinsic.slang2
-rw-r--r--tests/hlsl-intrinsic/scalar-double-simple.slang2
-rw-r--r--tests/hlsl-intrinsic/scalar-double-vk-intrinsic.slang2
-rw-r--r--tests/hlsl-intrinsic/scalar-double.slang2
-rw-r--r--tests/hlsl-intrinsic/scalar-int64.slang2
-rw-r--r--tests/hlsl-intrinsic/scalar-uint64.slang2
-rw-r--r--tests/hlsl-intrinsic/vector-double-reduced-intrinsic.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-active-count-bits.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-active-product.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-is-first-lane.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-mask/wave-is-first-lane.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-mask/wave-prefix-product.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-mask/wave-prefix-sum.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-mask/wave-vector.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-mask/wave.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-prefix-count-bits.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-prefix-product.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-prefix-sum.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-vector.slang2
-rw-r--r--tests/language-feature/initializer-lists/default-init-16bit-types.slang2
-rw-r--r--tests/type/texture-sampler/texture-sampler-2d.slang2
-rw-r--r--tests/type/texture-sampler/texture-sampler-2d.slang.expected.txt9
-rw-r--r--tools/copy-hlsl-libs.bat9
-rw-r--r--tools/gfx/vulkan/render-vk.cpp315
-rw-r--r--tools/gfx/vulkan/vk-api.h39
-rw-r--r--tools/gfx/vulkan/vk-descriptor-allocator.cpp38
-rw-r--r--tools/gfx/vulkan/vk-module.cpp14
-rw-r--r--tools/gfx/vulkan/vk-module.h8
42 files changed, 305 insertions, 216 deletions
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index 4f871a6c0..091997303 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -47,4 +47,6 @@ jobs:
}
$slangTestBinDir = ".\bin\windows-$testPlatform\${{matrix.configuration}}\";
$env:Path += ";$slangTestBinDir";
+ Invoke-WebRequest -uri "https://github.com/shader-slang/swiftshader/releases/download/v1.0/vk_swiftshader_windows_$testPlatform.zip" -Method "GET" -Outfile "swiftshader.zip";
+ Expand-Archive "swiftshader.zip" -DestinationPath $slangTestBinDir;
& "$slangTestBinDir\slang-test.exe" -api all-dx12 -appveyor -bindir "$slangTestBinDir\" -platform $testPlatform -configuration ${{matrix.configuration}} -category $testCategory; \ No newline at end of file
diff --git a/external/slang-binaries b/external/slang-binaries
-Subproject 959b5c336907769f5df386735590b2bf8b50718
+Subproject 788d2198b077df34bb6b42a9c4e6f345611e801
diff --git a/source/core/slang-render-api-util.cpp b/source/core/slang-render-api-util.cpp
index edf8c13ca..6c00e72b0 100644
--- a/source/core/slang-render-api-util.cpp
+++ b/source/core/slang-render-api-util.cpp
@@ -265,7 +265,7 @@ static bool _canLoadSharedLibrary(const char* libName)
switch (type)
{
case RenderApiType::OpenGl: return _canLoadSharedLibrary("opengl32");
- case RenderApiType::Vulkan: return _canLoadSharedLibrary("vulkan-1");
+ case RenderApiType::Vulkan: return _canLoadSharedLibrary("vulkan-1") || _canLoadSharedLibrary("vk_swiftshader");
case RenderApiType::D3D11: return _canLoadSharedLibrary("d3d11");
case RenderApiType::D3D12: return _canLoadSharedLibrary("d3d12");
case RenderApiType::CPU: return true;
diff --git a/tests/bugs/dxbc-double-problem.slang b/tests/bugs/dxbc-double-problem.slang
index 50abf4d7b..441000f63 100644
--- a/tests/bugs/dxbc-double-problem.slang
+++ b/tests/bugs/dxbc-double-problem.slang
@@ -1,5 +1,5 @@
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -output-using-type -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -output-using-type -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-dx12 -compute -use-dxil -output-using-type -shaderobj
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-dx12 -compute -output-using-type -shaderobj
diff --git a/tests/compute/ray-tracing-inline.slang b/tests/compute/ray-tracing-inline.slang
index 94e0a4f87..7699cf9eb 100644
--- a/tests/compute/ray-tracing-inline.slang
+++ b/tests/compute/ray-tracing-inline.slang
@@ -1,5 +1,5 @@
-//TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -use-dxil -profile sm_6_5 -render-feature ray-tracing
-//TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-tracing
+//TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -use-dxil -profile sm_6_5 -render-feature ray-query
+//TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query
//TEST_INPUT: set scene = AccelerationStructure
uniform RaytracingAccelerationStructure scene;
diff --git a/tests/compute/texture-sample-grad-offset-clamp.slang b/tests/compute/texture-sample-grad-offset-clamp.slang
index 2a7d4d79a..b83cc1264 100644
--- a/tests/compute/texture-sample-grad-offset-clamp.slang
+++ b/tests/compute/texture-sample-grad-offset-clamp.slang
@@ -1,5 +1,5 @@
-//TEST(compute, vulkan):COMPARE_RENDER_COMPUTE:-vk -shaderobj
-//TEST(compute):COMPARE_RENDER_COMPUTE:-shaderobj
+//TEST(compute, vulkan):COMPARE_RENDER_COMPUTE:-vk -shaderobj -render-feature shader-resource-min-lod
+//TEST(compute):COMPARE_RENDER_COMPUTE:-shaderobj -render-feature shader-resource-min-lod
//TEST_INPUT: Texture2D(size=4, content = one):name=t2D
//TEST_INPUT: Sampler:name=samplerState
diff --git a/tests/compute/texture-simple.slang b/tests/compute/texture-simple.slang
index 54be76679..f9acfe3f0 100644
--- a/tests/compute/texture-simple.slang
+++ b/tests/compute/texture-simple.slang
@@ -1,9 +1,9 @@
-//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -shaderobj -output-using-type
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type -render-feature hardware-device
+//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type
// Doesn't work on CUDA, not clear why yet
//DISABLE_TEST_INPUT: Texture1D(format=R_Float32, size=4, content = one, mipMaps=1):name tLoad1D
diff --git a/tests/compute/texture-simple.slang.expected.txt b/tests/compute/texture-simple.slang.expected.txt
index cf6e7405a..195e0c411 100644
--- a/tests/compute/texture-simple.slang.expected.txt
+++ b/tests/compute/texture-simple.slang.expected.txt
@@ -1,4 +1,5 @@
-40E00000
-40E00000
-40E00000
-40E00000
+type: float
+7.000000
+7.000000
+7.000000
+7.000000
diff --git a/tests/hlsl-intrinsic/bit-cast-double.slang b/tests/hlsl-intrinsic/bit-cast-double.slang
index 43d12009b..292f56d8e 100644
--- a/tests/hlsl-intrinsic/bit-cast-double.slang
+++ b/tests/hlsl-intrinsic/bit-cast-double.slang
@@ -1,7 +1,7 @@
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -cpu -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-slang -vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-slang -vk -compute -shaderobj -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX:-slang -cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
diff --git a/tests/hlsl-intrinsic/bit-cast/bit-cast-16-bit.slang b/tests/hlsl-intrinsic/bit-cast/bit-cast-16-bit.slang
index 28f8973f6..adeb83a67 100644
--- a/tests/hlsl-intrinsic/bit-cast/bit-cast-16-bit.slang
+++ b/tests/hlsl-intrinsic/bit-cast/bit-cast-16-bit.slang
@@ -1,7 +1,7 @@
// bit-cast-16-bit.slang
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile sm_6_2 -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature int16,half
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16], stride=4):name inputBuffer
diff --git a/tests/hlsl-intrinsic/classify-double.slang b/tests/hlsl-intrinsic/classify-double.slang
index 7ab19e980..7108ce449 100644
--- a/tests/hlsl-intrinsic/classify-double.slang
+++ b/tests/hlsl-intrinsic/classify-double.slang
@@ -1,7 +1,7 @@
//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature double
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
// inf, -inf, nan, finite
diff --git a/tests/hlsl-intrinsic/literal-int64.slang b/tests/hlsl-intrinsic/literal-int64.slang
index 49a19663d..9dea6f72e 100644
--- a/tests/hlsl-intrinsic/literal-int64.slang
+++ b/tests/hlsl-intrinsic/literal-int64.slang
@@ -4,7 +4,7 @@
// No support with Dx12 with dxbc. Needs SM6.0 + dxil
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -profile cs_6_0 -dx12 -use-dxil -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature int64
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
// Note that the behavior we expect here, is a int without suffix is assumed to
diff --git a/tests/hlsl-intrinsic/matrix-double-reduced-intrinsic.slang b/tests/hlsl-intrinsic/matrix-double-reduced-intrinsic.slang
index 1d8a63d05..82f48399e 100644
--- a/tests/hlsl-intrinsic/matrix-double-reduced-intrinsic.slang
+++ b/tests/hlsl-intrinsic/matrix-double-reduced-intrinsic.slang
@@ -5,7 +5,7 @@
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -output-using-type -shaderobj
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -output-using-type -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile sm_6_0 -use-dxil -output-using-type -shaderobj
-//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj
+//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -output-using-type -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/matrix-double.slang b/tests/hlsl-intrinsic/matrix-double.slang
index 9b4f8ac19..060c2f4ad 100644
--- a/tests/hlsl-intrinsic/matrix-double.slang
+++ b/tests/hlsl-intrinsic/matrix-double.slang
@@ -7,7 +7,7 @@
//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -output-using-type
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -output-using-type
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -output-using-type
-//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type
+//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -output-using-type
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/scalar-double-d3d-intrinsic.slang b/tests/hlsl-intrinsic/scalar-double-d3d-intrinsic.slang
index 34bab6503..36f8ef130 100644
--- a/tests/hlsl-intrinsic/scalar-double-d3d-intrinsic.slang
+++ b/tests/hlsl-intrinsic/scalar-double-d3d-intrinsic.slang
@@ -4,7 +4,7 @@
// This is disabled because Dx12/DXBC doing double writes to a structured buffer can fail
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -output-using-type -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile sm_6_0 -use-dxil -output-using-type -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -output-using-type -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/scalar-double-simple.slang b/tests/hlsl-intrinsic/scalar-double-simple.slang
index b86cea88d..11370dd4d 100644
--- a/tests/hlsl-intrinsic/scalar-double-simple.slang
+++ b/tests/hlsl-intrinsic/scalar-double-simple.slang
@@ -5,7 +5,7 @@
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile sm_6_0 -use-dxil -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature double
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/scalar-double-vk-intrinsic.slang b/tests/hlsl-intrinsic/scalar-double-vk-intrinsic.slang
index 97292dcae..128c1c1cd 100644
--- a/tests/hlsl-intrinsic/scalar-double-vk-intrinsic.slang
+++ b/tests/hlsl-intrinsic/scalar-double-vk-intrinsic.slang
@@ -1,7 +1,7 @@
// This test is to see what intrinsics are available on VK
//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -output-using-type -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj -render-feature double
// We don't want to run a cuda test here...
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
diff --git a/tests/hlsl-intrinsic/scalar-double.slang b/tests/hlsl-intrinsic/scalar-double.slang
index 35f530269..cdf08e7b4 100644
--- a/tests/hlsl-intrinsic/scalar-double.slang
+++ b/tests/hlsl-intrinsic/scalar-double.slang
@@ -3,7 +3,7 @@
//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12
-//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute
+//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute
//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/scalar-int64.slang b/tests/hlsl-intrinsic/scalar-int64.slang
index 35fba2fa4..0fdc5a36d 100644
--- a/tests/hlsl-intrinsic/scalar-int64.slang
+++ b/tests/hlsl-intrinsic/scalar-int64.slang
@@ -4,7 +4,7 @@
// No support with Dx12 with dxbc. Needs SM6.0 + dxil
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -profile cs_6_0 -dx12 -use-dxil -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature int64
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/scalar-uint64.slang b/tests/hlsl-intrinsic/scalar-uint64.slang
index f862852b4..314e37b94 100644
--- a/tests/hlsl-intrinsic/scalar-uint64.slang
+++ b/tests/hlsl-intrinsic/scalar-uint64.slang
@@ -5,7 +5,7 @@
// 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 -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature int64
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/vector-double-reduced-intrinsic.slang b/tests/hlsl-intrinsic/vector-double-reduced-intrinsic.slang
index 7d7e0ca0d..b75f5efc4 100644
--- a/tests/hlsl-intrinsic/vector-double-reduced-intrinsic.slang
+++ b/tests/hlsl-intrinsic/vector-double-reduced-intrinsic.slang
@@ -3,7 +3,7 @@
// On CI systems DX11 test failed, so disable for now
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -output-using-type -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -output-using-type -shaderobj
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -shaderobj -render-feature double
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-cuda -compute -output-using-type -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-active-count-bits.slang b/tests/hlsl-intrinsic/wave-active-count-bits.slang
index 2de7db485..0782fee11 100644
--- a/tests/hlsl-intrinsic/wave-active-count-bits.slang
+++ b/tests/hlsl-intrinsic/wave-active-count-bits.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-active-product.slang b/tests/hlsl-intrinsic/wave-active-product.slang
index 6d9aea1fa..5d7b85026 100644
--- a/tests/hlsl-intrinsic/wave-active-product.slang
+++ b/tests/hlsl-intrinsic/wave-active-product.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-is-first-lane.slang b/tests/hlsl-intrinsic/wave-is-first-lane.slang
index 203c20bb8..300e78801 100644
--- a/tests/hlsl-intrinsic/wave-is-first-lane.slang
+++ b/tests/hlsl-intrinsic/wave-is-first-lane.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-mask/wave-is-first-lane.slang b/tests/hlsl-intrinsic/wave-mask/wave-is-first-lane.slang
index 71721ec35..37c49d805 100644
--- a/tests/hlsl-intrinsic/wave-mask/wave-is-first-lane.slang
+++ b/tests/hlsl-intrinsic/wave-mask/wave-is-first-lane.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-mask/wave-prefix-product.slang b/tests/hlsl-intrinsic/wave-mask/wave-prefix-product.slang
index 5904d6b99..4ebd4e95f 100644
--- a/tests/hlsl-intrinsic/wave-mask/wave-prefix-product.slang
+++ b/tests/hlsl-intrinsic/wave-mask/wave-prefix-product.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-mask/wave-prefix-sum.slang b/tests/hlsl-intrinsic/wave-mask/wave-prefix-sum.slang
index bf8f83805..7d7f76d6c 100644
--- a/tests/hlsl-intrinsic/wave-mask/wave-prefix-sum.slang
+++ b/tests/hlsl-intrinsic/wave-mask/wave-prefix-sum.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-mask/wave-vector.slang b/tests/hlsl-intrinsic/wave-mask/wave-vector.slang
index 1b77b3dc5..d51fbc6a3 100644
--- a/tests/hlsl-intrinsic/wave-mask/wave-vector.slang
+++ b/tests/hlsl-intrinsic/wave-mask/wave-vector.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-mask/wave.slang b/tests/hlsl-intrinsic/wave-mask/wave.slang
index 1b8acc277..5718dbcf1 100644
--- a/tests/hlsl-intrinsic/wave-mask/wave.slang
+++ b/tests/hlsl-intrinsic/wave-mask/wave.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-prefix-count-bits.slang b/tests/hlsl-intrinsic/wave-prefix-count-bits.slang
index 5440715aa..0c726e549 100644
--- a/tests/hlsl-intrinsic/wave-prefix-count-bits.slang
+++ b/tests/hlsl-intrinsic/wave-prefix-count-bits.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-prefix-product.slang b/tests/hlsl-intrinsic/wave-prefix-product.slang
index 70f52db13..4c412fe9f 100644
--- a/tests/hlsl-intrinsic/wave-prefix-product.slang
+++ b/tests/hlsl-intrinsic/wave-prefix-product.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-prefix-sum.slang b/tests/hlsl-intrinsic/wave-prefix-sum.slang
index 529b99d48..a90051d4e 100644
--- a/tests/hlsl-intrinsic/wave-prefix-sum.slang
+++ b/tests/hlsl-intrinsic/wave-prefix-sum.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/hlsl-intrinsic/wave-vector.slang b/tests/hlsl-intrinsic/wave-vector.slang
index eb8872145..a87aa1ebb 100644
--- a/tests/hlsl-intrinsic/wave-vector.slang
+++ b/tests/hlsl-intrinsic/wave-vector.slang
@@ -2,7 +2,7 @@
//DISABLE_TEST:COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -shaderobj
//TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -shaderobj
-//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature hardware-device
//TEST:COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 -shaderobj
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
diff --git a/tests/language-feature/initializer-lists/default-init-16bit-types.slang b/tests/language-feature/initializer-lists/default-init-16bit-types.slang
index 5fb578ca4..09da165f9 100644
--- a/tests/language-feature/initializer-lists/default-init-16bit-types.slang
+++ b/tests/language-feature/initializer-lists/default-init-16bit-types.slang
@@ -1,6 +1,6 @@
// simple-namespace.slang
-//TEST(compute):COMPARE_COMPUTE:-vk
+//TEST(compute):COMPARE_COMPUTE:-vk -render-feature int16
// Test that default initialization works with 16-bit types under Vulkan.
diff --git a/tests/type/texture-sampler/texture-sampler-2d.slang b/tests/type/texture-sampler/texture-sampler-2d.slang
index 974231b9b..146fd0fd8 100644
--- a/tests/type/texture-sampler/texture-sampler-2d.slang
+++ b/tests/type/texture-sampler/texture-sampler-2d.slang
@@ -1,4 +1,4 @@
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type
//TEST_INPUT: TextureSampler2D(size=4, content=one):name t2D
Sampler2D<float> t2D;
diff --git a/tests/type/texture-sampler/texture-sampler-2d.slang.expected.txt b/tests/type/texture-sampler/texture-sampler-2d.slang.expected.txt
index cc5e55ab6..6c9927073 100644
--- a/tests/type/texture-sampler/texture-sampler-2d.slang.expected.txt
+++ b/tests/type/texture-sampler/texture-sampler-2d.slang.expected.txt
@@ -1,4 +1,5 @@
-3F800000
-3F800000
-3F800000
-3F800000
+type: float
+1.0
+1.0
+1.0
+1.0
diff --git a/tools/copy-hlsl-libs.bat b/tools/copy-hlsl-libs.bat
index 806cbfde7..721273112 100644
--- a/tools/copy-hlsl-libs.bat
+++ b/tools/copy-hlsl-libs.bat
@@ -5,9 +5,12 @@ set SOURCE_DIR=%~1
set TARGET_DIR=%~2
set PLATFORM=%~3
-robocopy "../../external/slang-binaries/bin/%PLATFORM%" "%TARGET_DIR%" d3dcompiler_47.dll /r:0 >nul
+robocopy "../../../external/slang-binaries/bin/%PLATFORM%" "%TARGET_DIR%" d3dcompiler_47.dll /r:0 >nul
-robocopy "%SOURCE_DIR%" "%TARGET_DIR%" dxcompiler.dll /xn /r:0 >nul
-robocopy "%SOURCE_DIR%" "%TARGET_DIR%" dxil.dll /xn /r:0 >nul
+robocopy "../../../external/slang-binaries/bin/%PLATFORM%" "%TARGET_DIR%" dxcompiler.dll /r:0 >nul
+robocopy "../../../external/slang-binaries/bin/%PLATFORM%" "%TARGET_DIR%" dxil.dll /r:0 >nul
+
+robocopy "%SOURCE_DIR%" "%TARGET_DIR%" dxcompiler.dll /xo /r:0 >nul
+robocopy "%SOURCE_DIR%" "%TARGET_DIR%" dxil.dll /xo /r:0 >nul
exit /b 0
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp
index 0e3640d1f..703c0665f 100644
--- a/tools/gfx/vulkan/render-vk.cpp
+++ b/tools/gfx/vulkan/render-vk.cpp
@@ -138,38 +138,6 @@ public:
~VKDevice();
public:
- // Float16 features
- VkPhysicalDeviceFloat16Int8FeaturesKHR float16Features = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR};
- // 16 bit storage features
- VkPhysicalDevice16BitStorageFeatures storage16BitFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR};
- // AtomicInt64 features
- VkPhysicalDeviceShaderAtomicInt64FeaturesKHR atomicInt64Features = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR};
- // Atomic Float features
- VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomicFloatFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT};
- // Timeline Semaphore features
- VkPhysicalDeviceTimelineSemaphoreFeatures timelineFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES};
- // Extended dynamic state features
- VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extendedDynamicStateFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT};
- // Subgroup extended type features
- VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures shaderSubgroupExtendedTypeFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES};
- // Acceleration structure features
- VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR};
- // Ray query (inline ray-tracing) features
- VkPhysicalDeviceRayQueryFeaturesKHR rayQueryFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR};
- // Buffer device address features
- VkPhysicalDeviceBufferDeviceAddressFeatures bufferDeviceAddressFeatures = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES};
-
-public:
class Buffer
{
@@ -5234,99 +5202,104 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer)
{
m_queueAllocCount = 0;
- VkApplicationInfo applicationInfo = { VK_STRUCTURE_TYPE_APPLICATION_INFO };
- applicationInfo.pApplicationName = "slang-render-test";
- applicationInfo.pEngineName = "slang-render-test";
+ VkInstance instance = VK_NULL_HANDLE;
+ VkApplicationInfo applicationInfo = {VK_STRUCTURE_TYPE_APPLICATION_INFO};
+ applicationInfo.pApplicationName = "slang-gfx";
+ applicationInfo.pEngineName = "slang-gfx";
applicationInfo.apiVersion = VK_API_VERSION_1_1;
applicationInfo.engineVersion = 1;
applicationInfo.applicationVersion = 1;
- const char* instanceExtensions[] =
- {
- VK_KHR_SURFACE_EXTENSION_NAME,
- VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
+ for (int tryUseSurfaceExtensions = 1; tryUseSurfaceExtensions >= 0; tryUseSurfaceExtensions--)
+ {
+ Array<const char*, 4> instanceExtensions;
+ instanceExtensions.add(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
+ if (tryUseSurfaceExtensions)
+ {
+ instanceExtensions.add(VK_KHR_SURFACE_EXTENSION_NAME);
#if SLANG_WINDOWS_FAMILY
- VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
+ instanceExtensions.add(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
#elif defined(SLANG_ENABLE_XLIB)
- VK_KHR_XLIB_SURFACE_EXTENSION_NAME,
+ instanceExtensions.add(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
#endif
-
#if ENABLE_VALIDATION_LAYER
- VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
+ instanceExtensions.add(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
#endif
- };
-
- VkInstance instance = VK_NULL_HANDLE;
+ }
- VkInstanceCreateInfo instanceCreateInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO };
- instanceCreateInfo.pApplicationInfo = &applicationInfo;
- instanceCreateInfo.enabledExtensionCount = SLANG_COUNT_OF(instanceExtensions);
- instanceCreateInfo.ppEnabledExtensionNames = &instanceExtensions[0];
+ VkInstanceCreateInfo instanceCreateInfo = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO};
+ instanceCreateInfo.pApplicationInfo = &applicationInfo;
+ instanceCreateInfo.enabledExtensionCount = (uint32_t)instanceExtensions.getCount();
+ instanceCreateInfo.ppEnabledExtensionNames = &instanceExtensions[0];
- if (useValidationLayer)
- {
- // Depending on driver version, validation layer may or may not exist.
- // Newer drivers comes with "VK_LAYER_KHRONOS_validation", while older
- // drivers provide only the deprecated
- // "VK_LAYER_LUNARG_standard_validation" layer.
- // We will check what layers are available, and use the newer
- // "VK_LAYER_KHRONOS_validation" layer when possible.
- uint32_t layerCount;
- m_api.vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
-
- List<VkLayerProperties> availableLayers;
- availableLayers.setCount(layerCount);
- m_api.vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.getBuffer());
-
- const char* layerNames[] = { nullptr };
- for (auto& layer : availableLayers)
- {
- if (strncmp(
- layer.layerName,
- "VK_LAYER_KHRONOS_validation",
- sizeof("VK_LAYER_KHRONOS_validation")) == 0)
- {
- layerNames[0] = "VK_LAYER_KHRONOS_validation";
- break;
- }
- }
- // On older drivers, only "VK_LAYER_LUNARG_standard_validation" exists,
- // so we try to use it if we can't find "VK_LAYER_KHRONOS_validation".
- if (!layerNames[0])
+ if (useValidationLayer)
{
+ // Depending on driver version, validation layer may or may not exist.
+ // Newer drivers comes with "VK_LAYER_KHRONOS_validation", while older
+ // drivers provide only the deprecated
+ // "VK_LAYER_LUNARG_standard_validation" layer.
+ // We will check what layers are available, and use the newer
+ // "VK_LAYER_KHRONOS_validation" layer when possible.
+ uint32_t layerCount;
+ m_api.vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
+
+ List<VkLayerProperties> availableLayers;
+ availableLayers.setCount(layerCount);
+ m_api.vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.getBuffer());
+
+ const char* layerNames[] = {nullptr};
for (auto& layer : availableLayers)
{
if (strncmp(
- layer.layerName,
- "VK_LAYER_LUNARG_standard_validation",
- sizeof("VK_LAYER_LUNARG_standard_validation")) == 0)
+ layer.layerName,
+ "VK_LAYER_KHRONOS_validation",
+ sizeof("VK_LAYER_KHRONOS_validation")) == 0)
{
- layerNames[0] = "VK_LAYER_LUNARG_standard_validation";
+ layerNames[0] = "VK_LAYER_KHRONOS_validation";
break;
}
}
+ // On older drivers, only "VK_LAYER_LUNARG_standard_validation" exists,
+ // so we try to use it if we can't find "VK_LAYER_KHRONOS_validation".
+ if (!layerNames[0])
+ {
+ for (auto& layer : availableLayers)
+ {
+ if (strncmp(
+ layer.layerName,
+ "VK_LAYER_LUNARG_standard_validation",
+ sizeof("VK_LAYER_LUNARG_standard_validation")) == 0)
+ {
+ layerNames[0] = "VK_LAYER_LUNARG_standard_validation";
+ break;
+ }
+ }
+ }
+ if (layerNames[0])
+ {
+ instanceCreateInfo.enabledLayerCount = SLANG_COUNT_OF(layerNames);
+ instanceCreateInfo.ppEnabledLayerNames = layerNames;
+ }
}
- if (layerNames[0])
+ uint32_t apiVersionsToTry[] = {VK_API_VERSION_1_2, VK_API_VERSION_1_1, VK_API_VERSION_1_0};
+ for (auto apiVersion : apiVersionsToTry)
{
- instanceCreateInfo.enabledLayerCount = SLANG_COUNT_OF(layerNames);
- instanceCreateInfo.ppEnabledLayerNames = layerNames;
+ applicationInfo.apiVersion = apiVersion;
+ if (m_api.vkCreateInstance(&instanceCreateInfo, nullptr, &instance) == VK_SUCCESS)
+ {
+ break;
+ }
}
- }
- uint32_t apiVersionsToTry[] = {VK_API_VERSION_1_2, VK_API_VERSION_1_1, VK_API_VERSION_1_0};
- for (auto apiVersion : apiVersionsToTry)
- {
- applicationInfo.apiVersion = apiVersion;
- if (m_api.vkCreateInstance(&instanceCreateInfo, nullptr, &instance) == VK_SUCCESS)
- {
+ if (instance)
break;
- }
}
if (!instance)
return SLANG_FAIL;
+
SLANG_RETURN_ON_FAIL(m_api.initInstanceProcs(instance));
- if (useValidationLayer)
+ if (useValidationLayer && m_api.vkCreateDebugReportCallbackEXT)
{
VkDebugReportFlagsEXT debugFlags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT;
@@ -5410,6 +5383,8 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer)
const uint32_t majorVersion = VK_VERSION_MAJOR(basicProps.apiVersion);
const uint32_t minorVersion = VK_VERSION_MINOR(basicProps.apiVersion);
+ auto& extendedFeatures = m_api.m_extendedFeatures;
+
// API version check, can't use vkGetPhysicalDeviceProperties2 yet since this device might not support it
if (VK_MAKE_VERSION(majorVersion, minorVersion, 0) >= VK_API_VERSION_1_1 &&
m_api.vkGetPhysicalDeviceProperties2 &&
@@ -5419,57 +5394,77 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer)
VkPhysicalDeviceFeatures2 deviceFeatures2 = {};
deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+ // Inline uniform block
+ extendedFeatures.inlineUniformBlockFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.inlineUniformBlockFeatures;
+
// Buffer device address features
- bufferDeviceAddressFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &bufferDeviceAddressFeatures;
+ extendedFeatures.bufferDeviceAddressFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.bufferDeviceAddressFeatures;
// Ray query features
- rayQueryFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &rayQueryFeatures;
+ extendedFeatures.rayQueryFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.rayQueryFeatures;
// Acceleration structure features
- accelerationStructureFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &accelerationStructureFeatures;
+ extendedFeatures.accelerationStructureFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.accelerationStructureFeatures;
// Subgroup features
- shaderSubgroupExtendedTypeFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &shaderSubgroupExtendedTypeFeatures;
+ extendedFeatures.shaderSubgroupExtendedTypeFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.shaderSubgroupExtendedTypeFeatures;
// Extended dynamic states
- extendedDynamicStateFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &extendedDynamicStateFeatures;
+ extendedFeatures.extendedDynamicStateFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.extendedDynamicStateFeatures;
// Timeline Semaphore
- timelineFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &timelineFeatures;
+ extendedFeatures.timelineFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.timelineFeatures;
// Float16
- float16Features.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &float16Features;
+ extendedFeatures.float16Features.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.float16Features;
// 16-bit storage
- storage16BitFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &storage16BitFeatures;
+ extendedFeatures.storage16BitFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.storage16BitFeatures;
// Atomic64
- atomicInt64Features.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &atomicInt64Features;
+ extendedFeatures.atomicInt64Features.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.atomicInt64Features;
// Atomic Float
// To detect atomic float we need
// https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.html
- atomicFloatFeatures.pNext = deviceFeatures2.pNext;
- deviceFeatures2.pNext = &atomicFloatFeatures;
+ extendedFeatures.atomicFloatFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.atomicFloatFeatures;
m_api.vkGetPhysicalDeviceFeatures2(m_api.m_physicalDevice, &deviceFeatures2);
+ if (deviceFeatures2.features.shaderResourceMinLod)
+ {
+ m_features.add("shader-resource-min-lod");
+ }
+ if (deviceFeatures2.features.shaderFloat64)
+ {
+ m_features.add("double");
+ }
+ if (deviceFeatures2.features.shaderInt64)
+ {
+ m_features.add("int64");
+ }
+ if (deviceFeatures2.features.shaderInt16)
+ {
+ m_features.add("int16");
+ }
// If we have float16 features then enable
- if (float16Features.shaderFloat16)
+ if (extendedFeatures.float16Features.shaderFloat16)
{
// Link into the creation features
- float16Features.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &float16Features;
+ extendedFeatures.float16Features.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.float16Features;
// Add the Float16 extension
deviceExtensions.add(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME);
@@ -5478,11 +5473,11 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer)
m_features.add("half");
}
- if (storage16BitFeatures.storageBuffer16BitAccess)
+ if (extendedFeatures.storage16BitFeatures.storageBuffer16BitAccess)
{
// Link into the creation features
- storage16BitFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &storage16BitFeatures;
+ extendedFeatures.storage16BitFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.storage16BitFeatures;
// Add the 16-bit storage extension
deviceExtensions.add(VK_KHR_16BIT_STORAGE_EXTENSION_NAME);
@@ -5491,77 +5486,94 @@ Result VKDevice::initVulkanInstanceAndDevice(bool useValidationLayer)
m_features.add("16-bit-storage");
}
- if (atomicInt64Features.shaderBufferInt64Atomics)
+ if (extendedFeatures.atomicInt64Features.shaderBufferInt64Atomics)
{
// Link into the creation features
- atomicInt64Features.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &atomicInt64Features;
+ extendedFeatures.atomicInt64Features.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.atomicInt64Features;
deviceExtensions.add(VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME);
m_features.add("atomic-int64");
}
- if (atomicFloatFeatures.shaderBufferFloat32AtomicAdd)
+ if (extendedFeatures.atomicFloatFeatures.shaderBufferFloat32AtomicAdd)
{
// Link into the creation features
- atomicFloatFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &atomicFloatFeatures;
+ extendedFeatures.atomicFloatFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.atomicFloatFeatures;
deviceExtensions.add(VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME);
m_features.add("atomic-float");
}
- if (timelineFeatures.timelineSemaphore)
+ if (extendedFeatures.timelineFeatures.timelineSemaphore)
{
// Link into the creation features
- timelineFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &timelineFeatures;
+ extendedFeatures.timelineFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.timelineFeatures;
deviceExtensions.add(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME);
m_features.add("timeline-semaphore");
}
- if (extendedDynamicStateFeatures.extendedDynamicState)
+ if (extendedFeatures.extendedDynamicStateFeatures.extendedDynamicState)
{
// Link into the creation features
- extendedDynamicStateFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &extendedDynamicStateFeatures;
+ extendedFeatures.extendedDynamicStateFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.extendedDynamicStateFeatures;
deviceExtensions.add(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
m_features.add("extended-dynamic-states");
}
- if (shaderSubgroupExtendedTypeFeatures.shaderSubgroupExtendedTypes)
+ if (extendedFeatures.shaderSubgroupExtendedTypeFeatures.shaderSubgroupExtendedTypes)
{
- shaderSubgroupExtendedTypeFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &shaderSubgroupExtendedTypeFeatures;
+ extendedFeatures.shaderSubgroupExtendedTypeFeatures.pNext =
+ (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.shaderSubgroupExtendedTypeFeatures;
deviceExtensions.add(VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME);
m_features.add("shader-subgroup-extended-types");
}
- if (accelerationStructureFeatures.accelerationStructure)
+ if (extendedFeatures.accelerationStructureFeatures.accelerationStructure)
{
- accelerationStructureFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &accelerationStructureFeatures;
+ extendedFeatures.accelerationStructureFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.accelerationStructureFeatures;
deviceExtensions.add(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME);
deviceExtensions.add(VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME);
m_features.add("acceleration-structure");
}
- if (rayQueryFeatures.rayQuery)
+ if (extendedFeatures.rayQueryFeatures.rayQuery)
{
- rayQueryFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &rayQueryFeatures;
+ extendedFeatures.rayQueryFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.rayQueryFeatures;
deviceExtensions.add(VK_KHR_RAY_QUERY_EXTENSION_NAME);
m_features.add("ray-query");
m_features.add("ray-tracing");
}
- if (bufferDeviceAddressFeatures.bufferDeviceAddress)
+ if (extendedFeatures.bufferDeviceAddressFeatures.bufferDeviceAddress)
{
- bufferDeviceAddressFeatures.pNext = (void*)deviceCreateInfo.pNext;
- deviceCreateInfo.pNext = &bufferDeviceAddressFeatures;
+ extendedFeatures.bufferDeviceAddressFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.bufferDeviceAddressFeatures;
deviceExtensions.add(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME);
m_features.add("buffer-device-address");
}
+
+ if (extendedFeatures.inlineUniformBlockFeatures.inlineUniformBlock)
+ {
+ extendedFeatures.inlineUniformBlockFeatures.pNext = (void*)deviceCreateInfo.pNext;
+ deviceCreateInfo.pNext = &extendedFeatures.inlineUniformBlockFeatures;
+ deviceExtensions.add(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME);
+ m_features.add("inline-uniform-block");
+ }
+ }
+ if (m_api.m_module->isSoftware())
+ {
+ m_features.add("software-device");
+ }
+ else
+ {
+ m_features.add("hardware-device");
}
m_queueFamilyIndex = m_api.findQueue(VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT);
@@ -5604,6 +5616,7 @@ SlangResult VKDevice::initialize(const Desc& desc)
SLANG_RETURN_ON_FAIL(m_module.init());
SLANG_RETURN_ON_FAIL(m_api.initGlobalProcs(m_module));
descriptorSetAllocator.m_api = &m_api;
+
SLANG_RETURN_ON_FAIL(initVulkanInstanceAndDevice(ENABLE_VALIDATION_LAYER != 0));
{
VkQueue queue;
@@ -6088,6 +6101,14 @@ void VKDevice::_transitionImageLayout(VkImage image, VkFormat format, const Text
sourceStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
destinationStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
}
+ else if (oldLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL && newLayout == VK_IMAGE_LAYOUT_GENERAL)
+ {
+ barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
+ barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;
+
+ sourceStage = VK_PIPELINE_STAGE_TRANSFER_BIT;
+ destinationStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
+ }
else
{
assert(!"unsupported layout transition!");
@@ -6364,7 +6385,7 @@ Result VKDevice::createBufferResource(const IBufferResource::Desc& descIn, const
VkMemoryPropertyFlags reqMemoryProperties = 0;
VkBufferUsageFlags usage = _calcBufferUsageFlags(desc.allowedStates);
- if (bufferDeviceAddressFeatures.bufferDeviceAddress)
+ if (m_api.m_extendedFeatures.bufferDeviceAddressFeatures.bufferDeviceAddress)
{
usage |= VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
}
diff --git a/tools/gfx/vulkan/vk-api.h b/tools/gfx/vulkan/vk-api.h
index 5d044944f..746648470 100644
--- a/tools/gfx/vulkan/vk-api.h
+++ b/tools/gfx/vulkan/vk-api.h
@@ -191,6 +191,44 @@ namespace gfx {
#define VK_API_DECLARE_PROC(NAME) PFN_##NAME NAME = nullptr;
+
+struct VulkanExtendedFeatureProperties
+{
+ // Float16 features
+ VkPhysicalDeviceFloat16Int8FeaturesKHR float16Features = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR};
+ // 16 bit storage features
+ VkPhysicalDevice16BitStorageFeatures storage16BitFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR};
+ // AtomicInt64 features
+ VkPhysicalDeviceShaderAtomicInt64FeaturesKHR atomicInt64Features = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR};
+ // Atomic Float features
+ VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomicFloatFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT};
+ // Timeline Semaphore features
+ VkPhysicalDeviceTimelineSemaphoreFeatures timelineFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES};
+ // Extended dynamic state features
+ VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extendedDynamicStateFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT};
+ // Subgroup extended type features
+ VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures shaderSubgroupExtendedTypeFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES};
+ // Acceleration structure features
+ VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR};
+ // Ray query (inline ray-tracing) features
+ VkPhysicalDeviceRayQueryFeaturesKHR rayQueryFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR};
+ // Buffer device address features
+ VkPhysicalDeviceBufferDeviceAddressFeatures bufferDeviceAddressFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES};
+ // Inline uniform block features
+ VkPhysicalDeviceInlineUniformBlockFeaturesEXT inlineUniformBlockFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES};
+};
+
struct VulkanApi
{
VK_API_ALL_PROCS(VK_API_DECLARE_PROC)
@@ -232,6 +270,7 @@ struct VulkanApi
VkPhysicalDeviceProperties m_deviceProperties;
VkPhysicalDeviceFeatures m_deviceFeatures;
VkPhysicalDeviceMemoryProperties m_deviceMemoryProperties;
+ VulkanExtendedFeatureProperties m_extendedFeatures;
};
} // renderer_test
diff --git a/tools/gfx/vulkan/vk-descriptor-allocator.cpp b/tools/gfx/vulkan/vk-descriptor-allocator.cpp
index c01e37642..d5e9b5863 100644
--- a/tools/gfx/vulkan/vk-descriptor-allocator.cpp
+++ b/tools/gfx/vulkan/vk-descriptor-allocator.cpp
@@ -6,23 +6,29 @@ namespace gfx
VkDescriptorPool DescriptorSetAllocator::newPool()
{
VkDescriptorPoolCreateInfo descriptorPoolInfo = {VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO};
- VkDescriptorPoolSize poolSizes[] = {
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLER, 1024},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1024},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 4096},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1024},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 256},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 256},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 4096},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 4096},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 4096},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 4096},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 16},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, 16},
- VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 256}};
+ Slang::Array<VkDescriptorPoolSize, 32> poolSizes;
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLER, 1024});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1024});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 4096});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1024});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 256});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 256});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 4096});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 4096});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 4096});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 4096});
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 16});
+ if (m_api->m_extendedFeatures.inlineUniformBlockFeatures.inlineUniformBlock)
+ {
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, 16});
+ }
+ if (m_api->m_extendedFeatures.accelerationStructureFeatures.accelerationStructure)
+ {
+ poolSizes.add(VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 256});
+ }
descriptorPoolInfo.maxSets = 4096;
- descriptorPoolInfo.poolSizeCount = sizeof(poolSizes) / sizeof(VkDescriptorPoolSize);
- descriptorPoolInfo.pPoolSizes = poolSizes;
+ descriptorPoolInfo.poolSizeCount = (uint32_t)poolSizes.getCount();
+ descriptorPoolInfo.pPoolSizes = poolSizes.getBuffer();
descriptorPoolInfo.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
VkDescriptorPool descriptorPool = VK_NULL_HANDLE;
diff --git a/tools/gfx/vulkan/vk-module.cpp b/tools/gfx/vulkan/vk-module.cpp
index 4e92a3d2c..985df1a7b 100644
--- a/tools/gfx/vulkan/vk-module.cpp
+++ b/tools/gfx/vulkan/vk-module.cpp
@@ -1,4 +1,4 @@
-// module.cpp
+// module.cpp
#include "vk-module.h"
#include <stdlib.h>
@@ -37,6 +37,18 @@ Slang::Result VulkanModule::init()
if (!m_module)
{
+ dynamicLibraryName = "vk_swiftshader";
+#if SLANG_WINDOWS_FAMILY
+ HMODULE swiftShaderModule = ::LoadLibraryA(dynamicLibraryName);
+ m_module = (void*)swiftShaderModule;
+#else
+ m_module = dlopen(dynamicLibraryName, RTLD_NOW);
+#endif
+ m_isSoftware = true;
+ }
+
+ if (!m_module)
+ {
fprintf(stderr, "error: failed load '%s'\n", dynamicLibraryName);
return SLANG_FAIL;
}
diff --git a/tools/gfx/vulkan/vk-module.h b/tools/gfx/vulkan/vk-module.h
index 7ddd5da45..eb1b3d570 100644
--- a/tools/gfx/vulkan/vk-module.h
+++ b/tools/gfx/vulkan/vk-module.h
@@ -25,6 +25,9 @@ struct VulkanModule
/// Get a function by name
PFN_vkVoidFunction getFunction(const char* name) const;
+ /// true if using a software Vulkan implementation.
+ bool isSoftware() const { return m_isSoftware; }
+
/// Initialize
Slang::Result init();
/// Destroy
@@ -33,8 +36,9 @@ struct VulkanModule
/// Dtor
~VulkanModule() { destroy(); }
- protected:
- void* m_module = nullptr;
+ protected:
+ void* m_module = nullptr;
+ bool m_isSoftware = false;
};
} // renderer_test