From 07486015ce6b95fdcf9f6b45223cbbd59f2f1fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Mon, 3 Nov 2025 11:16:31 +0100 Subject: [PATCH] fix for depth mismatch issue on Intel gpu with provoking index buffer #1279 --- WickedEngine/shaders/objectHF.hlsli | 9 +++++++++ WickedEngine/shaders/objectVS_common_tessellation.hlsl | 1 - WickedEngine/shaders/objectVS_prepass.hlsl | 1 - WickedEngine/shaders/objectVS_prepass_alphatest.hlsl | 1 - .../shaders/objectVS_prepass_alphatest_tessellation.hlsl | 1 - WickedEngine/shaders/objectVS_prepass_tessellation.hlsl | 1 - WickedEngine/wiRenderer.cpp | 8 +++++++- WickedEngine/wiVersion.cpp | 2 +- 8 files changed, 17 insertions(+), 7 deletions(-) diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index 379de1014..a547daf51 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -103,6 +103,9 @@ PUSHCONSTANT(push, ObjectPushConstants); #define PREPASS #define OBJECTSHADER_USE_CLIPPLANE #define OBJECTSHADER_USE_INSTANCEINDEX +#ifndef OBJECTSHADER_COMPILE_MS +#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER +#endif // OBJECTSHADER_COMPILE_MS #endif // OBJECTSHADER_LAYOUT_SHADOW #ifdef OBJECTSHADER_LAYOUT_PREPASS_TEX @@ -111,6 +114,9 @@ PUSHCONSTANT(push, ObjectPushConstants); #define OBJECTSHADER_USE_UVSETS #define OBJECTSHADER_USE_DITHERING #define OBJECTSHADER_USE_INSTANCEINDEX +#ifndef OBJECTSHADER_COMPILE_MS +#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER +#endif // OBJECTSHADER_COMPILE_MS #endif // OBJECTSHADER_LAYOUT_SHADOW_TEX #ifdef OBJECTSHADER_LAYOUT_COMMON @@ -122,6 +128,9 @@ PUSHCONSTANT(push, ObjectPushConstants); #define OBJECTSHADER_USE_EMISSIVE #define OBJECTSHADER_USE_INSTANCEINDEX #define OBJECTSHADER_USE_COMMON +#ifndef OBJECTSHADER_COMPILE_MS +#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER // even though primitiveID is not exported, color pass required to have same primitive order on Intel GPU, otherwise depth mismatch occurs +#endif // OBJECTSHADER_COMPILE_MS #endif // OBJECTSHADER_LAYOUT_COMMON struct VertexInput diff --git a/WickedEngine/shaders/objectVS_common_tessellation.hlsl b/WickedEngine/shaders/objectVS_common_tessellation.hlsl index 4532052b1..e98c2a37e 100644 --- a/WickedEngine/shaders/objectVS_common_tessellation.hlsl +++ b/WickedEngine/shaders/objectVS_common_tessellation.hlsl @@ -1,5 +1,4 @@ #define OBJECTSHADER_COMPILE_VS #define OBJECTSHADER_LAYOUT_COMMON #define OBJECTSHADER_USE_NOCAMERA -#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER #include "objectHF.hlsli" diff --git a/WickedEngine/shaders/objectVS_prepass.hlsl b/WickedEngine/shaders/objectVS_prepass.hlsl index b201c32cf..46363f750 100644 --- a/WickedEngine/shaders/objectVS_prepass.hlsl +++ b/WickedEngine/shaders/objectVS_prepass.hlsl @@ -1,4 +1,3 @@ #define OBJECTSHADER_COMPILE_VS #define OBJECTSHADER_LAYOUT_PREPASS -#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER #include "objectHF.hlsli" diff --git a/WickedEngine/shaders/objectVS_prepass_alphatest.hlsl b/WickedEngine/shaders/objectVS_prepass_alphatest.hlsl index 682fd3df8..eb28e2a95 100644 --- a/WickedEngine/shaders/objectVS_prepass_alphatest.hlsl +++ b/WickedEngine/shaders/objectVS_prepass_alphatest.hlsl @@ -1,4 +1,3 @@ #define OBJECTSHADER_COMPILE_VS #define OBJECTSHADER_LAYOUT_PREPASS_TEX -#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER #include "objectHF.hlsli" diff --git a/WickedEngine/shaders/objectVS_prepass_alphatest_tessellation.hlsl b/WickedEngine/shaders/objectVS_prepass_alphatest_tessellation.hlsl index fe199202c..6af689c42 100644 --- a/WickedEngine/shaders/objectVS_prepass_alphatest_tessellation.hlsl +++ b/WickedEngine/shaders/objectVS_prepass_alphatest_tessellation.hlsl @@ -2,6 +2,5 @@ #define OBJECTSHADER_LAYOUT_PREPASS_TEX #define OBJECTSHADER_USE_NOCAMERA #define OBJECTSHADER_USE_NORMAL -#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER #include "objectHF.hlsli" diff --git a/WickedEngine/shaders/objectVS_prepass_tessellation.hlsl b/WickedEngine/shaders/objectVS_prepass_tessellation.hlsl index ad907338e..08bbd402f 100644 --- a/WickedEngine/shaders/objectVS_prepass_tessellation.hlsl +++ b/WickedEngine/shaders/objectVS_prepass_tessellation.hlsl @@ -2,5 +2,4 @@ #define OBJECTSHADER_LAYOUT_PREPASS_TEX #define OBJECTSHADER_USE_NOCAMERA #define OBJECTSHADER_USE_NORMAL -#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER #include "objectHF.hlsli" diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 78d96ecc9..d61ab504d 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -3188,8 +3188,14 @@ void RenderMeshes( // Notes on provoking index buffer: // Normally it's used for primitiveID generation, so it would be only used in PREPASS // PREPASS_DEPTHONLY doesn't use separate shader variants, so it will also use provoking index buffer + // RENDERPASS_MAIN requires it to fix depth mismatch only on Intel GPU between prepass and color passes // tessellation requires it to match same primitive order between prepass and color pass to have exact same tessellation - const bool provokingIBRequired = renderPass == RENDERPASS_PREPASS || renderPass == RENDERPASS_PREPASS_DEPTHONLY || tessellatorRequested; + const bool provokingIBRequired = + renderPass == RENDERPASS_PREPASS || + renderPass == RENDERPASS_PREPASS_DEPTHONLY || + renderPass == RENDERPASS_MAIN || + tessellatorRequested + ; if (forwardLightmaskRequest) { diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index d8834c2ca..062646a24 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 850; + const int revision = 851; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);