From d59bf375f7af03a5f0f27779a1455feb489f7293 Mon Sep 17 00:00:00 2001 From: Spodi Date: Sat, 25 Oct 2025 20:20:36 +0200 Subject: [PATCH 1/4] Fix DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH Fix D3D Debug layer complaining about: D3D11 ERROR: ID3D11DeviceContext::Dispatch: The Shader Resource View in slot 0 of the Compute Shader unit has a sample count of 4, but the shader expects the sample count to be 2. This is invalid if the shader actually uses the view (e.g. it is not skipped due to shader code branching). [ EXECUTION ERROR #421: DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH] --- src/fast/backends/gfx_direct3d11.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fast/backends/gfx_direct3d11.cpp b/src/fast/backends/gfx_direct3d11.cpp index 1077d2a42..8de3f9096 100644 --- a/src/fast/backends/gfx_direct3d11.cpp +++ b/src/fast/backends/gfx_direct3d11.cpp @@ -236,7 +236,7 @@ void CSMain(uint3 DTid : SV_DispatchThreadID) { const char* shader_source_msaa = R"( sampler my_sampler : register(s0); -Texture2DMS tex : register(t0); +Texture2DMS tex : register(t0); StructuredBuffer coord : register(t1); RWStructuredBuffer output : register(u0); From 07bd0fb6bce456a02206dc9b4018e5734762e476 Mon Sep 17 00:00:00 2001 From: Spodi Date: Sat, 25 Oct 2025 21:57:21 +0200 Subject: [PATCH 2/4] add ThrowWithMessage --- include/fast/backends/gfx_dxgi.h | 1 + src/fast/backends/gfx_dxgi.cpp | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/include/fast/backends/gfx_dxgi.h b/include/fast/backends/gfx_dxgi.h index fb720c0ca..608b766de 100644 --- a/include/fast/backends/gfx_dxgi.h +++ b/include/fast/backends/gfx_dxgi.h @@ -116,6 +116,7 @@ class GfxWindowBackendDXGI final : public GfxWindowBackend { #ifdef DECLARE_GFX_DXGI_FUNCTIONS void ThrowIfFailed(HRESULT res); void ThrowIfFailed(HRESULT res, HWND h_wnd, const char* message); +void ThrowWithMessage(HWND h_wnd, const char* message); #endif #endif diff --git a/src/fast/backends/gfx_dxgi.cpp b/src/fast/backends/gfx_dxgi.cpp index ac45102ba..7308fea62 100644 --- a/src/fast/backends/gfx_dxgi.cpp +++ b/src/fast/backends/gfx_dxgi.cpp @@ -1089,5 +1089,11 @@ void ThrowIfFailed(HRESULT res, HWND h_wnd, const char* message) { throw res; } } +void ThrowWithMessage(HWND h_wnd, const char* message) { + char full_message[256]; + sprintf(full_message, message); + MessageBoxA(h_wnd, full_message, "Error", MB_OK | MB_ICONERROR); + throw; +} #endif From faddc32e5061d82108cae0ec351dd50f7d8cec3d Mon Sep 17 00:00:00 2001 From: Spodi Date: Sat, 25 Oct 2025 21:59:02 +0200 Subject: [PATCH 3/4] check GPU for ComputeShader support Throw a slightly more useful message if not supported --- src/fast/backends/gfx_direct3d11.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/fast/backends/gfx_direct3d11.cpp b/src/fast/backends/gfx_direct3d11.cpp index 8de3f9096..2b9badb73 100644 --- a/src/fast/backends/gfx_direct3d11.cpp +++ b/src/fast/backends/gfx_direct3d11.cpp @@ -221,6 +221,12 @@ void GfxRenderingAPIDX11::Init() { mWindowBackend->GetWindowHandle(), "Failed to create per-draw constant buffer."); // Create compute shader that can be used to retrieve depth buffer values + D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS features; + mDevice->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &features, + sizeof(D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS)); + if (features.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x == false) { + ThrowWithMessage(mWindowBackend->GetWindowHandle(), "D3D device doesn't support compute shaders 4.0 or greater."); + } const char* shader_source = R"( sampler my_sampler : register(s0); From 8eb31300bd8bc602d2f550a8dab2337b6d1e44a6 Mon Sep 17 00:00:00 2001 From: Spodi Date: Sat, 25 Oct 2025 22:19:51 +0200 Subject: [PATCH 4/4] clang-format --- src/fast/backends/gfx_direct3d11.cpp | 3 ++- src/fast/backends/gfx_dxgi.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/fast/backends/gfx_direct3d11.cpp b/src/fast/backends/gfx_direct3d11.cpp index 2b9badb73..aadc7d9e4 100644 --- a/src/fast/backends/gfx_direct3d11.cpp +++ b/src/fast/backends/gfx_direct3d11.cpp @@ -225,7 +225,8 @@ void GfxRenderingAPIDX11::Init() { mDevice->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &features, sizeof(D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS)); if (features.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x == false) { - ThrowWithMessage(mWindowBackend->GetWindowHandle(), "D3D device doesn't support compute shaders 4.0 or greater."); + ThrowWithMessage(mWindowBackend->GetWindowHandle(), + "D3D device doesn't support compute shaders 4.0 or greater."); } const char* shader_source = R"( diff --git a/src/fast/backends/gfx_dxgi.cpp b/src/fast/backends/gfx_dxgi.cpp index 7308fea62..7cf1a75d5 100644 --- a/src/fast/backends/gfx_dxgi.cpp +++ b/src/fast/backends/gfx_dxgi.cpp @@ -1090,10 +1090,10 @@ void ThrowIfFailed(HRESULT res, HWND h_wnd, const char* message) { } } void ThrowWithMessage(HWND h_wnd, const char* message) { - char full_message[256]; - sprintf(full_message, message); - MessageBoxA(h_wnd, full_message, "Error", MB_OK | MB_ICONERROR); - throw; + char full_message[256]; + sprintf(full_message, message); + MessageBoxA(h_wnd, full_message, "Error", MB_OK | MB_ICONERROR); + throw; } #endif