Extract more StorageTexture information
BUG=tint:489
Change-Id: I03a15fdd156bf0c85b1afebb6e0e26fd44dff51f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/42060
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Auto-Submit: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index f699db5..d53f7a9 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -38,6 +38,7 @@
#include "src/type/matrix_type.h"
#include "src/type/multisampled_texture_type.h"
#include "src/type/sampled_texture_type.h"
+#include "src/type/storage_texture_type.h"
#include "src/type/struct_type.h"
#include "src/type/texture_type.h"
#include "src/type/type.h"
@@ -60,6 +61,131 @@
dest->insert(dest->end(), orig.begin(), orig.end());
}
+ResourceBinding::TextureDimension
+TypeTextureDimensionToResourceBindingTextureDimension(
+ const type::TextureDimension& type_dim) {
+ switch (type_dim) {
+ case type::TextureDimension::k1d:
+ return ResourceBinding::TextureDimension::k1d;
+ case type::TextureDimension::k1dArray:
+ return ResourceBinding::TextureDimension::k1dArray;
+ case type::TextureDimension::k2d:
+ return ResourceBinding::TextureDimension::k2d;
+ case type::TextureDimension::k2dArray:
+ return ResourceBinding::TextureDimension::k2dArray;
+ case type::TextureDimension::k3d:
+ return ResourceBinding::TextureDimension::k3d;
+ case type::TextureDimension::kCube:
+ return ResourceBinding::TextureDimension::kCube;
+ case type::TextureDimension::kCubeArray:
+ return ResourceBinding::TextureDimension::kCubeArray;
+ default:
+ return ResourceBinding::TextureDimension::kNone;
+ }
+}
+
+ResourceBinding::SampledKind BaseTypeToSampledKind(type::Type* base_type) {
+ if (!base_type) {
+ return ResourceBinding::SampledKind::kUnknown;
+ }
+
+ if (auto* at = base_type->As<type::Array>()) {
+ base_type = at->type();
+ } else if (auto* mt = base_type->As<type::Matrix>()) {
+ base_type = mt->type();
+ } else if (auto* vt = base_type->As<type::Vector>()) {
+ base_type = vt->type();
+ }
+
+ if (base_type->Is<type::F32>()) {
+ return ResourceBinding::SampledKind::kFloat;
+ } else if (base_type->Is<type::U32>()) {
+ return ResourceBinding::SampledKind::kUInt;
+ } else if (base_type->Is<type::I32>()) {
+ return ResourceBinding::SampledKind::kSInt;
+ } else {
+ return ResourceBinding::SampledKind::kUnknown;
+ }
+}
+
+ResourceBinding::ImageFormat TypeImageFormatToResourceBindingImageFormat(
+ const type::ImageFormat& image_format) {
+ switch (image_format) {
+ case type::ImageFormat::kR8Unorm:
+ return ResourceBinding::ImageFormat::kR8Unorm;
+ case type::ImageFormat::kR8Snorm:
+ return ResourceBinding::ImageFormat::kR8Snorm;
+ case type::ImageFormat::kR8Uint:
+ return ResourceBinding::ImageFormat::kR8Uint;
+ case type::ImageFormat::kR8Sint:
+ return ResourceBinding::ImageFormat::kR8Sint;
+ case type::ImageFormat::kR16Uint:
+ return ResourceBinding::ImageFormat::kR16Uint;
+ case type::ImageFormat::kR16Sint:
+ return ResourceBinding::ImageFormat::kR16Sint;
+ case type::ImageFormat::kR16Float:
+ return ResourceBinding::ImageFormat::kR16Float;
+ case type::ImageFormat::kRg8Unorm:
+ return ResourceBinding::ImageFormat::kRg8Unorm;
+ case type::ImageFormat::kRg8Snorm:
+ return ResourceBinding::ImageFormat::kRg8Snorm;
+ case type::ImageFormat::kRg8Uint:
+ return ResourceBinding::ImageFormat::kRg8Uint;
+ case type::ImageFormat::kRg8Sint:
+ return ResourceBinding::ImageFormat::kRg8Sint;
+ case type::ImageFormat::kR32Uint:
+ return ResourceBinding::ImageFormat::kR32Uint;
+ case type::ImageFormat::kR32Sint:
+ return ResourceBinding::ImageFormat::kR32Sint;
+ case type::ImageFormat::kR32Float:
+ return ResourceBinding::ImageFormat::kR32Float;
+ case type::ImageFormat::kRg16Uint:
+ return ResourceBinding::ImageFormat::kRg16Uint;
+ case type::ImageFormat::kRg16Sint:
+ return ResourceBinding::ImageFormat::kRg16Sint;
+ case type::ImageFormat::kRg16Float:
+ return ResourceBinding::ImageFormat::kRg16Float;
+ case type::ImageFormat::kRgba8Unorm:
+ return ResourceBinding::ImageFormat::kRgba8Unorm;
+ case type::ImageFormat::kRgba8UnormSrgb:
+ return ResourceBinding::ImageFormat::kRgba8UnormSrgb;
+ case type::ImageFormat::kRgba8Snorm:
+ return ResourceBinding::ImageFormat::kRgba8Snorm;
+ case type::ImageFormat::kRgba8Uint:
+ return ResourceBinding::ImageFormat::kRgba8Uint;
+ case type::ImageFormat::kRgba8Sint:
+ return ResourceBinding::ImageFormat::kRgba8Sint;
+ case type::ImageFormat::kBgra8Unorm:
+ return ResourceBinding::ImageFormat::kBgra8Unorm;
+ case type::ImageFormat::kBgra8UnormSrgb:
+ return ResourceBinding::ImageFormat::kBgra8UnormSrgb;
+ case type::ImageFormat::kRgb10A2Unorm:
+ return ResourceBinding::ImageFormat::kRgb10A2Unorm;
+ case type::ImageFormat::kRg11B10Float:
+ return ResourceBinding::ImageFormat::kRg11B10Float;
+ case type::ImageFormat::kRg32Uint:
+ return ResourceBinding::ImageFormat::kRg32Uint;
+ case type::ImageFormat::kRg32Sint:
+ return ResourceBinding::ImageFormat::kRg32Sint;
+ case type::ImageFormat::kRg32Float:
+ return ResourceBinding::ImageFormat::kRg32Float;
+ case type::ImageFormat::kRgba16Uint:
+ return ResourceBinding::ImageFormat::kRgba16Uint;
+ case type::ImageFormat::kRgba16Sint:
+ return ResourceBinding::ImageFormat::kRgba16Sint;
+ case type::ImageFormat::kRgba16Float:
+ return ResourceBinding::ImageFormat::kRgba16Float;
+ case type::ImageFormat::kRgba32Uint:
+ return ResourceBinding::ImageFormat::kRgba32Uint;
+ case type::ImageFormat::kRgba32Sint:
+ return ResourceBinding::ImageFormat::kRgba32Sint;
+ case type::ImageFormat::kRgba32Float:
+ return ResourceBinding::ImageFormat::kRgba32Float;
+ default:
+ return ResourceBinding::ImageFormat::kNone;
+ }
+}
+
} // namespace
Inspector::Inspector(const Program* program) : program_(program) {}
@@ -428,32 +554,8 @@
entry.binding = binding_info.binding->value();
auto* texture_type = decl->type()->UnwrapIfNeeded()->As<type::Texture>();
- switch (texture_type->dim()) {
- case type::TextureDimension::k1d:
- entry.dim = ResourceBinding::TextureDimension::k1d;
- break;
- case type::TextureDimension::k1dArray:
- entry.dim = ResourceBinding::TextureDimension::k1dArray;
- break;
- case type::TextureDimension::k2d:
- entry.dim = ResourceBinding::TextureDimension::k2d;
- break;
- case type::TextureDimension::k2dArray:
- entry.dim = ResourceBinding::TextureDimension::k2dArray;
- break;
- case type::TextureDimension::k3d:
- entry.dim = ResourceBinding::TextureDimension::k3d;
- break;
- case type::TextureDimension::kCube:
- entry.dim = ResourceBinding::TextureDimension::kCube;
- break;
- case type::TextureDimension::kCubeArray:
- entry.dim = ResourceBinding::TextureDimension::kCubeArray;
- break;
- default:
- entry.dim = ResourceBinding::TextureDimension::kNone;
- break;
- }
+ entry.dim = TypeTextureDimensionToResourceBindingTextureDimension(
+ texture_type->dim());
type::Type* base_type = nullptr;
if (multisampled_only) {
@@ -464,24 +566,7 @@
base_type =
texture_type->As<type::SampledTexture>()->type()->UnwrapIfNeeded();
}
-
- if (auto* at = base_type->As<type::Array>()) {
- base_type = at->type();
- } else if (auto* mt = base_type->As<type::Matrix>()) {
- base_type = mt->type();
- } else if (auto* vt = base_type->As<type::Vector>()) {
- base_type = vt->type();
- }
-
- if (base_type->Is<type::F32>()) {
- entry.sampled_kind = ResourceBinding::SampledKind::kFloat;
- } else if (base_type->Is<type::U32>()) {
- entry.sampled_kind = ResourceBinding::SampledKind::kUInt;
- } else if (base_type->Is<type::I32>()) {
- entry.sampled_kind = ResourceBinding::SampledKind::kSInt;
- } else {
- entry.sampled_kind = ResourceBinding::SampledKind::kUnknown;
- }
+ entry.sampled_kind = BaseTypeToSampledKind(base_type);
result.push_back(entry);
}
@@ -520,6 +605,16 @@
entry.bind_group = binding_info.group->value();
entry.binding = binding_info.binding->value();
+ auto* texture_type = decl->type()->UnwrapIfNeeded()->As<type::Texture>();
+ entry.dim = TypeTextureDimensionToResourceBindingTextureDimension(
+ texture_type->dim());
+
+ type::Type* base_type =
+ texture_type->As<type::StorageTexture>()->type()->UnwrapIfNeeded();
+ entry.sampled_kind = BaseTypeToSampledKind(base_type);
+ entry.image_format = TypeImageFormatToResourceBindingImageFormat(
+ texture_type->As<type::StorageTexture>()->image_format());
+
result.push_back(entry);
}
diff --git a/src/inspector/inspector.h b/src/inspector/inspector.h
index 38e59a1..eeab561 100644
--- a/src/inspector/inspector.h
+++ b/src/inspector/inspector.h
@@ -55,6 +55,45 @@
/// in SPIR-V OpTypeImage.
enum class SampledKind { kUnknown = -1, kFloat, kUInt, kSInt };
+ enum class ImageFormat {
+ kNone = -1,
+ kR8Unorm,
+ kR8Snorm,
+ kR8Uint,
+ kR8Sint,
+ kR16Uint,
+ kR16Sint,
+ kR16Float,
+ kRg8Unorm,
+ kRg8Snorm,
+ kRg8Uint,
+ kRg8Sint,
+ kR32Uint,
+ kR32Sint,
+ kR32Float,
+ kRg16Uint,
+ kRg16Sint,
+ kRg16Float,
+ kRgba8Unorm,
+ kRgba8UnormSrgb,
+ kRgba8Snorm,
+ kRgba8Uint,
+ kRgba8Sint,
+ kBgra8Unorm,
+ kBgra8UnormSrgb,
+ kRgb10A2Unorm,
+ kRg11B10Float,
+ kRg32Uint,
+ kRg32Sint,
+ kRg32Float,
+ kRgba16Uint,
+ kRgba16Sint,
+ kRgba16Float,
+ kRgba32Uint,
+ kRgba32Sint,
+ kRgba32Float,
+ };
+
/// kXXX maps to entries returned by GetXXXResourceBindings call.
enum class ResourceType {
kUniformBuffer,
@@ -80,6 +119,8 @@
TextureDimension dim;
/// Kind of data being sampled, if defined.
SampledKind sampled_kind;
+ /// Format of data, if defined.
+ ImageFormat image_format;
};
/// Extracts information from a program
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index ca6b110..001ebe6 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -760,7 +760,14 @@
public testing::TestWithParam<GetMultisampledTextureTestParams> {};
class InspectorGetStorageTextureResourceBindingsTest : public InspectorHelper,
public testing::Test {};
-typedef std::tuple<bool, type::TextureDimension, type::ImageFormat>
+
+typedef std::tuple<type::TextureDimension, ResourceBinding::TextureDimension>
+ DimensionParams;
+typedef std::tuple<type::ImageFormat,
+ ResourceBinding::ImageFormat,
+ ResourceBinding::SampledKind>
+ ImageFormatParams;
+typedef std::tuple<bool, DimensionParams, ImageFormatParams>
GetStorageTextureTestParams;
class InspectorGetStorageTextureResourceBindingsTestWithParam
: public InspectorHelper,
@@ -2507,9 +2514,18 @@
TEST_P(InspectorGetStorageTextureResourceBindingsTestWithParam, Simple) {
bool read_only;
+ DimensionParams dim_params;
+ ImageFormatParams format_params;
+ std::tie(read_only, dim_params, format_params) = GetParam();
+
type::TextureDimension dim;
+ ResourceBinding::TextureDimension expected_dim;
+ std::tie(dim, expected_dim) = dim_params;
+
type::ImageFormat format;
- std::tie(read_only, dim, format) = GetParam();
+ ResourceBinding::ImageFormat expected_format;
+ ResourceBinding::SampledKind expected_kind;
+ std::tie(format, expected_format, expected_kind) = format_params;
type::StorageTexture* st_type;
type::Type* st_subtype;
@@ -2555,6 +2571,9 @@
result[0].resource_type);
EXPECT_EQ(0u, result[0].bind_group);
EXPECT_EQ(0u, result[0].binding);
+ EXPECT_EQ(expected_dim, result[0].dim);
+ EXPECT_EQ(expected_format, result[0].image_format);
+ EXPECT_EQ(expected_kind, result[0].sampled_kind);
result = read_only
? inspector.GetWriteOnlyStorageTextureResourceBindings("ep")
@@ -2566,47 +2585,125 @@
INSTANTIATE_TEST_SUITE_P(
InspectorGetStorageTextureResourceBindingsTest,
InspectorGetStorageTextureResourceBindingsTestWithParam,
- testing::Combine(testing::Bool(),
- testing::Values(type::TextureDimension::k1d,
- type::TextureDimension::k1dArray,
- type::TextureDimension::k2d,
- type::TextureDimension::k2dArray,
- type::TextureDimension::k3d),
- testing::Values(type::ImageFormat::kR8Uint,
- type::ImageFormat::kR16Uint,
- type::ImageFormat::kRg8Uint,
- type::ImageFormat::kR32Uint,
- type::ImageFormat::kRg16Uint,
- type::ImageFormat::kRgba8Uint,
- type::ImageFormat::kRg32Uint,
- type::ImageFormat::kRgba16Uint,
- type::ImageFormat::kRgba32Uint,
- type::ImageFormat::kR8Sint,
- type::ImageFormat::kR16Sint,
- type::ImageFormat::kRg8Sint,
- type::ImageFormat::kR32Sint,
- type::ImageFormat::kRg16Sint,
- type::ImageFormat::kRgba8Sint,
- type::ImageFormat::kRg32Sint,
- type::ImageFormat::kRgba16Sint,
- type::ImageFormat::kRgba32Sint,
- type::ImageFormat::kR8Unorm,
- type::ImageFormat::kRg8Unorm,
- type::ImageFormat::kRgba8Unorm,
- type::ImageFormat::kRgba8UnormSrgb,
- type::ImageFormat::kBgra8Unorm,
- type::ImageFormat::kBgra8UnormSrgb,
- type::ImageFormat::kRgb10A2Unorm,
- type::ImageFormat::kR8Snorm,
- type::ImageFormat::kRg8Snorm,
- type::ImageFormat::kRgba8Snorm,
- type::ImageFormat::kR16Float,
- type::ImageFormat::kR32Float,
- type::ImageFormat::kRg16Float,
- type::ImageFormat::kRg11B10Float,
- type::ImageFormat::kRg32Float,
- type::ImageFormat::kRgba16Float,
- type::ImageFormat::kRgba32Float)));
+ testing::Combine(
+ testing::Bool(),
+ testing::Values(
+ std::make_tuple(type::TextureDimension::k1d,
+ ResourceBinding::TextureDimension::k1d),
+ std::make_tuple(type::TextureDimension::k1dArray,
+ ResourceBinding::TextureDimension::k1dArray),
+ std::make_tuple(type::TextureDimension::k2d,
+ ResourceBinding::TextureDimension::k2d),
+ std::make_tuple(type::TextureDimension::k2dArray,
+ ResourceBinding::TextureDimension::k2dArray),
+ std::make_tuple(type::TextureDimension::k3d,
+ ResourceBinding::TextureDimension::k3d)),
+ testing::Values(
+ std::make_tuple(type::ImageFormat::kR8Uint,
+ ResourceBinding::ImageFormat::kR8Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kR16Uint,
+ ResourceBinding::ImageFormat::kR16Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kRg8Uint,
+ ResourceBinding::ImageFormat::kRg8Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kR32Uint,
+ ResourceBinding::ImageFormat::kR32Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kRg16Uint,
+ ResourceBinding::ImageFormat::kRg16Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kRgba8Uint,
+ ResourceBinding::ImageFormat::kRgba8Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kRg32Uint,
+ ResourceBinding::ImageFormat::kRg32Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kRgba16Uint,
+ ResourceBinding::ImageFormat::kRgba16Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kRgba32Uint,
+ ResourceBinding::ImageFormat::kRgba32Uint,
+ ResourceBinding::SampledKind::kUInt),
+ std::make_tuple(type::ImageFormat::kR8Sint,
+ ResourceBinding::ImageFormat::kR8Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kR16Sint,
+ ResourceBinding::ImageFormat::kR16Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kRg8Sint,
+ ResourceBinding::ImageFormat::kRg8Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kR32Sint,
+ ResourceBinding::ImageFormat::kR32Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kRg16Sint,
+ ResourceBinding::ImageFormat::kRg16Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kRgba8Sint,
+ ResourceBinding::ImageFormat::kRgba8Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kRg32Sint,
+ ResourceBinding::ImageFormat::kRg32Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kRgba16Sint,
+ ResourceBinding::ImageFormat::kRgba16Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kRgba32Sint,
+ ResourceBinding::ImageFormat::kRgba32Sint,
+ ResourceBinding::SampledKind::kSInt),
+ std::make_tuple(type::ImageFormat::kR8Unorm,
+ ResourceBinding::ImageFormat::kR8Unorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRg8Unorm,
+ ResourceBinding::ImageFormat::kRg8Unorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRgba8Unorm,
+ ResourceBinding::ImageFormat::kRgba8Unorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRgba8UnormSrgb,
+ ResourceBinding::ImageFormat::kRgba8UnormSrgb,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kBgra8Unorm,
+ ResourceBinding::ImageFormat::kBgra8Unorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kBgra8UnormSrgb,
+ ResourceBinding::ImageFormat::kBgra8UnormSrgb,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRgb10A2Unorm,
+ ResourceBinding::ImageFormat::kRgb10A2Unorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kR8Snorm,
+ ResourceBinding::ImageFormat::kR8Snorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRg8Snorm,
+ ResourceBinding::ImageFormat::kRg8Snorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRgba8Snorm,
+ ResourceBinding::ImageFormat::kRgba8Snorm,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kR16Float,
+ ResourceBinding::ImageFormat::kR16Float,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kR32Float,
+ ResourceBinding::ImageFormat::kR32Float,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRg16Float,
+ ResourceBinding::ImageFormat::kRg16Float,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRg11B10Float,
+ ResourceBinding::ImageFormat::kRg11B10Float,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRg32Float,
+ ResourceBinding::ImageFormat::kRg32Float,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRgba16Float,
+ ResourceBinding::ImageFormat::kRgba16Float,
+ ResourceBinding::SampledKind::kFloat),
+ std::make_tuple(type::ImageFormat::kRgba32Float,
+ ResourceBinding::ImageFormat::kRgba32Float,
+ ResourceBinding::SampledKind::kFloat))));
} // namespace
} // namespace inspector