diff --git a/renderdocui/Code/CommonPipelineState.cs b/renderdocui/Code/CommonPipelineState.cs index 30fbd3912..326e773d8 100644 --- a/renderdocui/Code/CommonPipelineState.cs +++ b/renderdocui/Code/CommonPipelineState.cs @@ -737,6 +737,41 @@ namespace renderdocui.Code return ret; } + else if (IsLogVK) + { + VulkanPipelineState.Pipeline.DescriptorSet[] descsets = m_Vulkan.graphics.DescSets; + + if (stage == ShaderStageType.Compute) + descsets = m_Vulkan.compute.DescSets; + + List ret = new List(); + + ShaderStageBits mask = (ShaderStageBits)(1 << (int)stage); + foreach(var descset in m_Vulkan.graphics.DescSets) + { + foreach (var bind in descset.bindings) + { + if ((bind.type == ShaderBindType.ImageSampler || + bind.type == ShaderBindType.InputAttachment || + bind.type == ShaderBindType.ReadOnlyBuffer || + bind.type == ShaderBindType.ReadOnlyImage || + bind.type == ShaderBindType.ReadOnlyTBuffer + ) && (bind.stageFlags & mask) == mask) + { + // VKTODOMED handle bind.arraySize + ret.Add(bind.binds[0].res); + } + else + { + // texture viewer currently expects binds to match up to resource list + // so we need to pad with empty elements + ret.Add(ResourceId.Null); + } + } + } + + return ret.ToArray(); + } } return new ResourceId[0]; @@ -773,6 +808,39 @@ namespace renderdocui.Code return ret; } + else if (IsLogVK) + { + VulkanPipelineState.Pipeline.DescriptorSet[] descsets = m_Vulkan.graphics.DescSets; + + if (stage == ShaderStageType.Compute) + descsets = m_Vulkan.compute.DescSets; + + List ret = new List(); + + ShaderStageBits mask = (ShaderStageBits)(1 << (int)stage); + foreach (var descset in m_Vulkan.graphics.DescSets) + { + foreach (var bind in descset.bindings) + { + if ((bind.type == ShaderBindType.ReadWriteBuffer || + bind.type == ShaderBindType.ReadWriteImage || + bind.type == ShaderBindType.ReadWriteTBuffer + ) && (bind.stageFlags & mask) == mask) + { + // VKTODOMED handle bind.arraySize + ret.Add(bind.binds[0].res); + } + else + { + // texture viewer currently expects binds to match up to resource list + // so we need to pad with empty elements + ret.Add(ResourceId.Null); + } + } + } + + return ret.ToArray(); + } } return new ResourceId[0]; diff --git a/renderdocui/Windows/TextureViewer.cs b/renderdocui/Windows/TextureViewer.cs index a8fa135d1..b15722f84 100644 --- a/renderdocui/Windows/TextureViewer.cs +++ b/renderdocui/Windows/TextureViewer.cs @@ -1342,6 +1342,9 @@ namespace renderdocui.Windows } rtPanel.RefreshLayout(); + + // VKTODOMED all this needs to be updated to account for multiple descriptor sets + // VKTODOMED also needs to handle array descriptors (ie. not texture arrays) i = 0; for(; i < Texs.Length; i++) @@ -1365,6 +1368,7 @@ namespace renderdocui.Windows { used = true; bindName = "<" + bind.name + ">"; + break; } } }