/* Copyright (c) 2020-2024 The Khronos Group Inc. * Copyright (c) 2020-2024 Valve Corporation * Copyright (c) 2020-2024 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include "containers/custom_containers.h" #include "generated/chassis.h" #include "gpu/core/gpu_state_tracker.h" #include "gpu/resources/gpu_resources.h" #include "gpu/spirv/instruction.h" #include "vma/vma.h" #include <vector> namespace gpuav { class Validator; } namespace chassis { struct ShaderInstrumentationMetadata; struct ShaderObjectInstrumentationData; } namespace gpu { // There are 3 ways to have a null VkShaderModule // 1. Use GPL for something like Vertex Input which won't have a shader // 2. Use Shader Objects // 3. Use VK_KHR_maintenance5 and inline your VkShaderModuleCreateInfo via VkPipelineShaderStageCreateInfo::pNext // // The first is handled because you have to link it in the end, but we need a way to differentiate 2 and 3 static const VkShaderModule kPipelineStageInfoHandle = …; // GPU Info shows 99% of devices have a maxBoundDescriptorSets of 32 or less, but some are 2^30 // We set a reasonable max because we have to pad the pipeline layout with dummy descriptor set layouts. static const uint32_t kMaxAdjustedBoundDescriptorSet = …; class SpirvCache { … }; struct GpuAssistedShaderTracker { … }; // Interface common to both GPU-AV and DebugPrintF. // Handles shader instrumentation (reserve a descriptor slot, create descriptor // sets, pipeline layout, hook into pipeline creation, etc...) class GpuShaderInstrumentor : public ValidationStateTracker { … }; } // namespace gpu