From cc0069e72fa803a1ec3efd58d8a90c7347693b61 Mon Sep 17 00:00:00 2001 From: Wade Brainerd Date: Tue, 26 Mar 2019 17:11:47 -0400 Subject: [PATCH] Fix Vulkan mesh output for tessellated quads When selecting a draw with a tessellation evaluation shader using layout(quads), RenderDoc would emit an "Unexpected output topology" error. Additional changes: * Fixes a typo in the VK_EXT_transform_feedback name in various debug prints. * Renames the "GS Out" 3D View tab in the Mesh Viewer to "GS/DS Out", to match the corresponding table. This affects all APIs. --- qrenderdoc/Windows/BufferViewer.ui | 2 +- renderdoc/driver/shaders/spirv/spirv_disassemble.cpp | 4 ++++ renderdoc/driver/vulkan/vk_postvs.cpp | 2 +- renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp | 4 ++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/qrenderdoc/Windows/BufferViewer.ui b/qrenderdoc/Windows/BufferViewer.ui index 4e6453494..1b0c92fc0 100644 --- a/qrenderdoc/Windows/BufferViewer.ui +++ b/qrenderdoc/Windows/BufferViewer.ui @@ -568,7 +568,7 @@ - GS Out + GS/DS Out diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index 0997e21a0..9d03b9e9d 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -4659,6 +4659,10 @@ void SPVModule::MakeReflection(GraphicsAPI sourceAPI, ShaderStage stage, const s { patchData.outTopo = Topology::TriangleStrip; } + else if(mode.mode == spv::ExecutionModeQuads) + { + patchData.outTopo = Topology::TriangleList; + } else if(mode.mode == spv::ExecutionModeDepthGreater) { for(SigParameter &sig : outputs) diff --git a/renderdoc/driver/vulkan/vk_postvs.cpp b/renderdoc/driver/vulkan/vk_postvs.cpp index 23216f0a6..65a63a8ac 100644 --- a/renderdoc/driver/vulkan/vk_postvs.cpp +++ b/renderdoc/driver/vulkan/vk_postvs.cpp @@ -2758,7 +2758,7 @@ void VulkanReplay::FetchTessGSOut(uint32_t eventId) if(!ObjDisp(m_Device)->CmdBeginTransformFeedbackEXT) { RDCLOG( - "VK_EXT_transform_feedback_extension not available, can't fetch tessellation/geometry " + "VK_EXT_transform_feedback extension not available, can't fetch tessellation/geometry " "output"); return; } diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index a3b2ade09..958df6115 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -1173,12 +1173,12 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi if(supportedExtensions.find(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME) != supportedExtensions.end()) { Extensions.push_back(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME); - RDCLOG("Enabling VK_EXT_transform_feedback_extension"); + RDCLOG("Enabling VK_EXT_transform_feedback extension"); } else { RDCWARN( - "VK_EXT_transform_feedback_extension not available, mesh output from " + "VK_EXT_transform_feedback extension not available, mesh output from " "geometry/tessellation stages will not be available"); }