fix for depth mismatch issue on Intel gpu with provoking index buffer #1279

This commit is contained in:
Turánszki János
2025-11-03 11:16:31 +01:00
parent d0c6f9c9ec
commit 07486015ce
8 changed files with 17 additions and 7 deletions
+9
View File
@@ -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
@@ -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"
@@ -1,4 +1,3 @@
#define OBJECTSHADER_COMPILE_VS
#define OBJECTSHADER_LAYOUT_PREPASS
#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER
#include "objectHF.hlsli"
@@ -1,4 +1,3 @@
#define OBJECTSHADER_COMPILE_VS
#define OBJECTSHADER_LAYOUT_PREPASS_TEX
#define OBJECTSHADER_USE_PROVOKING_INDEX_BUFFER
#include "objectHF.hlsli"
@@ -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"
@@ -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"
+7 -1
View File
@@ -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)
{
+1 -1
View File
@@ -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);