From 2a0ddea474b5d67a93d883c5037b979e31f68b00 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 2 Jul 2019 10:41:17 +0100 Subject: [PATCH] Fall back to solid pipeline if lit mesh render pipeline is not available * This is possible for point list topologies --- renderdoc/driver/d3d12/d3d12_rendermesh.cpp | 7 ++++++- renderdoc/driver/vulkan/vk_rendermesh.cpp | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_rendermesh.cpp b/renderdoc/driver/d3d12/d3d12_rendermesh.cpp index 742059528..906f594ab 100644 --- a/renderdoc/driver/d3d12/d3d12_rendermesh.cpp +++ b/renderdoc/driver/d3d12/d3d12_rendermesh.cpp @@ -411,7 +411,12 @@ void D3D12Replay::RenderMesh(uint32_t eventId, const std::vector &se { default: case SolidShade::Solid: pipe = cache.pipes[MeshDisplayPipelines::ePipe_SolidDepth]; break; - case SolidShade::Lit: pipe = cache.pipes[MeshDisplayPipelines::ePipe_Lit]; break; + case SolidShade::Lit: + pipe = cache.pipes[MeshDisplayPipelines::ePipe_Lit]; + // point list topologies don't have lighting obvious, just render them as solid + if(!pipe) + pipe = cache.pipes[MeshDisplayPipelines::ePipe_SolidDepth]; + break; case SolidShade::Secondary: pipe = cache.pipes[MeshDisplayPipelines::ePipe_Secondary]; break; } diff --git a/renderdoc/driver/vulkan/vk_rendermesh.cpp b/renderdoc/driver/vulkan/vk_rendermesh.cpp index daa1f1267..826fc2597 100644 --- a/renderdoc/driver/vulkan/vk_rendermesh.cpp +++ b/renderdoc/driver/vulkan/vk_rendermesh.cpp @@ -340,7 +340,7 @@ MeshDisplayPipelines VulkanDebugManager::CacheMeshDisplayPipelines(VkPipelineLay stages[2].stage = VK_SHADER_STAGE_GEOMETRY_BIT; pipeInfo.stageCount = 3; - if(stages[2].module != VK_NULL_HANDLE) + if(stages[2].module != VK_NULL_HANDLE && ia.topology != VK_PRIMITIVE_TOPOLOGY_POINT_LIST) { vkr = vt->CreateGraphicsPipelines(Unwrap(m_Device), VK_NULL_HANDLE, 1, &pipeInfo, NULL, &cache.pipes[MeshDisplayPipelines::ePipe_Lit]); @@ -585,7 +585,12 @@ void VulkanReplay::RenderMesh(uint32_t eventId, const std::vector &s { default: case SolidShade::Solid: pipe = cache.pipes[MeshDisplayPipelines::ePipe_SolidDepth]; break; - case SolidShade::Lit: pipe = cache.pipes[MeshDisplayPipelines::ePipe_Lit]; break; + case SolidShade::Lit: + pipe = cache.pipes[MeshDisplayPipelines::ePipe_Lit]; + // point list topologies don't have lighting obvious, just render them as solid + if(!pipe) + pipe = cache.pipes[MeshDisplayPipelines::ePipe_SolidDepth]; + break; case SolidShade::Secondary: pipe = cache.pipes[MeshDisplayPipelines::ePipe_Secondary]; break; }