blob: be90054d7dbb3c9cfb733188bf9b5165830a9c0c [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 Gebbenf6bb4bb2021-08-11 15:41:09 -060070class CMD_BUFFER_STATE_PRINTF : public CMD_BUFFER_STATE {
71 public:
72 std::vector<DPFBufferInfo> buffer_infos;
73
74 CMD_BUFFER_STATE_PRINTF(DebugPrintf* dp, VkCommandBuffer cb, const VkCommandBufferAllocateInfo* create_info,
Jeremy Gebbencd7fa282021-10-27 10:25:32 -060075 const COMMAND_POOL_STATE* pool);
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -060076
77 void Reset() final;
78};
79
Jeremy Gebben78684b12022-02-23 17:31:56 -070080VALSTATETRACK_DERIVED_STATE_OBJECT(VkCommandBuffer, CMD_BUFFER_STATE_PRINTF, CMD_BUFFER_STATE);
81
Tony-LunarGb5fae462020-03-05 12:43:25 -070082class DebugPrintf : public ValidationStateTracker {
Tony-LunarG1dce2392019-10-23 16:49:29 -060083 public:
Mark Lobodzinski0dcb87d2020-03-30 16:09:24 -060084 DebugPrintf() { container_type = LayerObjectTypeDebugPrintf; }
85
Tony-LunarG1dce2392019-10-23 16:49:29 -060086 template <typename T>
87 void ReportSetupProblem(T object, const char* const specific_message) const;
Tony-LunarG04717522019-10-17 10:41:17 -060088 void PreCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070089 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, void* modified_create_info) override;
Tony-LunarG04717522019-10-17 10:41:17 -060090 void PostCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070091 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, VkResult result) override;
92 void PreCallRecordDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarG04717522019-10-17 10:41:17 -060093 void PreCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
94 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070095 void* cpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -060096 void PostCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
97 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -070098 VkResult result) override;
Tony-LunarG04717522019-10-17 10:41:17 -060099 bool PreCallValidateCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
100 VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
101 uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
102 uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700103 uint32_t imageMemoryBarrierCount,
104 const VkImageMemoryBarrier* pImageMemoryBarriers) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700105 bool PreCallValidateCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
106 const VkDependencyInfoKHR* pDependencyInfos) const override;
Tony-LunarG1364cf52021-11-17 16:10:11 -0700107 bool PreCallValidateCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
108 const VkDependencyInfo* pDependencyInfos) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700109
Tony-LunarG04717522019-10-17 10:41:17 -0600110 void PreCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
111 const VkGraphicsPipelineCreateInfo* pCreateInfos,
112 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700113 void* cgpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600114 void PreCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
115 const VkComputePipelineCreateInfo* pCreateInfos,
116 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700117 void* ccpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600118 void PreCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
119 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
120 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700121 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700122 void PreCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
123 VkPipelineCache pipelineCache, uint32_t count,
Tony-LunarG04717522019-10-17 10:41:17 -0600124 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
125 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700126 void* crtpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600127 void PostCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
128 const VkGraphicsPipelineCreateInfo* pCreateInfos,
129 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700130 void* cgpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600131 void PostCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
132 const VkComputePipelineCreateInfo* pCreateInfos,
133 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700134 void* ccpl_state_data) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600135 void PostCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
136 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
137 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700138 void* crtpl_state_data) override;
Tony-LunarGfb2ab872021-01-13 15:17:15 -0700139 void PostCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
140 VkPipelineCache pipelineCache, uint32_t count,
141 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
142 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
143 VkResult result, void* crtpl_state_data) override;
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700144 void PreCallRecordDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) override;
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800145 bool InstrumentShader(const VkShaderModuleCreateInfo* pCreateInfo, std::vector<uint32_t>& new_pgm, uint32_t* unique_shader_id);
Tony-LunarG04717522019-10-17 10:41:17 -0600146 void PreCallRecordCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo,
147 const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700148 void* csm_state_data) override;
Tony-LunarGb5fae462020-03-05 12:43:25 -0700149 std::vector<DPFSubstring> ParseFormatString(std::string format_string);
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800150 std::string FindFormatString(std::vector<uint32_t> pgm, uint32_t string_id);
Tony-LunarG7de10e82020-11-24 11:31:55 -0700151 void AnalyzeAndGenerateMessages(VkCommandBuffer command_buffer, VkQueue queue, DPFBufferInfo &buffer_info,
Tony-LunarG1dce2392019-10-23 16:49:29 -0600152 uint32_t operation_index, uint32_t* const debug_output_buffer);
Tony-LunarG04717522019-10-17 10:41:17 -0600153 void PreCallRecordCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700154 uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600155 void PreCallRecordCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo,
156 uint32_t instanceCount, uint32_t firstInstance, uint32_t stride) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600157 void PreCallRecordCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700158 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600159 void PreCallRecordCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
160 const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount,
161 uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600162 void PreCallRecordCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700163 uint32_t stride) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600164 void PreCallRecordCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700165 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600166 void PreCallRecordCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
167 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700168 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600169 void PreCallRecordCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
170 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700171 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600172 void PreCallRecordCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
173 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700174 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600175 void PreCallRecordCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
176 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700177 uint32_t stride) override;
Tony-LunarG54176fb2020-12-02 10:47:22 -0700178 void PreCallRecordCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
179 VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700180 uint32_t vertexStride) override;
181 void PreCallRecordCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600182 void PreCallRecordCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700183 uint32_t drawCount, uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600184 void PreCallRecordCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
185 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700186 uint32_t stride) override;
187 void PreCallRecordCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) override;
188 void PreCallRecordCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) override;
Tony-LunarGd13f9b52020-09-08 15:45:45 -0600189 void PreCallRecordCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700190 uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) override;
Tony-LunarG52c8c602020-09-10 16:29:56 -0600191 void PreCallRecordCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700192 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
193 uint32_t groupCountZ) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600194 void PreCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
195 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
196 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
197 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
198 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
199 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700200 uint32_t width, uint32_t height, uint32_t depth) override;
Tony-LunarG04717522019-10-17 10:41:17 -0600201 void PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
202 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
203 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
204 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
205 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
206 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700207 uint32_t width, uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700208 void PreCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
209 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
210 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
211 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
212 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700213 uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700214 void PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
215 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
216 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
217 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
218 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700219 uint32_t height, uint32_t depth) override;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600220 void PreCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700221 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
222 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
223 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700224 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700225 VkDeviceAddress indirectDeviceAddress) override;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600226 void PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700227 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
228 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
229 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700230 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700231 VkDeviceAddress indirectDeviceAddress) override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700232
Tony-LunarG04717522019-10-17 10:41:17 -0600233 void PostCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence,
Mark Lobodzinski7a42ff02020-12-03 14:55:57 -0700234 VkResult result) override;
Tony-LunarG26fe2842021-11-16 14:07:59 -0700235 void RecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence, VkResult result);
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700236 void PostCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence,
237 VkResult result) override;
Tony-LunarG26fe2842021-11-16 14:07:59 -0700238 void PostCallRecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence,
239 VkResult result) override;
Tony-LunarGb5fae462020-03-05 12:43:25 -0700240 void AllocateDebugPrintfResources(const VkCommandBuffer cmd_buffer, const VkPipelineBindPoint bind_point);
Jeremy Gebben3d22d582021-08-11 15:37:58 -0600241
Jeremy Gebben9f537102021-10-05 16:37:12 -0600242 std::shared_ptr<SHADER_MODULE_STATE> GetShaderModuleState(VkShaderModule shader_module) {
243 return Get<SHADER_MODULE_STATE>(shader_module);
244 }
245 std::shared_ptr<const SHADER_MODULE_STATE> GetShaderModuleState(VkShaderModule shader_module) const {
246 return Get<SHADER_MODULE_STATE>(shader_module);
247 }
248 std::shared_ptr<const PIPELINE_STATE> GetPipelineState(VkPipeline pipeline) const { return Get<PIPELINE_STATE>(pipeline); }
249 std::shared_ptr<PIPELINE_STATE> GetPipelineState(VkPipeline pipeline) { return Get<PIPELINE_STATE>(pipeline); }
250
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600251 const std::vector<DPFBufferInfo>& GetBufferInfo(const CMD_BUFFER_STATE* cb_node) const {
252 assert(cb_node);
253 return static_cast<const CMD_BUFFER_STATE_PRINTF*>(cb_node)->buffer_infos;
254 }
255
256 std::vector<DPFBufferInfo>& GetBufferInfo(CMD_BUFFER_STATE* cb_node) {
257 assert(cb_node);
258 return static_cast<CMD_BUFFER_STATE_PRINTF*>(cb_node)->buffer_infos;
259 }
260
261 std::shared_ptr<CMD_BUFFER_STATE> CreateCmdBufferState(VkCommandBuffer cb, const VkCommandBufferAllocateInfo* create_info,
Jeremy Gebbencd7fa282021-10-27 10:25:32 -0600262 const COMMAND_POOL_STATE* pool) final;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600263
264 void DestroyBuffer(DPFBufferInfo& buffer_info);
Jeremy Gebben14499e82022-03-17 11:03:10 -0600265
266private:
267 bool CommandBufferNeedsProcessing(VkCommandBuffer command_buffer);
268 void ProcessCommandBuffer(VkQueue queue, VkCommandBuffer command_buffer);
269
270 VkPhysicalDeviceFeatures supported_features;
271
272 uint32_t unique_shader_module_id = 0;
273 uint32_t output_buffer_size;
274
275public:
276 bool aborted = false;
277 bool verbose = false;
278 bool use_stdout = false;
279 uint32_t adjusted_max_desc_sets;
280 uint32_t desc_set_bind_index;
281 VkDescriptorSetLayout debug_desc_layout = VK_NULL_HANDLE;
282 VkDescriptorSetLayout dummy_desc_layout = VK_NULL_HANDLE;
283 std::unique_ptr<UtilDescriptorSetManager> desc_set_manager;
284 layer_data::unordered_map<uint32_t, DPFShaderTracker> shader_map;
285 PFN_vkSetDeviceLoaderData vkSetDeviceLoaderData;
286 VmaAllocator vmaAllocator = {};
287 std::map<VkQueue, UtilQueueBarrierCommandInfo> queue_barrier_command_infos;
Tony-LunarG04717522019-10-17 10:41:17 -0600288};