blob: 159660e2d02b794459eb025b1f06478e594b6fc7 [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
Tony-LunarGb5fae462020-03-05 12:43:25 -070023#include "gpu_utils.h"
Jeremy Gebben5160e032022-03-28 14:57:43 -060024
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060025class GpuAssisted;
Tony-LunarG0e564722019-03-19 16:09:14 -060026
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060027struct GpuAssistedDeviceMemoryBlock {
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060028 VkBuffer buffer;
Tony-LunarG0e564722019-03-19 16:09:14 -060029 VmaAllocation allocation;
Jeremy Gebbencbf22862021-03-03 12:01:22 -070030 layer_data::unordered_map<uint32_t, const cvdescriptorset::Descriptor*> update_at_submit;
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060031};
32
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060033struct GpuAssistedPreDrawResources {
34 VkDescriptorPool desc_pool;
35 VkDescriptorSet desc_set;
Tony-LunarGf0d4e2b2021-04-14 11:52:28 -060036 VkBuffer buffer;
37 VkDeviceSize offset;
38 uint32_t stride;
39 VkDeviceSize buf_size;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060040};
41
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060042struct GpuAssistedBufferInfo {
43 GpuAssistedDeviceMemoryBlock output_mem_block;
44 GpuAssistedDeviceMemoryBlock di_input_mem_block; // Descriptor Indexing input
45 GpuAssistedDeviceMemoryBlock bda_input_mem_block; // Buffer Device Address input
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060046 GpuAssistedPreDrawResources pre_draw_resources;
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060047 VkDescriptorSet desc_set;
48 VkDescriptorPool desc_pool;
Jason Macnak67407e72019-07-11 11:05:09 -070049 VkPipelineBindPoint pipeline_bind_point;
Tony-LunarG7de10e82020-11-24 11:31:55 -070050 CMD_TYPE cmd_type;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060051 GpuAssistedBufferInfo(GpuAssistedDeviceMemoryBlock output_mem_block, GpuAssistedDeviceMemoryBlock di_input_mem_block,
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060052 GpuAssistedDeviceMemoryBlock bda_input_mem_block, GpuAssistedPreDrawResources pre_draw_resources,
53 VkDescriptorSet desc_set, VkDescriptorPool desc_pool, VkPipelineBindPoint pipeline_bind_point,
54 CMD_TYPE cmd_type)
Jason Macnak67407e72019-07-11 11:05:09 -070055 : output_mem_block(output_mem_block),
Tony-LunarG8eb5a002019-07-25 16:49:00 -060056 di_input_mem_block(di_input_mem_block),
57 bda_input_mem_block(bda_input_mem_block),
Tony-LunarGa3ec16c2021-04-06 12:19:57 -060058 pre_draw_resources(pre_draw_resources),
Jason Macnak67407e72019-07-11 11:05:09 -070059 desc_set(desc_set),
60 desc_pool(desc_pool),
Tony-LunarG7de10e82020-11-24 11:31:55 -070061 pipeline_bind_point(pipeline_bind_point),
62 cmd_type(cmd_type){};
Mark Lobodzinski2a3ee4a2019-03-13 13:11:39 -060063};
64
Tony-LunarG7de10e82020-11-24 11:31:55 -070065struct GpuVuid {
66 const char* uniform_access_oob = kVUIDUndefined;
67 const char* storage_access_oob = kVUIDUndefined;
Tony-LunarG64aeaf72021-04-14 11:13:35 -060068 const char* count_exceeds_bufsize_1 = kVUIDUndefined;
69 const char* count_exceeds_bufsize = kVUIDUndefined;
Tony-LunarG1a7c9f92021-04-29 16:04:42 -060070 const char* count_exceeds_device_limit = kVUIDUndefined;
Tony-LunarG3723a3a2021-05-04 14:52:39 -060071 const char* first_instance_not_zero = kVUIDUndefined;
Tony-LunarG7de10e82020-11-24 11:31:55 -070072};
73
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060074struct GpuAssistedAccelerationStructureBuildValidationBufferInfo {
Jason Macnak83cfd582019-07-31 10:14:24 -070075 // The acceleration structure that is being built.
76 VkAccelerationStructureNV acceleration_structure = VK_NULL_HANDLE;
77
78 // The descriptor pool and descriptor set being used to validate a given build.
79 VkDescriptorPool descriptor_pool = VK_NULL_HANDLE;
80 VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
81
82 // The storage buffer used by the validating compute shader whichcontains info about
83 // the valid handles and which is written to communicate found invalid handles.
84 VkBuffer validation_buffer = VK_NULL_HANDLE;
85 VmaAllocation validation_buffer_allocation = VK_NULL_HANDLE;
86};
87
Tony-LunarG2ba1cb32019-09-25 15:16:11 -060088struct GpuAssistedAccelerationStructureBuildValidationState {
Jason Macnak83cfd582019-07-31 10:14:24 -070089 bool initialized = false;
90
91 VkPipeline pipeline = VK_NULL_HANDLE;
92 VkPipelineLayout pipeline_layout = VK_NULL_HANDLE;
93
94 VkAccelerationStructureNV replacement_as = VK_NULL_HANDLE;
95 VmaAllocation replacement_as_allocation = VK_NULL_HANDLE;
96 uint64_t replacement_as_handle = 0;
97
Jason Macnak83cfd582019-07-31 10:14:24 -070098};
99
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600100struct GpuAssistedPreDrawValidationState {
101 bool globals_created = false;
102 VkShaderModule validation_shader_module = VK_NULL_HANDLE;
103 VkDescriptorSetLayout validation_ds_layout = VK_NULL_HANDLE;
104 VkPipelineLayout validation_pipeline_layout = VK_NULL_HANDLE;
Tony-LunarG463bae32022-02-25 09:31:17 -0700105 VkPipeline dyn_rendering_pipeline = VK_NULL_HANDLE;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600106 layer_data::unordered_map <VkRenderPass, VkPipeline> renderpass_to_pipeline;
107};
108
109struct GpuAssistedCmdDrawIndirectState {
110 VkBuffer buffer;
111 VkDeviceSize offset;
Tony-LunarG3723a3a2021-05-04 14:52:39 -0600112 uint32_t drawCount;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600113 uint32_t stride;
114 VkBuffer count_buffer;
115 VkDeviceSize count_buffer_offset;
116};
117
Jeremy Gebben135550d2022-03-21 07:15:07 -0600118namespace gpuav_state {
Jeremy Gebben5ca80b32022-04-11 10:58:39 -0600119class CommandBuffer : public gpu_utils_state::CommandBuffer {
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600120 public:
121 std::vector<GpuAssistedBufferInfo> gpuav_buffer_list;
122 std::vector<GpuAssistedAccelerationStructureBuildValidationBufferInfo> as_validation_buffers;
123
Jeremy Gebben135550d2022-03-21 07:15:07 -0600124 CommandBuffer(GpuAssisted* ga, VkCommandBuffer cb, const VkCommandBufferAllocateInfo* pCreateInfo,
125 const COMMAND_POOL_STATE* pool);
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600126
Jeremy Gebben5ca80b32022-04-11 10:58:39 -0600127 bool NeedsProcessing() const final { return !gpuav_buffer_list.empty() || hasBuildAccelerationStructureCmd; }
128
129 void Process(VkQueue queue) final;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600130 void Reset() final;
Jeremy Gebben5ca80b32022-04-11 10:58:39 -0600131
132 private:
133 void ProcessAccelerationStructure(VkQueue queue);
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600134};
Jeremy Gebben135550d2022-03-21 07:15:07 -0600135}; // namespace gpuav_state
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600136
Jeremy Gebben135550d2022-03-21 07:15:07 -0600137VALSTATETRACK_DERIVED_STATE_OBJECT(VkCommandBuffer, gpuav_state::CommandBuffer, CMD_BUFFER_STATE);
Jeremy Gebben78684b12022-02-23 17:31:56 -0700138
Jeremy Gebben5160e032022-03-28 14:57:43 -0600139class GpuAssisted : public GpuAssistedBase {
Tony-LunarG1dce2392019-10-23 16:49:29 -0600140 public:
Jeremy Gebben5160e032022-03-28 14:57:43 -0600141 GpuAssisted() {
142 setup_vuid = "UNASSIGNED-GPU-Assisted-Validation";
143 container_type = LayerObjectTypeGpuAssisted;
144 desired_features.vertexPipelineStoresAndAtomics = true;
145 desired_features.fragmentStoresAndAtomics = true;
146 desired_features.shaderInt64 = true;
147 }
Mark Lobodzinski0dcb87d2020-03-30 16:09:24 -0600148
Tony-LunarG5c38b182020-06-10 16:15:32 -0600149 bool CheckForDescriptorIndexing(DeviceFeatures enabled_features) const;
Jeremy Gebben36a3b832022-03-23 10:54:18 -0600150 void CreateDevice(const VkDeviceCreateInfo* pCreateInfo) override;
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700151 void PreCallRecordDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600152 void PostCallRecordBindAccelerationStructureMemoryNV(VkDevice device, uint32_t bindInfoCount,
153 const VkBindAccelerationStructureMemoryInfoNV* pBindInfos,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700154 VkResult result) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600155 bool PreCallValidateCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
156 VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
157 uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
158 uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700159 uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700160 bool PreCallValidateCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
161 const VkDependencyInfoKHR* pDependencyInfos) const override;
Tony-LunarG1364cf52021-11-17 16:10:11 -0700162 bool PreCallValidateCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
163 const VkDependencyInfo* pDependencyInfos) const override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600164 void PreCallRecordCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700165 VkBuffer* pBuffer, void* cb_state_data) override;
Jeremy Gebben21782012022-03-15 16:23:27 -0600166 void CreateAccelerationStructureBuildValidationState();
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600167 void DestroyAccelerationStructureBuildValidationState();
168 void PreCallRecordCmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo,
169 VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update,
170 VkAccelerationStructureNV dst, VkAccelerationStructureNV src,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700171 VkBuffer scratch, VkDeviceSize scratchOffset) override;
Jeremy Gebben135550d2022-03-21 07:15:07 -0600172 void ProcessAccelerationStructureBuildValidationBuffer(VkQueue queue, gpuav_state::CommandBuffer* cb_node);
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600173 void PreCallRecordDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) override;
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800174 bool InstrumentShader(const VkShaderModuleCreateInfo* pCreateInfo, std::vector<uint32_t>& new_pgm, uint32_t* unique_shader_id);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600175 void PreCallRecordCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo,
176 const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700177 void* csm_state_data) override;
Tony-LunarG7de10e82020-11-24 11:31:55 -0700178 void AnalyzeAndGenerateMessages(VkCommandBuffer command_buffer, VkQueue queue, GpuAssistedBufferInfo &buffer_info,
179 uint32_t operation_index, uint32_t* const debug_output_buffer);
sfricke-samsung7fac88a2022-01-26 11:44:22 -0800180
Tony-LunarGc28e28a2020-08-14 10:37:48 -0600181 void SetDescriptorInitialized(uint32_t* pData, uint32_t index, const cvdescriptorset::Descriptor* descriptor);
Jeremy Gebben135550d2022-03-21 07:15:07 -0600182 void UpdateInstrumentationBuffer(gpuav_state::CommandBuffer* cb_node);
Tony-LunarG7de10e82020-11-24 11:31:55 -0700183 const GpuVuid& GetGpuVuid(CMD_TYPE cmd_type) const;
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700184 void PreCallRecordQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) override;
Jeremy Gebbena3705f42021-01-19 16:47:43 -0700185 void PreCallRecordQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits,
186 VkFence fence) override;
Tony-LunarG26fe2842021-11-16 14:07:59 -0700187 void PreCallRecordQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600188 void PreCallRecordCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700189 uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600190 void PreCallRecordCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo,
191 uint32_t instanceCount, uint32_t firstInstance, uint32_t stride) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600192 void PreCallRecordCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700193 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) override;
Tony-LunarG745150c2021-07-02 15:07:31 -0600194 void PreCallRecordCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
195 const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount,
196 uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600197 void PreCallRecordCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700198 uint32_t stride) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600199 void PreCallRecordCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700200 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600201 void PreCallRecordCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
202 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700203 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600204 void PreCallRecordCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
205 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700206 uint32_t stride) override;
Tony-LunarG54176fb2020-12-02 10:47:22 -0700207 void PreCallRecordCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
208 VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700209 uint32_t vertexStride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600210 void PreCallRecordCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
211 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700212 uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600213 void PreCallRecordCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
214 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700215 uint32_t stride) override;
216 void PreCallRecordCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600217 void PreCallRecordCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700218 uint32_t drawCount, uint32_t stride) override;
Tony-LunarG2fb8ff02020-06-11 12:45:07 -0600219 void PreCallRecordCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
220 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700221 uint32_t stride) override;
222 void PreCallRecordCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) override;
223 void PreCallRecordCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) override;
Tony-LunarGd13f9b52020-09-08 15:45:45 -0600224 void PreCallRecordCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700225 uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) override;
Tony-LunarG52c8c602020-09-10 16:29:56 -0600226 void PreCallRecordCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700227 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
228 uint32_t groupCountZ) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600229 void PreCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
230 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
231 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
232 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
233 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
234 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700235 uint32_t width, uint32_t height, uint32_t depth) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600236 void PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
237 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
238 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
239 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
240 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
241 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700242 uint32_t width, uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700243 void PreCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
244 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
245 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
246 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
247 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700248 uint32_t height, uint32_t depth) override;
sourav parmarcd5fb182020-07-17 12:58:44 -0700249 void PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
250 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
251 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
252 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
253 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700254 uint32_t height, uint32_t depth) override;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500255 void PreCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700256 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
257 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
258 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700259 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700260 VkDeviceAddress indirectDeviceAddress) override;
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500261 void PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700262 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
263 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
264 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -0700265 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700266 VkDeviceAddress indirectDeviceAddress) override;
Tony-LunarGa3ec16c2021-04-06 12:19:57 -0600267 void AllocateValidationResources(const VkCommandBuffer cmd_buffer, const VkPipelineBindPoint bind_point, CMD_TYPE cmd, const GpuAssistedCmdDrawIndirectState *cdic_state = nullptr);
268 void AllocatePreDrawValidationResources(GpuAssistedDeviceMemoryBlock output_block, GpuAssistedPreDrawResources& resources,
269 const LAST_BOUND_STATE& state, VkPipeline *pPipeline, const GpuAssistedCmdDrawIndirectState *cdic_state);
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600270 void PostCallRecordGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700271 VkPhysicalDeviceProperties* pPhysicalDeviceProperties) override;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600272 void PostCallRecordGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
Mark Lobodzinskib8e22b52020-12-03 15:22:35 -0700273 VkPhysicalDeviceProperties2* pPhysicalDeviceProperties2) override;
Jeremy Gebben3d22d582021-08-11 15:37:58 -0600274
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600275 std::shared_ptr<CMD_BUFFER_STATE> CreateCmdBufferState(VkCommandBuffer cb, const VkCommandBufferAllocateInfo* create_info,
Jeremy Gebbencd7fa282021-10-27 10:25:32 -0600276 const COMMAND_POOL_STATE* pool) final;
Jeremy Gebbenf6bb4bb2021-08-11 15:41:09 -0600277
278 void DestroyBuffer(GpuAssistedBufferInfo& buffer_info);
279 void DestroyBuffer(GpuAssistedAccelerationStructureBuildValidationBufferInfo& buffer_info);
Jeremy Gebben14499e82022-03-17 11:03:10 -0600280
281 private:
282 void PreRecordCommandBuffer(VkCommandBuffer command_buffer);
Jeremy Gebben14499e82022-03-17 11:03:10 -0600283
Jeremy Gebben14499e82022-03-17 11:03:10 -0600284 VkBool32 shaderInt64;
Jeremy Gebben14499e82022-03-17 11:03:10 -0600285 bool buffer_oob_enabled;
286 bool validate_draw_indirect;
Jeremy Gebben14499e82022-03-17 11:03:10 -0600287 GpuAssistedAccelerationStructureBuildValidationState acceleration_structure_validation_state;
288 GpuAssistedPreDrawValidationState pre_draw_validation_state;
289
Jeremy Gebben14499e82022-03-17 11:03:10 -0600290 bool descriptor_indexing = false;
Tony-LunarG2ba1cb32019-09-25 15:16:11 -0600291};