#pragma once
#include "gpu/resources/gpuav_subclasses.h"
namespace gpuav {
struct DescSetState;
void SetupShaderInstrumentationResources(Validator& gpuav, CommandBuffer& cmd_buffer, VkPipelineBindPoint bind_point,
const Location& loc);
bool LogInstrumentationError(Validator& gpuav, VkCommandBuffer cmd_buffer, const LogObjectList& objlist, uint32_t operation_index,
const uint32_t* error_record, const std::vector<DescSetState>& descriptor_sets,
VkPipelineBindPoint pipeline_bind_point, bool uses_shader_object, bool uses_robustness,
const Location& loc);
bool LogMessageInstBindlessDescriptor(Validator& gpuav, const uint32_t* error_record, std::string& out_error_msg,
std::string& out_vuid_msg, const std::vector<DescSetState>& descriptor_sets,
const Location& loc, bool uses_shader_object, bool& out_oob_access);
bool LogMessageInstNonBindlessOOB(Validator& gpuav, const uint32_t* error_record, std::string& out_error_msg,
std::string& out_vuid_msg, const std::vector<DescSetState>& descriptor_sets, const Location& loc,
bool uses_shader_object, bool& out_oob_access);
bool LogMessageInstBufferDeviceAddress(const uint32_t* error_record, std::string& out_error_msg, std::string& out_vuid_msg,
bool& out_oob_access);
bool LogMessageInstRayQuery(const uint32_t* error_record, std::string& out_error_msg, std::string& out_vuid_msg);
}