blob: 72020603715e06af0551c4fa79f9a11a93e9fbb7 [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-LunarG7de10e82020-11-24 11:31:55 -070079};
80
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060081struct GpuAssistedAccelerationStructureBuildValidationBufferInfo {
Jason Macnak83cfd582019-07-31 10:14:24 -070082 // The acceleration structure that is being built.
83 VkAccelerationStructureNV acceleration_structure = VK_NULL_HANDLE;
84
85 // The descriptor pool and descriptor set being used to validate a given build.
86 VkDescriptorPool descriptor_pool = VK_NULL_HANDLE;
87 VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
88
89 // The storage buffer used by the validating compute shader whichcontains info about
90 // the valid handles and which is written to communicate found invalid handles.
91 VkBuffer validation_buffer = VK_NULL_HANDLE;
92 VmaAllocation validation_buffer_allocation = VK_NULL_HANDLE;
93};
94
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060095struct GpuAssistedAccelerationStructureBuildValidationState {
Jason Macnak83cfd582019-07-31 10:14:24 -070096 bool initialized = false;
97
98 VkPipeline pipeline = VK_NULL_HANDLE;
99 VkPipelineLayout pipeline_layout = VK_NULL_HANDLE;
100
101 VkAccelerationStructureNV replacement_as = VK_NULL_HANDLE;
102 VmaAllocation replacement_as_allocation = VK_NULL_HANDLE;
103 uint64_t replacement_as_handle = 0;
104
Jeremy Gebbencbf22862021-03-03 12:01:22 -0700105 layer_data::unordered_map<VkCommandBuffer, std::vector<GpuAssistedAccelerationStructureBuildValidationBufferInfo>>
106 validation_buffers;
Jason Macnak83cfd582019-07-31 10:14:24 -0700107};
108
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600109struct GpuAssistedPreDrawValidationState {
110 bool globals_created = false;
111 VkShaderModule validation_shader_module = VK_NULL_HANDLE;
112 VkDescriptorSetLayout validation_ds_layout = VK_NULL_HANDLE;
113 VkPipelineLayout validation_pipeline_layout = VK_NULL_HANDLE;
114 layer_data::unordered_map <VkRenderPass, VkPipeline> renderpass_to_pipeline;
115};
116
117struct GpuAssistedCmdDrawIndirectState {
118 VkBuffer buffer;
119 VkDeviceSize offset;
120 uint32_t stride;
121 VkBuffer count_buffer;
122 VkDeviceSize count_buffer_offset;
123};
124
Tony-LunarG99b880b2019-09-26 11:19:52 -0600125class GpuAssisted : public ValidationStateTracker {
Tony-LunarG1dce2392019-10-23 16:49:29 -0600126 VkPhysicalDeviceFeatures supported_features;
Tony-LunarG8eb5a002019-07-25 16:49:00 -0600127 VkBool32 shaderInt64;
Tony-LunarG99b880b2019-09-26 11:19:52 -0600128 uint32_t unique_shader_module_id = 0;
Jeremy Gebbencbf22862021-03-03 12:01:22 -0700129 layer_data::unordered_map<VkCommandBuffer, std::vector<GpuAssistedBufferInfo>> command_buffer_map; // gpu_buffer_list;
Tony-LunarG0e564722019-03-19 16:09:14 -0600130 uint32_t output_buffer_size;
Tony-LunarGc28e28a2020-08-14 10:37:48 -0600131 bool buffer_oob_enabled;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600132 bool validate_draw_indirect_count;
Tony-LunarG8eb5a002019-07-25 16:49:00 -0600133 std::map<VkDeviceAddress, VkDeviceSize> buffer_map;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600134 GpuAssistedAccelerationStructureBuildValidationState acceleration_structure_validation_state;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600135 GpuAssistedPreDrawValidationState pre_draw_validation_state;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600136
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700137 void PreRecordCommandBuffer(VkCommandBuffer command_buffer);
138 bool CommandBufferNeedsProcessing(VkCommandBuffer command_buffer);
139 void ProcessCommandBuffer(VkQueue queue, VkCommandBuffer command_buffer);
140
Tony-LunarG1dce2392019-10-23 16:49:29 -0600141 public:
Mark Lobodzinski0dcb87d2020-03-30 16:09:24 -0600142 GpuAssisted() { container_type = LayerObjectTypeGpuAssisted; }
143
Tony-LunarG1dce2392019-10-23 16:49:29 -0600144 bool aborted = false;
Tony-LunarG5c38b182020-06-10 16:15:32 -0600145 bool descriptor_indexing = false;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600146 VkDevice device;
147 VkPhysicalDevice physicalDevice;
148 uint32_t adjusted_max_desc_sets;
149 uint32_t desc_set_bind_index;
Tony-LunarG57ada962020-05-01 16:21:00 -0600150 VkDescriptorSetLayout debug_desc_layout = VK_NULL_HANDLE;
151 VkDescriptorSetLayout dummy_desc_layout = VK_NULL_HANDLE;
Tony-LunarGb5fae462020-03-05 12:43:25 -0700152 std::unique_ptr<UtilDescriptorSetManager> desc_set_manager;
Jeremy Gebbencbf22862021-03-03 12:01:22 -0700153 layer_data::unordered_map<uint32_t, GpuAssistedShaderTracker> shader_map;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600154 PFN_vkSetDeviceLoaderData vkSetDeviceLoaderData;
155 VmaAllocator vmaAllocator = {};
Tony-LunarGb5fae462020-03-05 12:43:25 -0700156 std::map<VkQueue, UtilQueueBarrierCommandInfo> queue_barrier_command_infos;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600157 std::vector<GpuAssistedBufferInfo>& GetBufferInfo(const VkCommandBuffer command_buffer) {
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -0600158 auto buffer_list = command_buffer_map.find(command_buffer);
159 if (buffer_list == command_buffer_map.end()) {
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600160 std::vector<GpuAssistedBufferInfo> new_list{};
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -0600161 command_buffer_map[command_buffer] = new_list;
162 return command_buffer_map[command_buffer];
163 }
164 return buffer_list->second;
165 }
Mark Lobodzinskia8151b02020-02-27 13:38:08 -0700166
Tony-LunarG1dce2392019-10-23 16:49:29 -0600167 public:
Mark Lobodzinskia8151b02020-02-27 13:38:08 -0700168 template <typename T>
169 void ReportSetupProblem(T object, const char* const specific_message) const;
Tony-LunarG5c38b182020-06-10 16:15:32 -0600170 bool CheckForDescriptorIndexing(DeviceFeatures enabled_features) const;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600171 void PreCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700172 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, void* modified_create_info) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600173 void PostCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700174 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, VkResult result) override;
Mike Schuchardt2df08912020-12-15 16:28:09 -0800175 void PostCallRecordGetBufferDeviceAddress(VkDevice device, const VkBufferDeviceAddressInfo* pInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700176 VkDeviceAddress address) override;
Mike Schuchardt2df08912020-12-15 16:28:09 -0800177 void PostCallRecordGetBufferDeviceAddressKHR(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 PostCallRecordGetBufferDeviceAddressEXT(VkDevice device, const VkBufferDeviceAddressInfo* pInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700180 VkDeviceAddress address) override;
181 void PreCallRecordDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) override;
182 void PreCallRecordDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600183 void PostCallRecordBindAccelerationStructureMemoryNV(VkDevice device, uint32_t bindInfoCount,
184 const VkBindAccelerationStructureMemoryInfoNV* pBindInfos,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700185 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600186 void PreCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
187 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700188 void* cpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600189 void PostCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
190 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700191 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600192 void ResetCommandBuffer(VkCommandBuffer commandBuffer);
193 bool PreCallValidateCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
194 VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
195 uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
196 uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700197 uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700198 bool PreCallValidateCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
199 const VkDependencyInfoKHR* pDependencyInfos) const override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600200 void PreCallRecordCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700201 VkBuffer* pBuffer, void* cb_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600202 void CreateAccelerationStructureBuildValidationState(GpuAssisted* device_GpuAssisted);
203 void DestroyAccelerationStructureBuildValidationState();
204 void PreCallRecordCmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo,
205 VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update,
206 VkAccelerationStructureNV dst, VkAccelerationStructureNV src,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700207 VkBuffer scratch, VkDeviceSize scratchOffset) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600208 void ProcessAccelerationStructureBuildValidationBuffer(VkQueue queue, CMD_BUFFER_STATE* cb_node);
209 void PreCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
210 const VkGraphicsPipelineCreateInfo* pCreateInfos,
211 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700212 void* cgpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600213 void PreCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
214 const VkComputePipelineCreateInfo* pCreateInfos,
215 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700216 void* ccpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600217 void PreCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
218 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
219 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700220 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700221 void PreCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
222 VkPipelineCache pipelineCache, uint32_t count,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500223 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
224 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700225 void* crtpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600226 void PostCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
227 const VkGraphicsPipelineCreateInfo* pCreateInfos,
228 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700229 void* cgpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600230 void PostCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
231 const VkComputePipelineCreateInfo* pCreateInfos,
232 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700233 void* ccpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600234 void PostCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
235 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
236 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700237 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700238 void PostCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
239 VkPipelineCache pipelineCache, uint32_t count,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500240 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
241 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700242 VkResult result, void* crtpl_state_data) override;
243 void PreCallRecordDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600244 void PreCallRecordDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600245 bool InstrumentShader(const VkShaderModuleCreateInfo* pCreateInfo, std::vector<unsigned int>& new_pgm,
246 uint32_t* unique_shader_id);
247 void PreCallRecordCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo,
248 const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700249 void* csm_state_data) override;
Tony-LunarG7de10e82020-11-24 11:31:55 -0700250 void AnalyzeAndGenerateMessages(VkCommandBuffer command_buffer, VkQueue queue, GpuAssistedBufferInfo &buffer_info,
251 uint32_t operation_index, uint32_t* const debug_output_buffer);
252
Tony-LunarGc28e28a2020-08-14 10:37:48 -0600253 void SetDescriptorInitialized(uint32_t* pData, uint32_t index, const cvdescriptorset::Descriptor* descriptor);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600254 void UpdateInstrumentationBuffer(CMD_BUFFER_STATE* cb_node);
Tony-LunarG7de10e82020-11-24 11:31:55 -0700255 const GpuVuid& GetGpuVuid(CMD_TYPE cmd_type) const;
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700256 void PreCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600257 void PostCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700258 VkResult result) override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700259 void PreCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits,
260 VkFence fence) override;
261 void PostCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence,
262 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600263 void PreCallRecordCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700264 uint32_t firstInstance) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600265 void PreCallRecordCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700266 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600267 void PreCallRecordCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700268 uint32_t stride) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600269 void PreCallRecordCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700270 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600271 void PreCallRecordCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
272 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700273 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600274 void PreCallRecordCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
275 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700276 uint32_t stride) override;
Tony-LunarG54176fb2020-12-02 10:47:22 -0700277 void PreCallRecordCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
278 VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700279 uint32_t vertexStride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600280 void PreCallRecordCmdDrawIndexedIndirectCountKHR(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 PreCallRecordCmdDrawIndexedIndirectCount(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;
286 void PreCallRecordCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600287 void PreCallRecordCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700288 uint32_t drawCount, uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600289 void PreCallRecordCmdDrawMeshTasksIndirectCountNV(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;
292 void PreCallRecordCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) override;
293 void PreCallRecordCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) override;
Tony-LunarGd13f9b52020-09-08 15:45:45 -0600294 void PreCallRecordCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700295 uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) override;
Tony-LunarG52c8c602020-09-10 16:29:56 -0600296 void PreCallRecordCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700297 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
298 uint32_t groupCountZ) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600299 void PreCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
300 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
301 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
302 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
303 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
304 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700305 uint32_t width, uint32_t height, uint32_t depth) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600306 void PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
307 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
308 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
309 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
310 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
311 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700312 uint32_t width, uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700313 void PreCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
314 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
315 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
316 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
317 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700318 uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700319 void PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
320 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
321 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
322 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
323 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700324 uint32_t height, uint32_t depth) override;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500325 void PreCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700326 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
327 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
328 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700329 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700330 VkDeviceAddress indirectDeviceAddress) override;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500331 void PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700332 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
333 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
334 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700335 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700336 VkDeviceAddress indirectDeviceAddress) override;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600337 void AllocateValidationResources(const VkCommandBuffer cmd_buffer, const VkPipelineBindPoint bind_point, CMD_TYPE cmd, const GpuAssistedCmdDrawIndirectState *cdic_state = nullptr);
338 void AllocatePreDrawValidationResources(GpuAssistedDeviceMemoryBlock output_block, GpuAssistedPreDrawResources& resources,
339 const LAST_BOUND_STATE& state, VkPipeline *pPipeline, const GpuAssistedCmdDrawIndirectState *cdic_state);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600340 void PostCallRecordGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700341 VkPhysicalDeviceProperties* pPhysicalDeviceProperties) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600342 void PostCallRecordGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700343 VkPhysicalDeviceProperties2* pPhysicalDeviceProperties2) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600344};