blob: 37dee07e497c328bb825eecbe3491c7986ef0f60 [file] [log] [blame]
Tony-LunarG7de10e82020-11-24 11:31:55 -07001/* Copyright (c) 2018-2021 The Khronos Group Inc.
2 * Copyright (c) 2018-2021 Valve Corporation
3 * Copyright (c) 2018-2021 LunarG, Inc.
Karl Schultz7b024b42018-08-30 16:18:18 -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 *
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060017 * Author: Karl Schultz <karl@lunarg.com>
18 * Author: Tony Barbour <tony@lunarg.com>
Karl Schultz7b024b42018-08-30 16:18:18 -060019 */
20
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060021#pragma once
22
23#include "chassis.h"
24#include "state_tracker.h"
Tony-LunarG0e564722019-03-19 16:09:14 -060025#include "vk_mem_alloc.h"
Tony-LunarGb5fae462020-03-05 12:43:25 -070026#include "gpu_utils.h"
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060027class GpuAssisted;
Tony-LunarG0e564722019-03-19 16:09:14 -060028
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060029struct GpuAssistedDeviceMemoryBlock {
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060030 VkBuffer buffer;
Tony-LunarG0e564722019-03-19 16:09:14 -060031 VmaAllocation allocation;
Jeremy Gebbencbf22862021-03-03 12:01:22 -070032 layer_data::unordered_map<uint32_t, const cvdescriptorset::Descriptor*> update_at_submit;
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060033};
34
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060035struct GpuAssistedPreDrawResources {
36 VkDescriptorPool desc_pool;
37 VkDescriptorSet desc_set;
Tony-LunarGf0d4e2b2021-04-14 11:52:28 -060038 VkBuffer buffer;
39 VkDeviceSize offset;
40 uint32_t stride;
41 VkDeviceSize buf_size;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060042};
43
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060044struct GpuAssistedBufferInfo {
45 GpuAssistedDeviceMemoryBlock output_mem_block;
46 GpuAssistedDeviceMemoryBlock di_input_mem_block; // Descriptor Indexing input
47 GpuAssistedDeviceMemoryBlock bda_input_mem_block; // Buffer Device Address input
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060048 GpuAssistedPreDrawResources pre_draw_resources;
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060049 VkDescriptorSet desc_set;
50 VkDescriptorPool desc_pool;
Jason Macnak67407e72019-07-11 11:05:09 -070051 VkPipelineBindPoint pipeline_bind_point;
Tony-LunarG7de10e82020-11-24 11:31:55 -070052 CMD_TYPE cmd_type;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060053 GpuAssistedBufferInfo(GpuAssistedDeviceMemoryBlock output_mem_block, GpuAssistedDeviceMemoryBlock di_input_mem_block,
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060054 GpuAssistedDeviceMemoryBlock bda_input_mem_block, GpuAssistedPreDrawResources pre_draw_resources,
55 VkDescriptorSet desc_set, VkDescriptorPool desc_pool, VkPipelineBindPoint pipeline_bind_point,
56 CMD_TYPE cmd_type)
Jason Macnak67407e72019-07-11 11:05:09 -070057 : output_mem_block(output_mem_block),
Tony-LunarG8eb5a002019-07-25 16:49:00 -060058 di_input_mem_block(di_input_mem_block),
59 bda_input_mem_block(bda_input_mem_block),
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060060 pre_draw_resources(pre_draw_resources),
Jason Macnak67407e72019-07-11 11:05:09 -070061 desc_set(desc_set),
62 desc_pool(desc_pool),
Tony-LunarG7de10e82020-11-24 11:31:55 -070063 pipeline_bind_point(pipeline_bind_point),
64 cmd_type(cmd_type){};
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060065};
66
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060067struct GpuAssistedShaderTracker {
68 VkPipeline pipeline;
69 VkShaderModule shader_module;
70 std::vector<unsigned int> pgm;
71};
72
Tony-LunarG7de10e82020-11-24 11:31:55 -070073struct GpuVuid {
74 const char* uniform_access_oob = kVUIDUndefined;
75 const char* storage_access_oob = kVUIDUndefined;
Tony-LunarG64aeaf72021-04-14 11:13:35 -060076 const char* count_exceeds_bufsize_1 = kVUIDUndefined;
77 const char* count_exceeds_bufsize = kVUIDUndefined;
Tony-LunarG1a7c9f92021-04-29 16:04:42 -060078 const char* count_exceeds_device_limit = kVUIDUndefined;
Tony-LunarG3723a3a2021-05-04 14:52:39 -060079 const char* first_instance_not_zero = kVUIDUndefined;
Tony-LunarG7de10e82020-11-24 11:31:55 -070080};
81
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060082struct GpuAssistedAccelerationStructureBuildValidationBufferInfo {
Jason Macnak83cfd582019-07-31 10:14:24 -070083 // The acceleration structure that is being built.
84 VkAccelerationStructureNV acceleration_structure = VK_NULL_HANDLE;
85
86 // The descriptor pool and descriptor set being used to validate a given build.
87 VkDescriptorPool descriptor_pool = VK_NULL_HANDLE;
88 VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
89
90 // The storage buffer used by the validating compute shader whichcontains info about
91 // the valid handles and which is written to communicate found invalid handles.
92 VkBuffer validation_buffer = VK_NULL_HANDLE;
93 VmaAllocation validation_buffer_allocation = VK_NULL_HANDLE;
94};
95
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060096struct GpuAssistedAccelerationStructureBuildValidationState {
Jason Macnak83cfd582019-07-31 10:14:24 -070097 bool initialized = false;
98
99 VkPipeline pipeline = VK_NULL_HANDLE;
100 VkPipelineLayout pipeline_layout = VK_NULL_HANDLE;
101
102 VkAccelerationStructureNV replacement_as = VK_NULL_HANDLE;
103 VmaAllocation replacement_as_allocation = VK_NULL_HANDLE;
104 uint64_t replacement_as_handle = 0;
105
Jeremy Gebbencbf22862021-03-03 12:01:22 -0700106 layer_data::unordered_map<VkCommandBuffer, std::vector<GpuAssistedAccelerationStructureBuildValidationBufferInfo>>
107 validation_buffers;
Jason Macnak83cfd582019-07-31 10:14:24 -0700108};
109
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600110struct GpuAssistedPreDrawValidationState {
111 bool globals_created = false;
112 VkShaderModule validation_shader_module = VK_NULL_HANDLE;
113 VkDescriptorSetLayout validation_ds_layout = VK_NULL_HANDLE;
114 VkPipelineLayout validation_pipeline_layout = VK_NULL_HANDLE;
115 layer_data::unordered_map <VkRenderPass, VkPipeline> renderpass_to_pipeline;
116};
117
118struct GpuAssistedCmdDrawIndirectState {
119 VkBuffer buffer;
120 VkDeviceSize offset;
Tony-LunarG3723a3a2021-05-04 14:52:39 -0600121 uint32_t drawCount;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600122 uint32_t stride;
123 VkBuffer count_buffer;
124 VkDeviceSize count_buffer_offset;
125};
126
Tony-LunarG99b880b2019-09-26 11:19:52 -0600127class GpuAssisted : public ValidationStateTracker {
Tony-LunarG1dce2392019-10-23 16:49:29 -0600128 VkPhysicalDeviceFeatures supported_features;
Tony-LunarG8eb5a002019-07-25 16:49:00 -0600129 VkBool32 shaderInt64;
Tony-LunarG99b880b2019-09-26 11:19:52 -0600130 uint32_t unique_shader_module_id = 0;
Jeremy Gebbencbf22862021-03-03 12:01:22 -0700131 layer_data::unordered_map<VkCommandBuffer, std::vector<GpuAssistedBufferInfo>> command_buffer_map; // gpu_buffer_list;
Tony-LunarG0e564722019-03-19 16:09:14 -0600132 uint32_t output_buffer_size;
Tony-LunarGc28e28a2020-08-14 10:37:48 -0600133 bool buffer_oob_enabled;
Tony-LunarG3723a3a2021-05-04 14:52:39 -0600134 bool validate_draw_indirect;
Tony-LunarG8eb5a002019-07-25 16:49:00 -0600135 std::map<VkDeviceAddress, VkDeviceSize> buffer_map;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600136 GpuAssistedAccelerationStructureBuildValidationState acceleration_structure_validation_state;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600137 GpuAssistedPreDrawValidationState pre_draw_validation_state;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600138
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700139 void PreRecordCommandBuffer(VkCommandBuffer command_buffer);
140 bool CommandBufferNeedsProcessing(VkCommandBuffer command_buffer);
141 void ProcessCommandBuffer(VkQueue queue, VkCommandBuffer command_buffer);
142
Tony-LunarG1dce2392019-10-23 16:49:29 -0600143 public:
Mark Lobodzinski0dcb87d2020-03-30 16:09:24 -0600144 GpuAssisted() { container_type = LayerObjectTypeGpuAssisted; }
145
Tony-LunarG1dce2392019-10-23 16:49:29 -0600146 bool aborted = false;
Tony-LunarG5c38b182020-06-10 16:15:32 -0600147 bool descriptor_indexing = false;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600148 VkDevice device;
149 VkPhysicalDevice physicalDevice;
150 uint32_t adjusted_max_desc_sets;
151 uint32_t desc_set_bind_index;
Tony-LunarG57ada962020-05-01 16:21:00 -0600152 VkDescriptorSetLayout debug_desc_layout = VK_NULL_HANDLE;
153 VkDescriptorSetLayout dummy_desc_layout = VK_NULL_HANDLE;
Tony-LunarGb5fae462020-03-05 12:43:25 -0700154 std::unique_ptr<UtilDescriptorSetManager> desc_set_manager;
Jeremy Gebbencbf22862021-03-03 12:01:22 -0700155 layer_data::unordered_map<uint32_t, GpuAssistedShaderTracker> shader_map;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600156 PFN_vkSetDeviceLoaderData vkSetDeviceLoaderData;
157 VmaAllocator vmaAllocator = {};
Tony-LunarGb5fae462020-03-05 12:43:25 -0700158 std::map<VkQueue, UtilQueueBarrierCommandInfo> queue_barrier_command_infos;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600159 std::vector<GpuAssistedBufferInfo>& GetBufferInfo(const VkCommandBuffer command_buffer) {
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -0600160 auto buffer_list = command_buffer_map.find(command_buffer);
161 if (buffer_list == command_buffer_map.end()) {
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600162 std::vector<GpuAssistedBufferInfo> new_list{};
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -0600163 command_buffer_map[command_buffer] = new_list;
164 return command_buffer_map[command_buffer];
165 }
166 return buffer_list->second;
167 }
Mark Lobodzinskia8151b02020-02-27 13:38:08 -0700168
Tony-LunarG1dce2392019-10-23 16:49:29 -0600169 public:
Mark Lobodzinskia8151b02020-02-27 13:38:08 -0700170 template <typename T>
171 void ReportSetupProblem(T object, const char* const specific_message) const;
Tony-LunarG5c38b182020-06-10 16:15:32 -0600172 bool CheckForDescriptorIndexing(DeviceFeatures enabled_features) const;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600173 void PreCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700174 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, void* modified_create_info) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600175 void PostCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700176 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, VkResult result) override;
Mike Schuchardt2df08912020-12-15 16:28:09 -0800177 void PostCallRecordGetBufferDeviceAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700178 VkDeviceAddress address) override;
Mike Schuchardt2df08912020-12-15 16:28:09 -0800179 void PostCallRecordGetBufferDeviceAddressKHR(VkDevice device, const VkBufferDeviceAddressInfo* pInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700180 VkDeviceAddress address) override;
Mike Schuchardt2df08912020-12-15 16:28:09 -0800181 void PostCallRecordGetBufferDeviceAddressEXT(VkDevice device, const VkBufferDeviceAddressInfo* pInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700182 VkDeviceAddress address) override;
183 void PreCallRecordDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) override;
184 void PreCallRecordDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600185 void PostCallRecordBindAccelerationStructureMemoryNV(VkDevice device, uint32_t bindInfoCount,
186 const VkBindAccelerationStructureMemoryInfoNV* pBindInfos,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700187 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600188 void PreCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
189 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700190 void* cpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600191 void PostCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
192 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700193 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600194 void ResetCommandBuffer(VkCommandBuffer commandBuffer);
195 bool PreCallValidateCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
196 VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
197 uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
198 uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700199 uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700200 bool PreCallValidateCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
201 const VkDependencyInfoKHR* pDependencyInfos) const override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600202 void PreCallRecordCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700203 VkBuffer* pBuffer, void* cb_state_data) override;
James Rumble2f6e7bb2021-07-13 15:21:20 +0100204 void PostCallRecordCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
205 VkBuffer* pBuffer, VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600206 void CreateAccelerationStructureBuildValidationState(GpuAssisted* device_GpuAssisted);
207 void DestroyAccelerationStructureBuildValidationState();
208 void PreCallRecordCmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo,
209 VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update,
210 VkAccelerationStructureNV dst, VkAccelerationStructureNV src,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700211 VkBuffer scratch, VkDeviceSize scratchOffset) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600212 void ProcessAccelerationStructureBuildValidationBuffer(VkQueue queue, CMD_BUFFER_STATE* cb_node);
213 void PreCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
214 const VkGraphicsPipelineCreateInfo* pCreateInfos,
215 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700216 void* cgpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600217 void PreCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
218 const VkComputePipelineCreateInfo* pCreateInfos,
219 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700220 void* ccpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600221 void PreCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
222 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
223 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700224 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700225 void PreCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
226 VkPipelineCache pipelineCache, uint32_t count,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500227 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
228 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700229 void* crtpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600230 void PostCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
231 const VkGraphicsPipelineCreateInfo* pCreateInfos,
232 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700233 void* cgpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600234 void PostCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
235 const VkComputePipelineCreateInfo* pCreateInfos,
236 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700237 void* ccpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600238 void PostCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
239 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
240 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700241 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700242 void PostCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
243 VkPipelineCache pipelineCache, uint32_t count,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500244 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
245 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700246 VkResult result, void* crtpl_state_data) override;
247 void PreCallRecordDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600248 void PreCallRecordDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600249 bool InstrumentShader(const VkShaderModuleCreateInfo* pCreateInfo, std::vector<unsigned int>& new_pgm,
250 uint32_t* unique_shader_id);
251 void PreCallRecordCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo,
252 const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700253 void* csm_state_data) override;
Tony-LunarG7de10e82020-11-24 11:31:55 -0700254 void AnalyzeAndGenerateMessages(VkCommandBuffer command_buffer, VkQueue queue, GpuAssistedBufferInfo &buffer_info,
255 uint32_t operation_index, uint32_t* const debug_output_buffer);
256
Tony-LunarGc28e28a2020-08-14 10:37:48 -0600257 void SetDescriptorInitialized(uint32_t* pData, uint32_t index, const cvdescriptorset::Descriptor* descriptor);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600258 void UpdateInstrumentationBuffer(CMD_BUFFER_STATE* cb_node);
Tony-LunarG7de10e82020-11-24 11:31:55 -0700259 const GpuVuid& GetGpuVuid(CMD_TYPE cmd_type) const;
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700260 void PreCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600261 void PostCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700262 VkResult result) override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700263 void PreCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits,
264 VkFence fence) override;
265 void PostCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence,
266 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600267 void PreCallRecordCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700268 uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600269 void PreCallRecordCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo,
270 uint32_t instanceCount, uint32_t firstInstance, uint32_t stride) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600271 void PreCallRecordCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700272 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600273 void PreCallRecordCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
274 const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount,
275 uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600276 void PreCallRecordCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700277 uint32_t stride) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600278 void PreCallRecordCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700279 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600280 void PreCallRecordCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
281 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700282 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600283 void PreCallRecordCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
284 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700285 uint32_t stride) override;
Tony-LunarG54176fb2020-12-02 10:47:22 -0700286 void PreCallRecordCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
287 VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700288 uint32_t vertexStride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600289 void PreCallRecordCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
290 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700291 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600292 void PreCallRecordCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
293 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700294 uint32_t stride) override;
295 void PreCallRecordCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600296 void PreCallRecordCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700297 uint32_t drawCount, uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600298 void PreCallRecordCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
299 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700300 uint32_t stride) override;
301 void PreCallRecordCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) override;
302 void PreCallRecordCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) override;
Tony-LunarGd13f9b52020-09-08 15:45:45 -0600303 void PreCallRecordCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700304 uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) override;
Tony-LunarG52c8c602020-09-10 16:29:56 -0600305 void PreCallRecordCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700306 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
307 uint32_t groupCountZ) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600308 void PreCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
309 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
310 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
311 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
312 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
313 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700314 uint32_t width, uint32_t height, uint32_t depth) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600315 void PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
316 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
317 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
318 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
319 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
320 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700321 uint32_t width, uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700322 void PreCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
323 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
324 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
325 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
326 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700327 uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700328 void PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
329 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
330 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
331 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
332 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700333 uint32_t height, uint32_t depth) override;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500334 void PreCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700335 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
336 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
337 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700338 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700339 VkDeviceAddress indirectDeviceAddress) override;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500340 void PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700341 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
342 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
343 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700344 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700345 VkDeviceAddress indirectDeviceAddress) override;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600346 void AllocateValidationResources(const VkCommandBuffer cmd_buffer, const VkPipelineBindPoint bind_point, CMD_TYPE cmd, const GpuAssistedCmdDrawIndirectState *cdic_state = nullptr);
347 void AllocatePreDrawValidationResources(GpuAssistedDeviceMemoryBlock output_block, GpuAssistedPreDrawResources& resources,
348 const LAST_BOUND_STATE& state, VkPipeline *pPipeline, const GpuAssistedCmdDrawIndirectState *cdic_state);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600349 void PostCallRecordGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700350 VkPhysicalDeviceProperties* pPhysicalDeviceProperties) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600351 void PostCallRecordGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700352 VkPhysicalDeviceProperties2* pPhysicalDeviceProperties2) override;
Jeremy Gebben3d22d582021-08-11 15:37:58 -0600353
354 const CMD_BUFFER_STATE* GetCBState(const VkCommandBuffer cb) const { return Get<CMD_BUFFER_STATE>(cb); }
355 CMD_BUFFER_STATE* GetCBState(const VkCommandBuffer cb) { return Get<CMD_BUFFER_STATE>(cb); }
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600356};