From 70007d0794970efdedc20a59b656b60acb7568de Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 5 Jun 2019 17:51:43 +0100 Subject: [PATCH] Don't consider interim position builtins to be projected/rasterized * Even if the VS outputs to the position builtin, if there's a tessellation or geometry shader consuming it that doesn't mean much. --- qrenderdoc/Windows/BufferViewer.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index d6c6f52aa..9d3b4f47a 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -2610,6 +2610,11 @@ void BufferViewer::UI_CalculateMeshFormats() m_PostVSPosition.vertexByteOffset += vsoutConfig.columns[elIdx].offset; m_PostVSPosition.unproject = vsoutConfig.columns[elIdx].systemValue == ShaderBuiltin::Position; + // if geometry/tessellation is enabled, don't unproject VS output data + if(m_Ctx.CurPipelineState().GetShader(ShaderStage::Tess_Eval) != ResourceId() || + m_Ctx.CurPipelineState().GetShader(ShaderStage::Geometry) != ResourceId()) + m_PostVSPosition.unproject = false; + elIdx = m_ModelVSOut->secondaryColumn(); if(elIdx >= 0 && elIdx < vsoutConfig.columns.count()) @@ -2965,6 +2970,12 @@ bool BufferViewer::isCurrentRasterOut() BufferItemModel *model = currentBufferModel(); int stage = currentStageIndex(); + // if geometry/tessellation is enabled, only the GS out stage is rasterized output + if((m_Ctx.CurPipelineState().GetShader(ShaderStage::Tess_Eval) != ResourceId() || + m_Ctx.CurPipelineState().GetShader(ShaderStage::Geometry) != ResourceId()) && + m_CurStage != MeshDataStage::GSOut) + return false; + if(model) { int posEl = model->posColumn();