blob: b69f5d57db4b31b4b82dc3c4dcf7b1972965df7e [file] [log] [blame]
Tony-LunarG4c253372022-01-18 13:51:07 -07001/* Copyright (c) 2020-2022 The Khronos Group Inc.
2 * Copyright (c) 2020-2022 Valve Corporation
3 * Copyright (c) 2020-2022 LunarG, Inc.
Tony-LunarG04717522019-10-17 10:41:17 -06004 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * Author: Tony Barbour <tony@lunarg.com>
18 */
19
20#pragma once
21
22#include "chassis.h"
23#include "vk_mem_alloc.h"
24#include "state_tracker.h"
Tony-LunarGb5fae462020-03-05 12:43:25 -070025#include "gpu_utils.h"
Tony-LunarG04717522019-10-17 10:41:17 -060026#include <map>
Tony-LunarGb5fae462020-03-05 12:43:25 -070027class DebugPrintf;
Tony-LunarG04717522019-10-17 10:41:17 -060028
Tony-LunarGb5fae462020-03-05 12:43:25 -070029struct DPFDeviceMemoryBlock {
Tony-LunarG04717522019-10-17 10:41:17 -060030 VkBuffer buffer;
31 VmaAllocation allocation;
32};
33
Tony-LunarGb5fae462020-03-05 12:43:25 -070034struct DPFBufferInfo {
35 DPFDeviceMemoryBlock output_mem_block;
Tony-LunarG04717522019-10-17 10:41:17 -060036 VkDescriptorSet desc_set;
37 VkDescriptorPool desc_pool;
38 VkPipelineBindPoint pipeline_bind_point;
Tony-LunarGb5fae462020-03-05 12:43:25 -070039 DPFBufferInfo(DPFDeviceMemoryBlock output_mem_block, VkDescriptorSet desc_set, VkDescriptorPool desc_pool,
Tony-LunarG04717522019-10-17 10:41:17 -060040 VkPipelineBindPoint pipeline_bind_point)
41 : output_mem_block(output_mem_block), desc_set(desc_set), desc_pool(desc_pool), pipeline_bind_point(pipeline_bind_point){};
42};
Tony-LunarG04717522019-10-17 10:41:17 -060043
Tony-LunarGb5fae462020-03-05 12:43:25 -070044struct DPFShaderTracker {
Tony-LunarG04717522019-10-17 10:41:17 -060045 VkPipeline pipeline;
46 VkShaderModule shader_module;
sfricke-samsung7fac88a2022-01-26 11:44:22 -080047 std::vector<uint32_t> pgm;
Tony-LunarG04717522019-10-17 10:41:17 -060048};
49
50enum vartype { varsigned, varunsigned, varfloat };
Tony-LunarGb5fae462020-03-05 12:43:25 -070051struct DPFSubstring {
Tony-LunarG04717522019-10-17 10:41:17 -060052 std::string string;
53 bool needs_value;
54 vartype type;
55 uint64_t longval = 0;
56};
57
Tony-LunarGb5fae462020-03-05 12:43:25 -070058struct DPFOutputRecord {
Tony-LunarG04717522019-10-17 10:41:17 -060059 uint32_t size;
60 uint32_t shader_id;
61 uint32_t instruction_position;
62 uint32_t stage;
63 uint32_t stage_word_1;
64 uint32_t stage_word_2;
65 uint32_t stage_word_3;
66 uint32_t format_string_id;
67 uint32_t values;
68};
69
Jeremy Gebben37c5c5d2022-03-21 07:16:03 -060070namespace debug_printf_state {
71class CommandBuffer : public CMD_BUFFER_STATE {
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -060072 public:
73 std::vector<DPFBufferInfo> buffer_infos;
74
Jeremy Gebben37c5c5d2022-03-21 07:16:03 -060075 CommandBuffer(DebugPrintf* dp, VkCommandBuffer cb, const VkCommandBufferAllocateInfo* create_info,
76 const COMMAND_POOL_STATE* pool);
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -060077
78 void Reset() final;
79};
Jeremy Gebben37c5c5d2022-03-21 07:16:03 -060080}; // namespace debug_printf_state
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -060081
Jeremy Gebben37c5c5d2022-03-21 07:16:03 -060082VALSTATETRACK_DERIVED_STATE_OBJECT(VkCommandBuffer, debug_printf_state::CommandBuffer, CMD_BUFFER_STATE);
Jeremy Gebben78684b12022-02-23 17:31:56 -070083
Tony-LunarGb5fae462020-03-05 12:43:25 -070084class DebugPrintf : public ValidationStateTracker {
Tony-LunarG1dce2392019-10-23 16:49:29 -060085 public:
Mark Lobodzinski0dcb87d2020-03-30 16:09:24 -060086 DebugPrintf() { container_type = LayerObjectTypeDebugPrintf; }
87
Tony-LunarG1dce2392019-10-23 16:49:29 -060088 template <typename T>
89 void ReportSetupProblem(T object, const char* const specific_message) const;
Tony-LunarG04717522019-10-17 10:41:17 -060090 void PreCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070091 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, void* modified_create_info) override;
Jeremy Gebben36a3b832022-03-23 10:54:18 -060092 void CreateDevice(const VkDeviceCreateInfo* pCreateInfo) override;
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070093 void PreCallRecordDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarG04717522019-10-17 10:41:17 -060094 void PreCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
95 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070096 void* cpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -060097 void PostCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
98 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070099 VkResult result) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600100 bool PreCallValidateCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
101 VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
102 uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
103 uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700104 uint32_t imageMemoryBarrierCount,
105 const VkImageMemoryBarrier* pImageMemoryBarriers) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700106 bool PreCallValidateCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
107 const VkDependencyInfoKHR* pDependencyInfos) const override;
Tony-LunarG1364cf52021-11-17 16:10:11 -0700108 bool PreCallValidateCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
109 const VkDependencyInfo* pDependencyInfos) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700110
Tony-LunarG04717522019-10-17 10:41:17 -0600111 void PreCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
112 const VkGraphicsPipelineCreateInfo* pCreateInfos,
113 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700114 void* cgpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600115 void PreCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
116 const VkComputePipelineCreateInfo* pCreateInfos,
117 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700118 void* ccpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600119 void PreCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
120 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
121 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700122 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700123 void PreCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
124 VkPipelineCache pipelineCache, uint32_t count,
Tony-LunarG04717522019-10-17 10:41:17 -0600125 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
126 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700127 void* crtpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600128 void PostCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
129 const VkGraphicsPipelineCreateInfo* pCreateInfos,
130 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700131 void* cgpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600132 void PostCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
133 const VkComputePipelineCreateInfo* pCreateInfos,
134 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700135 void* ccpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600136 void PostCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
137 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
138 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700139 void* crtpl_state_data) override;
Tony-LunarGfb2ab872021-01-13 15:17:15 -0700140 void PostCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
141 VkPipelineCache pipelineCache, uint32_t count,
142 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
143 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
144 VkResult result, void* crtpl_state_data) override;
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700145 void PreCallRecordDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) override;
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800146 bool InstrumentShader(const VkShaderModuleCreateInfo* pCreateInfo, std::vector<uint32_t>& new_pgm, uint32_t* unique_shader_id);
Tony-LunarG04717522019-10-17 10:41:17 -0600147 void PreCallRecordCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo,
148 const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700149 void* csm_state_data) override;
Tony-LunarGb5fae462020-03-05 12:43:25 -0700150 std::vector<DPFSubstring> ParseFormatString(std::string format_string);
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800151 std::string FindFormatString(std::vector<uint32_t> pgm, uint32_t string_id);
Tony-LunarG7de10e82020-11-24 11:31:55 -0700152 void AnalyzeAndGenerateMessages(VkCommandBuffer command_buffer, VkQueue queue, DPFBufferInfo &buffer_info,
Tony-LunarG1dce2392019-10-23 16:49:29 -0600153 uint32_t operation_index, uint32_t* const debug_output_buffer);
Tony-LunarG04717522019-10-17 10:41:17 -0600154 void PreCallRecordCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700155 uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600156 void PreCallRecordCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo,
157 uint32_t instanceCount, uint32_t firstInstance, uint32_t stride) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600158 void PreCallRecordCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700159 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600160 void PreCallRecordCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
161 const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount,
162 uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600163 void PreCallRecordCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700164 uint32_t stride) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600165 void PreCallRecordCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700166 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600167 void PreCallRecordCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
168 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700169 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600170 void PreCallRecordCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
171 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700172 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600173 void PreCallRecordCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
174 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700175 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600176 void PreCallRecordCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
177 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700178 uint32_t stride) override;
Tony-LunarG54176fb2020-12-02 10:47:22 -0700179 void PreCallRecordCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
180 VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700181 uint32_t vertexStride) override;
182 void PreCallRecordCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600183 void PreCallRecordCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700184 uint32_t drawCount, uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600185 void PreCallRecordCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
186 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700187 uint32_t stride) override;
188 void PreCallRecordCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) override;
189 void PreCallRecordCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) override;
Tony-LunarGd13f9b52020-09-08 15:45:45 -0600190 void PreCallRecordCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700191 uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) override;
Tony-LunarG52c8c602020-09-10 16:29:56 -0600192 void PreCallRecordCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700193 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
194 uint32_t groupCountZ) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600195 void PreCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
196 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
197 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
198 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
199 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
200 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700201 uint32_t width, uint32_t height, uint32_t depth) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600202 void PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
203 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
204 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
205 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
206 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
207 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700208 uint32_t width, uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700209 void PreCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
210 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
211 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
212 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
213 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700214 uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700215 void PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
216 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
217 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
218 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
219 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700220 uint32_t height, uint32_t depth) override;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600221 void PreCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700222 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
223 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
224 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700225 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700226 VkDeviceAddress indirectDeviceAddress) override;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600227 void PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700228 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
229 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
230 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700231 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700232 VkDeviceAddress indirectDeviceAddress) override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700233
Tony-LunarG04717522019-10-17 10:41:17 -0600234 void PostCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700235 VkResult result) override;
Tony-LunarG26fe2842021-11-16 14:07:59 -0700236 void RecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence, VkResult result);
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700237 void PostCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence,
238 VkResult result) override;
Tony-LunarG26fe2842021-11-16 14:07:59 -0700239 void PostCallRecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence,
240 VkResult result) override;
Tony-LunarGb5fae462020-03-05 12:43:25 -0700241 void AllocateDebugPrintfResources(const VkCommandBuffer cmd_buffer, const VkPipelineBindPoint bind_point);
Jeremy Gebben3d22d582021-08-11 15:37:58 -0600242
Jeremy Gebben9f537102021-10-05 16:37:12 -0600243 std::shared_ptr<SHADER_MODULE_STATE> GetShaderModuleState(VkShaderModule shader_module) {
244 return Get<SHADER_MODULE_STATE>(shader_module);
245 }
246 std::shared_ptr<const SHADER_MODULE_STATE> GetShaderModuleState(VkShaderModule shader_module) const {
247 return Get<SHADER_MODULE_STATE>(shader_module);
248 }
249 std::shared_ptr<const PIPELINE_STATE> GetPipelineState(VkPipeline pipeline) const { return Get<PIPELINE_STATE>(pipeline); }
250 std::shared_ptr<PIPELINE_STATE> GetPipelineState(VkPipeline pipeline) { return Get<PIPELINE_STATE>(pipeline); }
251
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600252 const std::vector<DPFBufferInfo>& GetBufferInfo(const CMD_BUFFER_STATE* cb_node) const {
253 assert(cb_node);
Jeremy Gebben37c5c5d2022-03-21 07:16:03 -0600254 return static_cast<const debug_printf_state::CommandBuffer*>(cb_node)->buffer_infos;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600255 }
256
257 std::vector<DPFBufferInfo>& GetBufferInfo(CMD_BUFFER_STATE* cb_node) {
258 assert(cb_node);
Jeremy Gebben37c5c5d2022-03-21 07:16:03 -0600259 return static_cast<debug_printf_state::CommandBuffer*>(cb_node)->buffer_infos;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600260 }
261
262 std::shared_ptr<CMD_BUFFER_STATE> CreateCmdBufferState(VkCommandBuffer cb, const VkCommandBufferAllocateInfo* create_info,
Jeremy Gebbencd7fa282021-10-27 10:25:32 -0600263 const COMMAND_POOL_STATE* pool) final;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600264
265 void DestroyBuffer(DPFBufferInfo& buffer_info);
Jeremy Gebben14499e82022-03-17 11:03:10 -0600266
267private:
268 bool CommandBufferNeedsProcessing(VkCommandBuffer command_buffer);
269 void ProcessCommandBuffer(VkQueue queue, VkCommandBuffer command_buffer);
270
271 VkPhysicalDeviceFeatures supported_features;
272
273 uint32_t unique_shader_module_id = 0;
274 uint32_t output_buffer_size;
275
276public:
277 bool aborted = false;
278 bool verbose = false;
279 bool use_stdout = false;
280 uint32_t adjusted_max_desc_sets;
281 uint32_t desc_set_bind_index;
282 VkDescriptorSetLayout debug_desc_layout = VK_NULL_HANDLE;
283 VkDescriptorSetLayout dummy_desc_layout = VK_NULL_HANDLE;
284 std::unique_ptr<UtilDescriptorSetManager> desc_set_manager;
285 layer_data::unordered_map<uint32_t, DPFShaderTracker> shader_map;
286 PFN_vkSetDeviceLoaderData vkSetDeviceLoaderData;
287 VmaAllocator vmaAllocator = {};
288 std::map<VkQueue, UtilQueueBarrierCommandInfo> queue_barrier_command_infos;
Tony-LunarG04717522019-10-17 10:41:17 -0600289};