summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraidanfnv <aidanf@nvidia.com>2025-04-11 18:47:32 -0700
committerGitHub <noreply@github.com>2025-04-12 01:47:32 +0000
commit28006e36d92f7709f7c5ad84d50d1c5584c42508 (patch)
treedb0044d7ff68189eda7023f91ffe497221b22ba2
parent6dd5bd52e3a5fb721776224e5e9a390d626faf26 (diff)
Add slang-test check for D3D11 double support (#6761)
Fixes #6171 This commit adds logic for reporting double support to the d3d11 backend, for running tests on GPUs that do not support D3D11_FEATURE_DOUBLES, and add checks for that support to tests that require the feature.
-rw-r--r--tests/bugs/dxbc-double-problem.slang2
-rw-r--r--tests/bugs/frexp-double.slang2
-rw-r--r--tests/compute/transcendental-double.slang2
-rw-r--r--tests/hlsl-intrinsic/bit-cast-double.slang2
-rw-r--r--tests/hlsl-intrinsic/classify-double.slang2
-rw-r--r--tests/hlsl-intrinsic/scalar-double-simple.slang2
-rw-r--r--tools/gfx/d3d11/d3d11-device.cpp13
7 files changed, 19 insertions, 6 deletions
diff --git a/tests/bugs/dxbc-double-problem.slang b/tests/bugs/dxbc-double-problem.slang
index 793a4b9d0..1cbf35f35 100644
--- a/tests/bugs/dxbc-double-problem.slang
+++ b/tests/bugs/dxbc-double-problem.slang
@@ -1,4 +1,4 @@
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -output-using-type -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -output-using-type -shaderobj -render-feature double
//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
diff --git a/tests/bugs/frexp-double.slang b/tests/bugs/frexp-double.slang
index e85f23825..97b944a6a 100644
--- a/tests/bugs/frexp-double.slang
+++ b/tests/bugs/frexp-double.slang
@@ -1,4 +1,4 @@
-//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-output-using-type
+//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-output-using-type -render-feature double
//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -output-using-type
//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -output-using-type
//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -output-using-type -render-feature double
diff --git a/tests/compute/transcendental-double.slang b/tests/compute/transcendental-double.slang
index 025262429..dc35eb565 100644
--- a/tests/compute/transcendental-double.slang
+++ b/tests/compute/transcendental-double.slang
@@ -1,6 +1,6 @@
//TEST(compute):COMPARE_COMPUTE:-cuda -output-using-type -shaderobj
//TEST(compute):COMPARE_COMPUTE:-cpu -output-using-type -shaderobj
-//TEST(compute):COMPARE_COMPUTE: -output-using-type -shaderobj
+//TEST(compute):COMPARE_COMPUTE: -output-using-type -shaderobj -render-feature double
// Cos values are all 0 on D3d12(!)
//DISABLE_TEST(compute):COMPARE_COMPUTE: -dx12 -output-using-type -shaderobj
diff --git a/tests/hlsl-intrinsic/bit-cast-double.slang b/tests/hlsl-intrinsic/bit-cast-double.slang
index bacaaee03..4b1876a19 100644
--- a/tests/hlsl-intrinsic/bit-cast-double.slang
+++ b/tests/hlsl-intrinsic/bit-cast-double.slang
@@ -1,5 +1,5 @@
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-slang -compute -cpu -shaderobj
-//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHK):-slang -compute -dx11 -shaderobj
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHK):-slang -compute -dx11 -shaderobj -render-feature double
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHK):-slang -compute -dx12 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-slang -vk -compute -shaderobj -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-slang -cuda -compute -shaderobj
diff --git a/tests/hlsl-intrinsic/classify-double.slang b/tests/hlsl-intrinsic/classify-double.slang
index 6cdc7dba5..839f54727 100644
--- a/tests/hlsl-intrinsic/classify-double.slang
+++ b/tests/hlsl-intrinsic/classify-double.slang
@@ -1,5 +1,5 @@
//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -render-feature double
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -render-feature double
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
diff --git a/tests/hlsl-intrinsic/scalar-double-simple.slang b/tests/hlsl-intrinsic/scalar-double-simple.slang
index 1e9c25351..57049bbe7 100644
--- a/tests/hlsl-intrinsic/scalar-double-simple.slang
+++ b/tests/hlsl-intrinsic/scalar-double-simple.slang
@@ -2,7 +2,7 @@
// For simplicity we are not going to use any intrinsics, and not use any resources that use double
//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -render-feature double
//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 -render-feature double
diff --git a/tools/gfx/d3d11/d3d11-device.cpp b/tools/gfx/d3d11/d3d11-device.cpp
index ab4670a17..b101c6d13 100644
--- a/tools/gfx/d3d11/d3d11-device.cpp
+++ b/tools/gfx/d3d11/d3d11-device.cpp
@@ -267,6 +267,19 @@ SlangResult DeviceImpl::initialize(const Desc& desc)
#endif
}
+ // Check double precision support
+ {
+ D3D11_FEATURE_DATA_DOUBLES doublePrecisionFeature = {};
+ if (SUCCEEDED(m_device->CheckFeatureSupport(
+ D3D11_FEATURE_DOUBLES,
+ &doublePrecisionFeature,
+ sizeof(doublePrecisionFeature))) &&
+ doublePrecisionFeature.DoublePrecisionFloatShaderOps)
+ {
+ m_features.add("double");
+ }
+ }
+
{
// Create a TIMESTAMP_DISJOINT query object to query/update frequency info.
D3D11_QUERY_DESC disjointQueryDesc = {};