blob: fe9eb3d1acc1518a35c9da06b19f85e0b642c2f2 [file] [log] [blame]
Tony-LunarG4c253372022-01-18 13:51:07 -07001/* Copyright (c) 2018-2022 The Khronos Group Inc.
2 * Copyright (c) 2018-2022 Valve Corporation
3 * Copyright (c) 2018-2022 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;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -060028class CMD_BUFFER_STATE_GPUAV;
Tony-LunarG0e564722019-03-19 16:09:14 -060029
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060030struct GpuAssistedDeviceMemoryBlock {
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060031 VkBuffer buffer;
Tony-LunarG0e564722019-03-19 16:09:14 -060032 VmaAllocation allocation;
Jeremy Gebbencbf22862021-03-03 12:01:22 -070033 layer_data::unordered_map<uint32_t, const cvdescriptorset::Descriptor*> update_at_submit;
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060034};
35
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060036struct GpuAssistedPreDrawResources {
37 VkDescriptorPool desc_pool;
38 VkDescriptorSet desc_set;
Tony-LunarGf0d4e2b2021-04-14 11:52:28 -060039 VkBuffer buffer;
40 VkDeviceSize offset;
41 uint32_t stride;
42 VkDeviceSize buf_size;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060043};
44
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060045struct GpuAssistedBufferInfo {
46 GpuAssistedDeviceMemoryBlock output_mem_block;
47 GpuAssistedDeviceMemoryBlock di_input_mem_block; // Descriptor Indexing input
48 GpuAssistedDeviceMemoryBlock bda_input_mem_block; // Buffer Device Address input
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060049 GpuAssistedPreDrawResources pre_draw_resources;
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060050 VkDescriptorSet desc_set;
51 VkDescriptorPool desc_pool;
Jason Macnak67407e72019-07-11 11:05:09 -070052 VkPipelineBindPoint pipeline_bind_point;
Tony-LunarG7de10e82020-11-24 11:31:55 -070053 CMD_TYPE cmd_type;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060054 GpuAssistedBufferInfo(GpuAssistedDeviceMemoryBlock output_mem_block, GpuAssistedDeviceMemoryBlock di_input_mem_block,
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060055 GpuAssistedDeviceMemoryBlock bda_input_mem_block, GpuAssistedPreDrawResources pre_draw_resources,
56 VkDescriptorSet desc_set, VkDescriptorPool desc_pool, VkPipelineBindPoint pipeline_bind_point,
57 CMD_TYPE cmd_type)
Jason Macnak67407e72019-07-11 11:05:09 -070058 : output_mem_block(output_mem_block),
Tony-LunarG8eb5a002019-07-25 16:49:00 -060059 di_input_mem_block(di_input_mem_block),
60 bda_input_mem_block(bda_input_mem_block),
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060061 pre_draw_resources(pre_draw_resources),
Jason Macnak67407e72019-07-11 11:05:09 -070062 desc_set(desc_set),
63 desc_pool(desc_pool),
Tony-LunarG7de10e82020-11-24 11:31:55 -070064 pipeline_bind_point(pipeline_bind_point),
65 cmd_type(cmd_type){};
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060066};
67
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060068struct GpuAssistedShaderTracker {
69 VkPipeline pipeline;
70 VkShaderModule shader_module;
sfricke-samsung7fac88a2022-01-26 11:44:22 -080071 std::vector<uint32_t> pgm;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060072};
73
Tony-LunarG7de10e82020-11-24 11:31:55 -070074struct GpuVuid {
75 const char* uniform_access_oob = kVUIDUndefined;
76 const char* storage_access_oob = kVUIDUndefined;
Tony-LunarG64aeaf72021-04-14 11:13:35 -060077 const char* count_exceeds_bufsize_1 = kVUIDUndefined;
78 const char* count_exceeds_bufsize = kVUIDUndefined;
Tony-LunarG1a7c9f92021-04-29 16:04:42 -060079 const char* count_exceeds_device_limit = kVUIDUndefined;
Tony-LunarG3723a3a2021-05-04 14:52:39 -060080 const char* first_instance_not_zero = kVUIDUndefined;
Tony-LunarG7de10e82020-11-24 11:31:55 -070081};
82
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060083struct GpuAssistedAccelerationStructureBuildValidationBufferInfo {
Jason Macnak83cfd582019-07-31 10:14:24 -070084 // The acceleration structure that is being built.
85 VkAccelerationStructureNV acceleration_structure = VK_NULL_HANDLE;
86
87 // The descriptor pool and descriptor set being used to validate a given build.
88 VkDescriptorPool descriptor_pool = VK_NULL_HANDLE;
89 VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
90
91 // The storage buffer used by the validating compute shader whichcontains info about
92 // the valid handles and which is written to communicate found invalid handles.
93 VkBuffer validation_buffer = VK_NULL_HANDLE;
94 VmaAllocation validation_buffer_allocation = VK_NULL_HANDLE;
95};
96
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060097struct GpuAssistedAccelerationStructureBuildValidationState {
Jason Macnak83cfd582019-07-31 10:14:24 -070098 bool initialized = false;
99
100 VkPipeline pipeline = VK_NULL_HANDLE;
101 VkPipelineLayout pipeline_layout = VK_NULL_HANDLE;
102
103 VkAccelerationStructureNV replacement_as = VK_NULL_HANDLE;
104 VmaAllocation replacement_as_allocation = VK_NULL_HANDLE;
105 uint64_t replacement_as_handle = 0;
106
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;
Tony-LunarG463bae32022-02-25 09:31:17 -0700114 VkPipeline dyn_rendering_pipeline = VK_NULL_HANDLE;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600115 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
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600127class CMD_BUFFER_STATE_GPUAV : public CMD_BUFFER_STATE {
128 public:
129 std::vector<GpuAssistedBufferInfo> gpuav_buffer_list;
130 std::vector<GpuAssistedAccelerationStructureBuildValidationBufferInfo> as_validation_buffers;
131
132 CMD_BUFFER_STATE_GPUAV(GpuAssisted* ga, VkCommandBuffer cb, const VkCommandBufferAllocateInfo* pCreateInfo,
Jeremy Gebbencd7fa282021-10-27 10:25:32 -0600133 const COMMAND_POOL_STATE* pool);
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600134
135 void Reset() final;
136};
137
Jeremy Gebben78684b12022-02-23 17:31:56 -0700138VALSTATETRACK_DERIVED_STATE_OBJECT(VkCommandBuffer, CMD_BUFFER_STATE_GPUAV, CMD_BUFFER_STATE);
139
Tony-LunarG99b880b2019-09-26 11:19:52 -0600140class GpuAssisted : public ValidationStateTracker {
Tony-LunarG1dce2392019-10-23 16:49:29 -0600141 VkPhysicalDeviceFeatures supported_features;
Tony-LunarG8eb5a002019-07-25 16:49:00 -0600142 VkBool32 shaderInt64;
Tony-LunarG99b880b2019-09-26 11:19:52 -0600143 uint32_t unique_shader_module_id = 0;
Tony-LunarG0e564722019-03-19 16:09:14 -0600144 uint32_t output_buffer_size;
Tony-LunarGc28e28a2020-08-14 10:37:48 -0600145 bool buffer_oob_enabled;
Tony-LunarG3723a3a2021-05-04 14:52:39 -0600146 bool validate_draw_indirect;
Tony-LunarG8eb5a002019-07-25 16:49:00 -0600147 std::map<VkDeviceAddress, VkDeviceSize> buffer_map;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600148 GpuAssistedAccelerationStructureBuildValidationState acceleration_structure_validation_state;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600149 GpuAssistedPreDrawValidationState pre_draw_validation_state;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600150
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700151 void PreRecordCommandBuffer(VkCommandBuffer command_buffer);
152 bool CommandBufferNeedsProcessing(VkCommandBuffer command_buffer);
153 void ProcessCommandBuffer(VkQueue queue, VkCommandBuffer command_buffer);
154
Tony-LunarG1dce2392019-10-23 16:49:29 -0600155 public:
Mark Lobodzinski0dcb87d2020-03-30 16:09:24 -0600156 GpuAssisted() { container_type = LayerObjectTypeGpuAssisted; }
157
Tony-LunarG1dce2392019-10-23 16:49:29 -0600158 bool aborted = false;
Tony-LunarG5c38b182020-06-10 16:15:32 -0600159 bool descriptor_indexing = false;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600160 VkDevice device;
161 VkPhysicalDevice physicalDevice;
162 uint32_t adjusted_max_desc_sets;
163 uint32_t desc_set_bind_index;
Tony-LunarG57ada962020-05-01 16:21:00 -0600164 VkDescriptorSetLayout debug_desc_layout = VK_NULL_HANDLE;
165 VkDescriptorSetLayout dummy_desc_layout = VK_NULL_HANDLE;
Tony-LunarGb5fae462020-03-05 12:43:25 -0700166 std::unique_ptr<UtilDescriptorSetManager> desc_set_manager;
Jeremy Gebbencbf22862021-03-03 12:01:22 -0700167 layer_data::unordered_map<uint32_t, GpuAssistedShaderTracker> shader_map;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600168 PFN_vkSetDeviceLoaderData vkSetDeviceLoaderData;
169 VmaAllocator vmaAllocator = {};
Tony-LunarGb5fae462020-03-05 12:43:25 -0700170 std::map<VkQueue, UtilQueueBarrierCommandInfo> queue_barrier_command_infos;
Tony-LunarG1dce2392019-10-23 16:49:29 -0600171 public:
Mark Lobodzinskia8151b02020-02-27 13:38:08 -0700172 template <typename T>
173 void ReportSetupProblem(T object, const char* const specific_message) const;
Tony-LunarG5c38b182020-06-10 16:15:32 -0600174 bool CheckForDescriptorIndexing(DeviceFeatures enabled_features) const;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600175 void PreCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700176 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, void* modified_create_info) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600177 void PostCallRecordCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700178 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice, VkResult result) override;
Mike Schuchardt2df08912020-12-15 16:28:09 -0800179 void PostCallRecordGetBufferDeviceAddress(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 PostCallRecordGetBufferDeviceAddressKHR(VkDevice device, const VkBufferDeviceAddressInfo* pInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700182 VkDeviceAddress address) override;
Mike Schuchardt2df08912020-12-15 16:28:09 -0800183 void PostCallRecordGetBufferDeviceAddressEXT(VkDevice device, const VkBufferDeviceAddressInfo* pInfo,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700184 VkDeviceAddress address) override;
185 void PreCallRecordDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) override;
186 void PreCallRecordDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600187 void PostCallRecordBindAccelerationStructureMemoryNV(VkDevice device, uint32_t bindInfoCount,
188 const VkBindAccelerationStructureMemoryInfoNV* pBindInfos,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700189 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600190 void PreCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
191 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700192 void* cpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600193 void PostCallRecordCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
194 const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700195 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600196 bool PreCallValidateCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
197 VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
198 uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
199 uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700200 uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700201 bool PreCallValidateCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
202 const VkDependencyInfoKHR* pDependencyInfos) const override;
Tony-LunarG1364cf52021-11-17 16:10:11 -0700203 bool PreCallValidateCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
204 const VkDependencyInfo* pDependencyInfos) const override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600205 void PreCallRecordCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700206 VkBuffer* pBuffer, void* cb_state_data) override;
James Rumble2f6e7bb2021-07-13 15:21:20 +0100207 void PostCallRecordCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
208 VkBuffer* pBuffer, VkResult result) override;
Jeremy Gebben21782012022-03-15 16:23:27 -0600209 void CreateAccelerationStructureBuildValidationState();
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600210 void DestroyAccelerationStructureBuildValidationState();
211 void PreCallRecordCmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo,
212 VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update,
213 VkAccelerationStructureNV dst, VkAccelerationStructureNV src,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700214 VkBuffer scratch, VkDeviceSize scratchOffset) override;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600215 void ProcessAccelerationStructureBuildValidationBuffer(VkQueue queue, CMD_BUFFER_STATE_GPUAV* cb_node);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600216 void PreCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
217 const VkGraphicsPipelineCreateInfo* pCreateInfos,
218 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700219 void* cgpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600220 void PreCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
221 const VkComputePipelineCreateInfo* pCreateInfos,
222 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700223 void* ccpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600224 void PreCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
225 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
226 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700227 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700228 void PreCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
229 VkPipelineCache pipelineCache, uint32_t count,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500230 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
231 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700232 void* crtpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600233 void PostCallRecordCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
234 const VkGraphicsPipelineCreateInfo* pCreateInfos,
235 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700236 void* cgpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600237 void PostCallRecordCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
238 const VkComputePipelineCreateInfo* pCreateInfos,
239 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700240 void* ccpl_state_data) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600241 void PostCallRecordCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t count,
242 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
243 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines, VkResult result,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700244 void* crtpl_state_data) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700245 void PostCallRecordCreateRayTracingPipelinesKHR(VkDevice device, VkDeferredOperationKHR deferredOperation,
246 VkPipelineCache pipelineCache, uint32_t count,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500247 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
248 const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700249 VkResult result, void* crtpl_state_data) override;
250 void PreCallRecordDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600251 void PreCallRecordDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) override;
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800252 bool InstrumentShader(const VkShaderModuleCreateInfo* pCreateInfo, std::vector<uint32_t>& new_pgm, uint32_t* unique_shader_id);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600253 void PreCallRecordCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo,
254 const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700255 void* csm_state_data) override;
Tony-LunarG7de10e82020-11-24 11:31:55 -0700256 void AnalyzeAndGenerateMessages(VkCommandBuffer command_buffer, VkQueue queue, GpuAssistedBufferInfo &buffer_info,
257 uint32_t operation_index, uint32_t* const debug_output_buffer);
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800258
Tony-LunarGc28e28a2020-08-14 10:37:48 -0600259 void SetDescriptorInitialized(uint32_t* pData, uint32_t index, const cvdescriptorset::Descriptor* descriptor);
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600260 void UpdateInstrumentationBuffer(CMD_BUFFER_STATE_GPUAV* cb_node);
Tony-LunarG7de10e82020-11-24 11:31:55 -0700261 const GpuVuid& GetGpuVuid(CMD_TYPE cmd_type) const;
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700262 void PreCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600263 void PostCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700264 VkResult result) override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700265 void PreCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits,
266 VkFence fence) override;
Tony-LunarG26fe2842021-11-16 14:07:59 -0700267 void PreCallRecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence) override;
268 void RecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence, VkResult result);
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700269 void PostCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence,
270 VkResult result) override;
Tony-LunarG26fe2842021-11-16 14:07:59 -0700271 void PostCallRecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence,
272 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600273 void PreCallRecordCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700274 uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600275 void PreCallRecordCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo,
276 uint32_t instanceCount, uint32_t firstInstance, uint32_t stride) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600277 void PreCallRecordCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700278 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600279 void PreCallRecordCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
280 const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount,
281 uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600282 void PreCallRecordCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700283 uint32_t stride) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600284 void PreCallRecordCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700285 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600286 void PreCallRecordCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
287 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700288 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600289 void PreCallRecordCmdDrawIndirectCount(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-LunarG54176fb2020-12-02 10:47:22 -0700292 void PreCallRecordCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
293 VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700294 uint32_t vertexStride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600295 void PreCallRecordCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
296 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700297 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600298 void PreCallRecordCmdDrawIndexedIndirectCount(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 PreCallRecordCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600302 void PreCallRecordCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700303 uint32_t drawCount, uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600304 void PreCallRecordCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
305 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700306 uint32_t stride) override;
307 void PreCallRecordCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) override;
308 void PreCallRecordCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) override;
Tony-LunarGd13f9b52020-09-08 15:45:45 -0600309 void PreCallRecordCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700310 uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) override;
Tony-LunarG52c8c602020-09-10 16:29:56 -0600311 void PreCallRecordCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700312 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
313 uint32_t groupCountZ) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600314 void PreCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
315 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
316 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
317 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
318 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
319 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700320 uint32_t width, uint32_t height, uint32_t depth) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600321 void PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
322 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
323 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
324 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
325 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
326 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700327 uint32_t width, uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700328 void PreCallRecordCmdTraceRaysKHR(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;
sourav parmarcd5fb182020-07-17 12:58:44 -0700334 void PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
335 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
336 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
337 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
338 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700339 uint32_t height, uint32_t depth) override;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500340 void PreCallRecordCmdTraceRaysIndirectKHR(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;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500346 void PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700347 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
348 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
349 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700350 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700351 VkDeviceAddress indirectDeviceAddress) override;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600352 void AllocateValidationResources(const VkCommandBuffer cmd_buffer, const VkPipelineBindPoint bind_point, CMD_TYPE cmd, const GpuAssistedCmdDrawIndirectState *cdic_state = nullptr);
353 void AllocatePreDrawValidationResources(GpuAssistedDeviceMemoryBlock output_block, GpuAssistedPreDrawResources& resources,
354 const LAST_BOUND_STATE& state, VkPipeline *pPipeline, const GpuAssistedCmdDrawIndirectState *cdic_state);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600355 void PostCallRecordGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700356 VkPhysicalDeviceProperties* pPhysicalDeviceProperties) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600357 void PostCallRecordGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700358 VkPhysicalDeviceProperties2* pPhysicalDeviceProperties2) override;
Jeremy Gebben3d22d582021-08-11 15:37:58 -0600359
Jeremy Gebben9f537102021-10-05 16:37:12 -0600360 std::shared_ptr<SHADER_MODULE_STATE> GetShaderModuleState(VkShaderModule shader_module) {
361 return Get<SHADER_MODULE_STATE>(shader_module);
362 }
363 std::shared_ptr<const SHADER_MODULE_STATE> GetShaderModuleState(VkShaderModule shader_module) const {
364 return Get<SHADER_MODULE_STATE>(shader_module);
365 }
366 std::shared_ptr<const PIPELINE_STATE> GetPipelineState(VkPipeline pipeline) const { return Get<PIPELINE_STATE>(pipeline); }
367 std::shared_ptr<PIPELINE_STATE> GetPipelineState(VkPipeline pipeline) { return Get<PIPELINE_STATE>(pipeline); }
368
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600369 const std::vector<GpuAssistedBufferInfo>& GetBufferInfo(const CMD_BUFFER_STATE* cb_node) const {
370 assert(cb_node);
371 return static_cast<const CMD_BUFFER_STATE_GPUAV*>(cb_node)->gpuav_buffer_list;
372 }
373
374 std::vector<GpuAssistedBufferInfo>& GetBufferInfo(CMD_BUFFER_STATE* cb_node) {
375 assert(cb_node);
376 return static_cast<CMD_BUFFER_STATE_GPUAV*>(cb_node)->gpuav_buffer_list;
377 }
378
379 std::shared_ptr<CMD_BUFFER_STATE> CreateCmdBufferState(VkCommandBuffer cb, const VkCommandBufferAllocateInfo* create_info,
Jeremy Gebbencd7fa282021-10-27 10:25:32 -0600380 const COMMAND_POOL_STATE* pool) final;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600381
382 void DestroyBuffer(GpuAssistedBufferInfo& buffer_info);
383 void DestroyBuffer(GpuAssistedAccelerationStructureBuildValidationBufferInfo& buffer_info);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600384};