From 0c410d40efa2cb75a187b22dae36788b0b21eab8 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 19 Jan 2021 17:20:15 +0000 Subject: [PATCH] Fix issue showing whole pass in mesh viewer with inverse view height * In particular this was breaking if not all draws in the pass used an inverse view (unlikely in practice, but comes up in our tests). --- renderdoc/data/glsl/glsl_ubos.h | 3 ++- renderdoc/data/glsl/mesh.vert | 4 ++++ renderdoc/driver/vulkan/vk_overlay.cpp | 3 ++- renderdoc/driver/vulkan/vk_rendermesh.cpp | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/renderdoc/data/glsl/glsl_ubos.h b/renderdoc/data/glsl/glsl_ubos.h index c2cc0dabc..835a9f2e5 100644 --- a/renderdoc/data/glsl/glsl_ubos.h +++ b/renderdoc/data/glsl/glsl_ubos.h @@ -39,7 +39,8 @@ BINDING(0) uniform MeshUBOData uint homogenousInput; vec2 pointSpriteSize; uint rawoutput; - vec3 padding; + uint flipY; + vec2 padding; } INST_NAME(Mesh); diff --git a/renderdoc/data/glsl/mesh.vert b/renderdoc/data/glsl/mesh.vert index 42a82a004..1958f42e8 100644 --- a/renderdoc/data/glsl/mesh.vert +++ b/renderdoc/data/glsl/mesh.vert @@ -67,6 +67,10 @@ void main(void) #ifdef VULKAN // GL->VK conventions gl_Position.y = -gl_Position.y; + if(Mesh.flipY == 1) + { + gl_Position.y = -gl_Position.y; + } if(Mesh.rawoutput == 0) { gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0; diff --git a/renderdoc/driver/vulkan/vk_overlay.cpp b/renderdoc/driver/vulkan/vk_overlay.cpp index 8030d9e6c..72604f041 100644 --- a/renderdoc/driver/vulkan/vk_overlay.cpp +++ b/renderdoc/driver/vulkan/vk_overlay.cpp @@ -2315,7 +2315,8 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D data->pointSpriteSize = Vec2f(0.0f, 0.0f); data->displayFormat = 0; data->rawoutput = 1; - data->padding = Vec3f(); + data->flipY = 0; + data->padding = Vec2f(); m_MeshRender.UBO.Unmap(); uint32_t viewOffs = 0; diff --git a/renderdoc/driver/vulkan/vk_rendermesh.cpp b/renderdoc/driver/vulkan/vk_rendermesh.cpp index 3863e03d3..9d99bf312 100644 --- a/renderdoc/driver/vulkan/vk_rendermesh.cpp +++ b/renderdoc/driver/vulkan/vk_rendermesh.cpp @@ -528,6 +528,7 @@ void VulkanReplay::RenderMesh(uint32_t eventId, const rdcarray &seco data->pointSpriteSize = Vec2f(0.0f, 0.0f); data->displayFormat = MESHDISPLAY_SOLID; data->rawoutput = 0; + data->flipY = (cfg.position.flipY == fmt.flipY) ? 0 : 1; m_MeshRender.UBO.Unmap();