// Copyright 2021 The Tint Authors. // // 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. #ifndef SRC_TINT_INSPECTOR_RESOURCE_BINDING_H_ #define SRC_TINT_INSPECTOR_RESOURCE_BINDING_H_ #include #include "src/tint/ast/storage_texture.h" #include "src/tint/ast/texture.h" // Forward declarations namespace tint::sem { class Type; } // namespace tint::sem namespace tint::inspector { /// Container for information about how a resource is bound struct ResourceBinding { /// The dimensionality of a texture enum class TextureDimension { /// Invalid texture kNone = -1, /// 1 dimensional texture k1d, /// 2 dimensional texture k2d, /// 2 dimensional array texture k2dArray, /// 3 dimensional texture k3d, /// cube texture kCube, /// cube array texture kCubeArray, }; /// Component type of the texture's data. Same as the Sampled Type parameter /// in SPIR-V OpTypeImage. enum class SampledKind { kUnknown = -1, kFloat, kUInt, kSInt }; /// Enumerator of texel image formats enum class TexelFormat { kNone = -1, kRgba8Unorm, kRgba8Snorm, kRgba8Uint, kRgba8Sint, kRgba16Uint, kRgba16Sint, kRgba16Float, kR32Uint, kR32Sint, kR32Float, kRg32Uint, kRg32Sint, kRg32Float, kRgba32Uint, kRgba32Sint, kRgba32Float, }; /// kXXX maps to entries returned by GetXXXResourceBindings call. enum class ResourceType { kUniformBuffer, kStorageBuffer, kReadOnlyStorageBuffer, kSampler, kComparisonSampler, kSampledTexture, kMultisampledTexture, kWriteOnlyStorageTexture, kDepthTexture, kDepthMultisampledTexture, kExternalTexture }; /// Type of resource that is bound. ResourceType resource_type; /// Bind group the binding belongs uint32_t bind_group; /// Identifier to identify this binding within the bind group uint32_t binding; /// Size for this binding, in bytes, if defined. uint64_t size; /// Size for this binding without trailing structure padding, in bytes, if /// defined. uint64_t size_no_padding; /// Dimensionality of this binding, if defined. TextureDimension dim; /// Kind of data being sampled, if defined. SampledKind sampled_kind; /// Format of data, if defined. TexelFormat image_format; }; /// Convert from internal ast::TextureDimension to public /// ResourceBinding::TextureDimension /// @param type_dim internal value to convert from /// @returns the publicly visible equivalent ResourceBinding::TextureDimension TypeTextureDimensionToResourceBindingTextureDimension( const ast::TextureDimension& type_dim); /// Infer ResourceBinding::SampledKind for a given sem::Type /// @param base_type internal type to infer from /// @returns the publicly visible equivalent ResourceBinding::SampledKind BaseTypeToSampledKind(const sem::Type* base_type); /// Convert from internal ast::TexelFormat to public /// ResourceBinding::TexelFormat /// @param image_format internal value to convert from /// @returns the publicly visible equivalent ResourceBinding::TexelFormat TypeTexelFormatToResourceBindingTexelFormat( const ast::TexelFormat& image_format); } // namespace tint::inspector #endif // SRC_TINT_INSPECTOR_RESOURCE_BINDING_H_