mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-08 23:05:46 +00:00
Fix vulkan pixel history to handle mesh shaders
This commit is contained in:
@@ -827,11 +827,10 @@ protected:
|
||||
memcpy(stages.data(), pipeCreateInfo.pStages, stages.byteSize());
|
||||
|
||||
EventFlags eventFlags = m_pDriver->GetEventFlags(eid);
|
||||
VkShaderModule replacementShaders[5] = {};
|
||||
VkShaderModule replacementShaders[NumShaderStages] = {};
|
||||
|
||||
// Clean shaders
|
||||
uint32_t numberOfStages = 5;
|
||||
for(size_t i = 0; i < numberOfStages; i++)
|
||||
for(size_t i = 0; i < NumShaderStages; i++)
|
||||
{
|
||||
if((eventFlags & PipeStageRWEventFlags(StageFromIndex(i))) != EventFlags::NoFlags)
|
||||
replacementShaders[i] = m_ShaderCache->GetShaderWithoutSideEffects(
|
||||
@@ -2434,11 +2433,10 @@ private:
|
||||
const VulkanCreationInfo::Pipeline &p =
|
||||
m_pDriver->GetDebugManager()->GetPipelineInfo(basePipeline);
|
||||
EventFlags eventShaderFlags = m_pDriver->GetEventFlags(eid);
|
||||
uint32_t numberOfStages = 5;
|
||||
rdcarray<VkShaderModule> replacementShaders;
|
||||
replacementShaders.resize(numberOfStages);
|
||||
replacementShaders.resize(NumShaderStages);
|
||||
// Replace fragment shader because it might have early fragments
|
||||
for(size_t i = 0; i < numberOfStages; i++)
|
||||
for(size_t i = 0; i < replacementShaders.size(); i++)
|
||||
{
|
||||
if(p.shaders[i].module == ResourceId())
|
||||
continue;
|
||||
@@ -3104,11 +3102,10 @@ struct VulkanPixelHistoryPerFragmentCallback : VulkanPixelHistoryCallback
|
||||
memcpy(stages.data(), pipeCreateInfo.pStages, stages.byteSize());
|
||||
|
||||
EventFlags eventFlags = m_pDriver->GetEventFlags(eid);
|
||||
VkShaderModule replacementShaders[5] = {};
|
||||
VkShaderModule replacementShaders[NumShaderStages] = {};
|
||||
|
||||
// Clean shaders
|
||||
uint32_t numberOfStages = 5;
|
||||
for(size_t i = 0; i < numberOfStages; i++)
|
||||
for(size_t i = 0; i < NumShaderStages; i++)
|
||||
{
|
||||
if((eventFlags & PipeStageRWEventFlags(StageFromIndex(i))) != EventFlags::NoFlags)
|
||||
replacementShaders[i] = m_ShaderCache->GetShaderWithoutSideEffects(
|
||||
@@ -3199,6 +3196,7 @@ struct VulkanPixelHistoryPerFragmentCallback : VulkanPixelHistoryCallback
|
||||
stageCI.module = m_ShaderCache->GetPrimitiveIdShader(colorOutputIndex);
|
||||
stageCI.pName = "main";
|
||||
bool gsFound = false;
|
||||
bool meshFound = false;
|
||||
bool fsFound = false;
|
||||
for(uint32_t i = 0; i < pipeCreateInfo.stageCount; i++)
|
||||
{
|
||||
@@ -3207,6 +3205,11 @@ struct VulkanPixelHistoryPerFragmentCallback : VulkanPixelHistoryCallback
|
||||
gsFound = true;
|
||||
break;
|
||||
}
|
||||
if(stages[i].stage == VK_SHADER_STAGE_MESH_BIT_EXT)
|
||||
{
|
||||
meshFound = true;
|
||||
break;
|
||||
}
|
||||
if(stages[i].stage == VK_SHADER_STAGE_FRAGMENT_BIT)
|
||||
{
|
||||
stages[i] = stageCI;
|
||||
@@ -3220,7 +3223,7 @@ struct VulkanPixelHistoryPerFragmentCallback : VulkanPixelHistoryCallback
|
||||
pipeCreateInfo.pStages = stages.data();
|
||||
}
|
||||
|
||||
if(!gsFound)
|
||||
if(!gsFound && !meshFound)
|
||||
{
|
||||
vkr = m_pDriver->vkCreateGraphicsPipelines(m_pDriver->GetDev(), VK_NULL_HANDLE, 1,
|
||||
&pipeCreateInfo, NULL, &pipes.primitiveIdPipe);
|
||||
|
||||
Reference in New Issue
Block a user