#include "src/tint/lang/wgsl/inspector/inspector.h"
#include <unordered_set>
#include <utility>
#include "src/tint/lang/core/builtin_value.h"
#include "src/tint/lang/core/fluent_types.h"
#include "src/tint/lang/core/interpolation_sampling.h"
#include "src/tint/lang/core/interpolation_type.h"
#include "src/tint/lang/core/type/array.h"
#include "src/tint/lang/core/type/bool.h"
#include "src/tint/lang/core/type/depth_multisampled_texture.h"
#include "src/tint/lang/core/type/depth_texture.h"
#include "src/tint/lang/core/type/external_texture.h"
#include "src/tint/lang/core/type/f16.h"
#include "src/tint/lang/core/type/f32.h"
#include "src/tint/lang/core/type/i32.h"
#include "src/tint/lang/core/type/input_attachment.h"
#include "src/tint/lang/core/type/matrix.h"
#include "src/tint/lang/core/type/multisampled_texture.h"
#include "src/tint/lang/core/type/sampled_texture.h"
#include "src/tint/lang/core/type/storage_texture.h"
#include "src/tint/lang/core/type/u32.h"
#include "src/tint/lang/core/type/vector.h"
#include "src/tint/lang/core/type/void.h"
#include "src/tint/lang/wgsl/ast/blend_src_attribute.h"
#include "src/tint/lang/wgsl/ast/bool_literal_expression.h"
#include "src/tint/lang/wgsl/ast/call_expression.h"
#include "src/tint/lang/wgsl/ast/float_literal_expression.h"
#include "src/tint/lang/wgsl/ast/id_attribute.h"
#include "src/tint/lang/wgsl/ast/identifier.h"
#include "src/tint/lang/wgsl/ast/input_attachment_index_attribute.h"
#include "src/tint/lang/wgsl/ast/int_literal_expression.h"
#include "src/tint/lang/wgsl/ast/interpolate_attribute.h"
#include "src/tint/lang/wgsl/ast/location_attribute.h"
#include "src/tint/lang/wgsl/ast/module.h"
#include "src/tint/lang/wgsl/ast/override.h"
#include "src/tint/lang/wgsl/ast/var.h"
#include "src/tint/lang/wgsl/extension.h"
#include "src/tint/lang/wgsl/sem/builtin_enum_expression.h"
#include "src/tint/lang/wgsl/sem/call.h"
#include "src/tint/lang/wgsl/sem/function.h"
#include "src/tint/lang/wgsl/sem/module.h"
#include "src/tint/lang/wgsl/sem/statement.h"
#include "src/tint/lang/wgsl/sem/struct.h"
#include "src/tint/lang/wgsl/sem/variable.h"
#include "src/tint/utils/containers/unique_vector.h"
#include "src/tint/utils/math/math.h"
#include "src/tint/utils/rtti/switch.h"
#include "src/tint/utils/text/string.h"
usingnamespacetint::core::fluent_types;
namespace tint::inspector {
namespace {
void AppendResourceBindings(std::vector<ResourceBinding>* dest,
const std::vector<ResourceBinding>& orig) { … }
std::tuple<ComponentType, CompositionType> CalculateComponentAndComposition(
const core::type::Type* type) { … }
}
Inspector::Inspector(const Program& program) : … { … }
Inspector::~Inspector() = default;
EntryPoint Inspector::GetEntryPoint(const tint::ast::Function* func) { … }
EntryPoint Inspector::GetEntryPoint(const std::string& entry_point_name) { … }
std::vector<EntryPoint> Inspector::GetEntryPoints() { … }
std::map<OverrideId, Scalar> Inspector::GetOverrideDefaultValues() { … }
std::map<std::string, OverrideId> Inspector::GetNamedOverrideIds() { … }
std::vector<ResourceBinding> Inspector::GetResourceBindings(const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetUniformBufferResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetStorageBufferResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetReadOnlyStorageBufferResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetSamplerResourceBindings(const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetComparisonSamplerResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetSampledTextureResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetMultisampledTextureResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetStorageTextureResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetTextureResourceBindings(
const std::string& entry_point,
const tint::TypeInfo* texture_type,
ResourceBinding::ResourceType resource_type) { … }
std::vector<ResourceBinding> Inspector::GetDepthTextureResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetDepthMultisampledTextureResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetExternalTextureResourceBindings(
const std::string& entry_point) { … }
std::vector<ResourceBinding> Inspector::GetInputAttachmentResourceBindings(
const std::string& entry_point) { … }
VectorRef<SamplerTexturePair> Inspector::GetSamplerTextureUses(const std::string& entry_point) { … }
std::vector<SamplerTexturePair> Inspector::GetSamplerTextureUses(const std::string& entry_point,
const BindingPoint& placeholder) { … }
std::vector<std::string> Inspector::GetUsedExtensionNames() { … }
std::vector<std::pair<std::string, Source>> Inspector::GetEnableDirectives() { … }
const ast::Function* Inspector::FindEntryPointByName(const std::string& name) { … }
void Inspector::AddEntryPointInOutVariables(std::string name,
std::string variable_name,
const core::type::Type* type,
VectorRef<const ast::Attribute*> attributes,
std::optional<uint32_t> location,
std::optional<uint32_t> color,
std::optional<uint32_t> blend_src,
std::vector<StageVariable>& variables) const { … }
bool Inspector::ContainsBuiltin(core::BuiltinValue builtin,
const core::type::Type* type,
VectorRef<const ast::Attribute*> attributes) const { … }
std::vector<ResourceBinding> Inspector::GetStorageBufferResourceBindingsImpl(
const std::string& entry_point,
bool read_only) { … }
std::vector<ResourceBinding> Inspector::GetSampledTextureResourceBindingsImpl(
const std::string& entry_point,
bool multisampled_only) { … }
std::vector<ResourceBinding> Inspector::GetStorageTextureResourceBindingsImpl(
const std::string& entry_point) { … }
void Inspector::GenerateSamplerTargets() { … }
std::tuple<InterpolationType, InterpolationSampling> Inspector::CalculateInterpolationData(
VectorRef<const ast::Attribute*> attributes) const { … }
uint32_t Inspector::ComputeWorkgroupStorageSize(const ast::Function* func) const { … }
uint32_t Inspector::ComputePushConstantSize(const ast::Function* func) const { … }
std::vector<PixelLocalMemberType> Inspector::ComputePixelLocalMemberTypes(
const ast::Function* func) const { … }
template <size_t N, typename F>
void Inspector::GetOriginatingResources(std::array<const ast::Expression*, N> exprs, F&& callback) { … }
std::vector<Inspector::LevelSampleInfo> Inspector::GetTextureQueries(const std::string& ep_name) { … }
}