[spirv-reader][ir] Support R8 TexelFormat. Convert the SPIR-V `R8` texel format to the `r8unorm` format in IR. Bug: 429625756 Change-Id: I24970e28446464cd67f70b63135a8003b157f237 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/250875 Reviewed-by: James Price <jrprice@google.com> Reviewed-by: David Neto <dneto@google.com> Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/reader/parser/image_sampler_test.cc b/src/tint/lang/spirv/reader/parser/image_sampler_test.cc index 67f7dda..9b241f7 100644 --- a/src/tint/lang/spirv/reader/parser/image_sampler_test.cc +++ b/src/tint/lang/spirv/reader/parser/image_sampler_test.cc
@@ -392,6 +392,40 @@ )"); } +TEST_F(SpirvParserTest, Type_Image_TexelFormat_R8) { + EXPECT_IR(R"( + OpCapability Shader + OpCapability Sampled1D + OpCapability StorageImageExtendedFormats + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %main "main" + OpExecutionMode %main LocalSize 1 1 1 + OpDecorate %6 DescriptorSet 1 + OpDecorate %6 Binding 2 + %void = OpTypeVoid + %f32 = OpTypeFloat 32 + %img = OpTypeImage %f32 1D 0 0 0 1 R8 +%_ptr_Uniform = OpTypePointer UniformConstant %img + %6 = OpVariable %_ptr_Uniform UniformConstant + %ep_type = OpTypeFunction %void + %main = OpFunction %void None %ep_type + %main_start = OpLabel + OpReturn + OpFunctionEnd +)", + R"( +$B1: { # root + %1:ptr<handle, spirv.image<f32, 1d, not_depth, non_arrayed, single_sampled, sampling_compatible, r8unorm, read_write>, read> = var undef @binding_point(1, 2) +} + +%main = @compute @workgroup_size(1u, 1u, 1u) func():void { + $B2: { + ret + } +} +)"); +} + TEST_F(SpirvParserTest, Type_SampledImage) { options.sampler_mappings.insert({BindingPoint{1, 2}, BindingPoint{5, 6}});
diff --git a/src/tint/lang/spirv/reader/parser/parser.cc b/src/tint/lang/spirv/reader/parser/parser.cc index cf00c78..1e2e580 100644 --- a/src/tint/lang/spirv/reader/parser/parser.cc +++ b/src/tint/lang/spirv/reader/parser/parser.cc
@@ -800,6 +800,8 @@ return core::TexelFormat::kRgba8Uint; case spv::ImageFormat::Rgba8i: return core::TexelFormat::kRgba8Sint; + case spv::ImageFormat::R8: + return core::TexelFormat::kR8Unorm; // 16 bit channels case spv::ImageFormat::Rgba16ui: