mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-08 07:41:12 +00:00
Don't use pre-created pipeline for viewport/scissor overlay rendering
* This allows us to use the per-overlay renderpass which includes multiview properties.
This commit is contained in:
@@ -4637,12 +4637,9 @@ void VulkanReplay::OverlayRendering::Init(WrappedVulkan *driver, VkDescriptorPoo
|
||||
|
||||
uint32_t samplesHandled = 0;
|
||||
|
||||
RDCCOMPILE_ASSERT(ARRAY_COUNT(m_CheckerF16Pipeline) == ARRAY_COUNT(m_QuadResolvePipeline),
|
||||
"Arrays are mismatched in size!");
|
||||
|
||||
uint32_t supportedColorSampleCounts = driver->GetDeviceProps().limits.framebufferColorSampleCounts;
|
||||
|
||||
for(size_t i = 0; i < ARRAY_COUNT(m_CheckerF16Pipeline); i++)
|
||||
for(size_t i = 0; i < ARRAY_COUNT(m_QuadResolvePipeline); i++)
|
||||
{
|
||||
VkSampleCountFlagBits samples = VkSampleCountFlagBits(1 << i);
|
||||
|
||||
@@ -4662,13 +4659,6 @@ void VulkanReplay::OverlayRendering::Init(WrappedVulkan *driver, VkDescriptorPoo
|
||||
pipeInfo.renderPass = RGBA16MSRP;
|
||||
pipeInfo.sampleCount = VkSampleCountFlagBits(1 << i);
|
||||
|
||||
// set up outline pipeline configuration
|
||||
pipeInfo.blendEnable = true;
|
||||
pipeInfo.fragment = shaderCache->GetBuiltinModule(BuiltinShader::CheckerboardFS);
|
||||
pipeInfo.pipeLayout = m_CheckerPipeLayout;
|
||||
|
||||
CREATE_OBJECT(m_CheckerF16Pipeline[i], pipeInfo);
|
||||
|
||||
// set up quad resolve pipeline configuration
|
||||
pipeInfo.blendEnable = false;
|
||||
pipeInfo.fragment = shaderCache->GetBuiltinModule(BuiltinShader::QuadResolveFS);
|
||||
@@ -4976,6 +4966,34 @@ void VulkanReplay::OverlayRendering::Init(WrappedVulkan *driver, VkDescriptorPoo
|
||||
driver->vkDestroyRenderPass(driver->GetDev(), SRGBA8MSRP, NULL);
|
||||
}
|
||||
|
||||
VkPipeline VulkanReplay::OverlayRendering::CreateTempViewportPipe(WrappedVulkan *driver)
|
||||
{
|
||||
VulkanShaderCache *shaderCache = driver->GetShaderCache();
|
||||
|
||||
ConciseGraphicsPipeline pipeInfo = {
|
||||
NoDepthRP,
|
||||
m_CheckerPipeLayout,
|
||||
shaderCache->GetBuiltinModule(BuiltinShader::BlitVS),
|
||||
shaderCache->GetBuiltinModule(BuiltinShader::CheckerboardFS),
|
||||
{VK_DYNAMIC_STATE_VIEWPORT},
|
||||
Samples,
|
||||
false, // sampleRateShading
|
||||
false, // depthEnable
|
||||
false, // stencilEnable
|
||||
StencilMode::KEEP,
|
||||
true, // colourOutput
|
||||
true, // blendEnable
|
||||
VK_BLEND_FACTOR_SRC_ALPHA,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
|
||||
0xf, // writeMask
|
||||
};
|
||||
|
||||
VkPipeline ret;
|
||||
CREATE_OBJECT(ret, pipeInfo);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
VkPipeline VulkanReplay::OverlayRendering::CreateTempMultiviewQuadResolvePipe(WrappedVulkan *driver)
|
||||
{
|
||||
VulkanShaderCache *shaderCache = driver->GetShaderCache();
|
||||
@@ -5038,8 +5056,6 @@ void VulkanReplay::OverlayRendering::Destroy(WrappedVulkan *driver)
|
||||
|
||||
driver->vkDestroyDescriptorSetLayout(driver->GetDev(), m_CheckerDescSetLayout, NULL);
|
||||
driver->vkDestroyPipelineLayout(driver->GetDev(), m_CheckerPipeLayout, NULL);
|
||||
for(size_t i = 0; i < ARRAY_COUNT(m_CheckerF16Pipeline); i++)
|
||||
driver->vkDestroyPipeline(driver->GetDev(), m_CheckerF16Pipeline[i], NULL);
|
||||
driver->vkDestroyPipeline(driver->GetDev(), m_CheckerPipeline, NULL);
|
||||
driver->vkDestroyPipeline(driver->GetDev(), m_CheckerMSAAPipeline, NULL);
|
||||
|
||||
|
||||
@@ -1451,6 +1451,7 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D
|
||||
VulkanRenderState prevstate = state;
|
||||
|
||||
// make patched shader
|
||||
VkPipeline checkerPipe = VK_NULL_HANDLE;
|
||||
VkShaderModule mod[2] = {0};
|
||||
VkPipeline pipe[2] = {0};
|
||||
VkShaderEXT shad[2] = {0};
|
||||
@@ -1559,6 +1560,8 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D
|
||||
CHECK_VKR(m_pDriver, vkr);
|
||||
}
|
||||
|
||||
checkerPipe = m_Overlay.CreateTempViewportPipe(m_pDriver);
|
||||
|
||||
// disable tests in dynamic state too
|
||||
state.depthTestEnable = VK_FALSE;
|
||||
state.depthWriteEnable = VK_FALSE;
|
||||
@@ -1671,8 +1674,7 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D
|
||||
|
||||
m_Overlay.m_CheckerUBO.Unmap();
|
||||
|
||||
vt->CmdBindPipeline(Unwrap(cmd), VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||
Unwrap(m_Overlay.m_CheckerF16Pipeline[SampleIndex(iminfo.samples)]));
|
||||
vt->CmdBindPipeline(Unwrap(cmd), VK_PIPELINE_BIND_POINT_GRAPHICS, Unwrap(checkerPipe));
|
||||
vt->CmdBindDescriptorSets(Unwrap(cmd), VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||
Unwrap(m_Overlay.m_CheckerPipeLayout), 0, 1,
|
||||
UnwrapPtr(m_Overlay.m_CheckerDescSet), 1, &uboOffs);
|
||||
@@ -1727,14 +1729,6 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D
|
||||
m_pDriver->SubmitCmds();
|
||||
m_pDriver->FlushQ();
|
||||
|
||||
cmd = m_pDriver->GetNextCmd();
|
||||
|
||||
if(cmd == VK_NULL_HANDLE)
|
||||
return ResourceId();
|
||||
|
||||
vkr = vt->BeginCommandBuffer(Unwrap(cmd), &beginInfo);
|
||||
CHECK_VKR(m_pDriver, vkr);
|
||||
|
||||
for(int i = 0; i < 2; i++)
|
||||
{
|
||||
if(shad[i] != VK_NULL_HANDLE)
|
||||
@@ -1742,6 +1736,15 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D
|
||||
m_pDriver->vkDestroyPipeline(m_Device, pipe[i], NULL);
|
||||
m_pDriver->vkDestroyShaderModule(m_Device, mod[i], NULL);
|
||||
}
|
||||
m_pDriver->vkDestroyPipeline(m_Device, checkerPipe, NULL);
|
||||
|
||||
cmd = m_pDriver->GetNextCmd();
|
||||
|
||||
if(cmd == VK_NULL_HANDLE)
|
||||
return ResourceId();
|
||||
|
||||
vkr = vt->BeginCommandBuffer(Unwrap(cmd), &beginInfo);
|
||||
CHECK_VKR(m_pDriver, vkr);
|
||||
}
|
||||
}
|
||||
else if(overlay == DebugOverlay::BackfaceCull)
|
||||
|
||||
@@ -713,6 +713,7 @@ private:
|
||||
void Init(WrappedVulkan *driver, VkDescriptorPool descriptorPool);
|
||||
void Destroy(WrappedVulkan *driver);
|
||||
|
||||
VkPipeline CreateTempViewportPipe(WrappedVulkan *driver);
|
||||
VkPipeline CreateTempMultiviewQuadResolvePipe(WrappedVulkan *driver);
|
||||
|
||||
VkDeviceMemory ImageMem = VK_NULL_HANDLE;
|
||||
@@ -734,7 +735,6 @@ private:
|
||||
VkDescriptorSet m_CheckerDescSet = VK_NULL_HANDLE;
|
||||
VkPipeline m_CheckerPipeline = VK_NULL_HANDLE;
|
||||
VkPipeline m_CheckerMSAAPipeline = VK_NULL_HANDLE;
|
||||
VkPipeline m_CheckerF16Pipeline[8] = {VK_NULL_HANDLE};
|
||||
GPUBuffer m_CheckerUBO;
|
||||
|
||||
VkDescriptorSetLayout m_QuadDescSetLayout = VK_NULL_HANDLE;
|
||||
|
||||
Reference in New Issue
Block a user