fix for depth mismatch issue on Intel gpu with provoking index buffer #1279
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user