[tint][hlsl] Add support for emitting resource tables This is the Tint portion of this change. A followup CL that depends on this contains the Dawn portion. - Modified GenerateResourceTableConfig bindpoint values, specifically ensuring the groups are different, because HLSL does not allow overlapping registers. - ResourceTable transform: renamed "tint_resource_table_buffer" to "tint_resource_table_metadata_struct" and added a name for var "tint_resource_table_metadata". - Implemented ResourceTableHelper::GenerateVars for HLSL that generates a var for all input resource types, each in its own group, that the printer emits as unbounded arrays. - Implemented HLSL printer to emit type::ResourceTable unbounded arrays. - HLSL raise calls ResourceTable transform. - tint cmd adds gen_options.resource_table. - HLSL CanGenerate fails if attempting to emit resource table calls when compiler is FXC. Although it can work, we've chosen to not support bindless with FXC for Dawn. - Regen'd Tint e2e tests. Bug: 473354062 Change-Id: Ic275115ad74abd4ce7fa68acc138836acaa2f85e Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/289595 Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/tint/api/common/resource_table_config.h b/src/tint/api/common/resource_table_config.h index 28eab08..e47ae49 100644 --- a/src/tint/api/common/resource_table_config.h +++ b/src/tint/api/common/resource_table_config.h
@@ -58,6 +58,7 @@ BindingPoint resource_table_binding; // The binding point for the supporting storage buffer. This is a post-remapping binding point. + // TODO(crbug.com/435317394): Rename to metadata_buffer_binding BindingPoint storage_buffer_binding; // The ordering of default bindings which are placed after the user bindings. These will be used @@ -91,6 +92,7 @@ resource_table_binding, storage_buffer_binding, default_binding_type_order); + TINT_REFLECT_EQUALS(ResourceTableConfig); }; } // namespace tint
diff --git a/src/tint/cmd/tint/main.cc b/src/tint/cmd/tint/main.cc index a220a5a..c335293 100644 --- a/src/tint/cmd/tint/main.cc +++ b/src/tint/cmd/tint/main.cc
@@ -1197,6 +1197,7 @@ gen_options.compiler = for_fxc ? tint::hlsl::writer::Options::Compiler::kFXC : tint::hlsl::writer::Options::Compiler::kDXC; gen_options.bindings = tint::GenerateBindings(ir, options.ep_name, false, false); + gen_options.resource_table = tint::core::ir::transform::GenerateResourceTableConfig(ir); // Run SubstituteOverrides to replace override instructions with constants. // This needs to run after SingleEntryPoint which removes unused overrides.
diff --git a/src/tint/lang/core/ir/transform/resource_table.cc b/src/tint/lang/core/ir/transform/resource_table.cc index 8e116e5..696e320 100644 --- a/src/tint/lang/core/ir/transform/resource_table.cc +++ b/src/tint/lang/core/ir/transform/resource_table.cc
@@ -181,14 +181,14 @@ } core::ir::Var* InjectStorageBuffer(const BindingPoint& bp) { - auto* str = ty.Struct(ir.symbols.New("tint_resource_table_buffer"), + auto* str = ty.Struct(ir.symbols.New("tint_resource_table_metadata_struct"), Vector<core::type::Manager::StructMemberDesc, 2>{ {ir.symbols.New("array_length"), ty.u32()}, {ir.symbols.New("bindings"), ty.array<u32>()}, }); auto* sb_ty = ty.ptr(storage, str, read); - auto* sb = b.Var(sb_ty); + auto* sb = b.Var("tint_resource_table_metadata", sb_ty); sb->SetBindingPoint(bp.group, bp.binding); return sb;
diff --git a/src/tint/lang/core/ir/transform/resource_table_helper.cc b/src/tint/lang/core/ir/transform/resource_table_helper.cc index a3870c7..477c6bd 100644 --- a/src/tint/lang/core/ir/transform/resource_table_helper.cc +++ b/src/tint/lang/core/ir/transform/resource_table_helper.cc
@@ -38,8 +38,8 @@ std::optional<ResourceTableConfig> GenerateResourceTableConfig(Module& mod) { ResourceTableConfig cfg{ - .resource_table_binding = BindingPoint{.group = 42, .binding = 41}, - .storage_buffer_binding = BindingPoint{.group = 42, .binding = 42}, + .resource_table_binding = BindingPoint{.group = 43, .binding = 51}, + .storage_buffer_binding = BindingPoint{.group = 42, .binding = 52}, .default_binding_type_order = {}, };
diff --git a/src/tint/lang/core/ir/transform/resource_table_test.cc b/src/tint/lang/core/ir/transform/resource_table_test.cc index ef2268c..9533a40 100644 --- a/src/tint/lang/core/ir/transform/resource_table_test.cc +++ b/src/tint/lang/core/ir/transform/resource_table_test.cc
@@ -93,14 +93,14 @@ )"; auto* expect = R"( -tint_resource_table_buffer = struct @align(4) { +tint_resource_table_metadata_struct = struct @align(4) { array_length:u32 @offset(0) bindings:array<u32> @offset(4) } $B1: { # root %texture:ptr<handle, texture_storage_2d<rgba8unorm, write>, read> = var undef @binding_point(3, 2) - %2:ptr<storage, tint_resource_table_buffer, read> = var undef @binding_point(1, 2) + %tint_resource_table_metadata:ptr<storage, tint_resource_table_metadata_struct, read> = var undef @binding_point(1, 2) } %foo = func():void { @@ -148,7 +148,7 @@ )"; auto* expect = R"( -tint_resource_table_buffer = struct @align(4) { +tint_resource_table_metadata_struct = struct @align(4) { array_length:u32 @offset(0) bindings:array<u32> @offset(4) } @@ -158,7 +158,7 @@ %2:ptr<handle, resource_table<texture_1d<f32, filterable>>, read> = var undef @binding_point(0, 1) %3:ptr<handle, resource_table<texture_3d<i32>>, read> = var undef @binding_point(0, 1) %4:ptr<handle, resource_table<texture_2d_array<u32>>, read> = var undef @binding_point(0, 1) - %5:ptr<storage, tint_resource_table_buffer, read> = var undef @binding_point(1, 2) + %tint_resource_table_metadata:ptr<storage, tint_resource_table_metadata_struct, read> = var undef @binding_point(1, 2) } %foo = func():void { @@ -207,7 +207,7 @@ )"; auto* expect = R"( -tint_resource_table_buffer = struct @align(4) { +tint_resource_table_metadata_struct = struct @align(4) { array_length:u32 @offset(0) bindings:array<u32> @offset(4) } @@ -216,17 +216,17 @@ %1:ptr<handle, resource_table<texture_1d<f32, filterable>>, read> = var undef @binding_point(0, 1) %2:ptr<handle, resource_table<texture_3d<i32>>, read> = var undef @binding_point(0, 1) %3:ptr<handle, resource_table<texture_2d_array<u32>>, read> = var undef @binding_point(0, 1) - %4:ptr<storage, tint_resource_table_buffer, read> = var undef @binding_point(1, 2) + %tint_resource_table_metadata:ptr<storage, tint_resource_table_metadata_struct, read> = var undef @binding_point(1, 2) } %foo = func():void { $B2: { - %6:ptr<storage, u32, read> = access %4, 0u + %6:ptr<storage, u32, read> = access %tint_resource_table_metadata, 0u %7:u32 = load %6 %8:bool = lt 1u, %7 %9:bool = if %8 [t: $B3, f: $B4] { # if_1 $B3: { # true - %10:ptr<storage, u32, read> = access %4, 1u, 1u + %10:ptr<storage, u32, read> = access %tint_resource_table_metadata, 1u, 1u %11:u32 = load %10 %12:bool = eq %11, 12u exit_if %12 # if_1 @@ -278,7 +278,7 @@ )"; auto* expect = R"( -tint_resource_table_buffer = struct @align(4) { +tint_resource_table_metadata_struct = struct @align(4) { array_length:u32 @offset(0) bindings:array<u32> @offset(4) } @@ -287,17 +287,17 @@ %1:ptr<handle, resource_table<texture_1d<f32, filterable>>, read> = var undef @binding_point(0, 1) %2:ptr<handle, resource_table<texture_3d<i32>>, read> = var undef @binding_point(0, 1) %3:ptr<handle, resource_table<texture_2d_array<u32>>, read> = var undef @binding_point(0, 1) - %4:ptr<storage, tint_resource_table_buffer, read> = var undef @binding_point(1, 2) + %tint_resource_table_metadata:ptr<storage, tint_resource_table_metadata_struct, read> = var undef @binding_point(1, 2) } %foo = func():void { $B2: { - %6:ptr<storage, u32, read> = access %4, 0u + %6:ptr<storage, u32, read> = access %tint_resource_table_metadata, 0u %7:u32 = load %6 %8:bool = lt 1u, %7 %9:bool = if %8 [t: $B3, f: $B4] { # if_1 $B3: { # true - %10:ptr<storage, u32, read> = access %4, 1u, 1u + %10:ptr<storage, u32, read> = access %tint_resource_table_metadata, 1u, 1u %11:u32 = load %10 %12:bool = eq %11, 12u exit_if %12 # if_1 @@ -311,7 +311,7 @@ exit_if 1u # if_2 } $B6: { # false - %14:ptr<storage, u32, read> = access %4, 0u + %14:ptr<storage, u32, read> = access %tint_resource_table_metadata, 0u %15:u32 = load %14 %16:u32 = add 2u, %15 exit_if %16 # if_2
diff --git a/src/tint/lang/hlsl/writer/common/options.h b/src/tint/lang/hlsl/writer/common/options.h index 87979f8..c6c1ef2 100644 --- a/src/tint/lang/hlsl/writer/common/options.h +++ b/src/tint/lang/hlsl/writer/common/options.h
@@ -36,6 +36,7 @@ #include "src/tint/api/common/binding_point.h" #include "src/tint/api/common/bindings.h" +#include "src/tint/api/common/resource_table_config.h" #include "src/tint/api/common/substitute_overrides_config.h" #include "src/tint/lang/core/enums.h" #include "src/tint/utils/math/hash.h" @@ -255,6 +256,9 @@ /// Pixel local configuration PixelLocalOptions pixel_local; + /// Resource table information + std::optional<ResourceTableConfig> resource_table; + // Configuration for substitute overrides SubstituteOverridesConfig substitute_overrides_config = {}; @@ -282,6 +286,7 @@ bindings, ignored_by_robustness_transform, pixel_local, + resource_table, substitute_overrides_config); TINT_REFLECT_EQUALS(Options); };
diff --git a/src/tint/lang/hlsl/writer/printer/printer.cc b/src/tint/lang/hlsl/writer/printer/printer.cc index 7ec198c..613353a 100644 --- a/src/tint/lang/hlsl/writer/printer/printer.cc +++ b/src/tint/lang/hlsl/writer/printer/printer.cc
@@ -90,6 +90,7 @@ #include "src/tint/lang/core/type/matrix.h" #include "src/tint/lang/core/type/multisampled_texture.h" #include "src/tint/lang/core/type/pointer.h" +#include "src/tint/lang/core/type/resource_table.h" #include "src/tint/lang/core/type/sampled_texture.h" #include "src/tint/lang/core/type/sampler.h" #include "src/tint/lang/core/type/storage_texture.h" @@ -647,6 +648,8 @@ auto* type_for_register = ptr->StoreType(); if (auto* arr = type_for_register->As<core::type::BindingArray>()) { type_for_register = arr->ElemType(); + } else if (auto* rt = type_for_register->As<core::type::ResourceTable>()) { + type_for_register = rt->GetBindingType(); } char register_space = Switch( @@ -1409,6 +1412,14 @@ }, [&](const core::type::Sampler* sampler) { EmitSamplerType(out, sampler); }, [&](const core::type::Texture* tex) { EmitTextureType(out, tex); }, + [&](const core::type::ResourceTable* rt) { + // We want to emit an unbounded array of the internal binding type + // e.g. "Texture1D<float4> tint_bindless[]" + EmitType(out, rt->GetBindingType()); + TINT_ASSERT(!name.empty() && name_printed); + out << " " << name << "[]"; + *name_printed = true; + }, TINT_ICE_ON_NO_MATCH); }
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.bazel b/src/tint/lang/hlsl/writer/raise/BUILD.bazel index e66a13c..e61de40 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.bazel +++ b/src/tint/lang/hlsl/writer/raise/BUILD.bazel
@@ -51,6 +51,7 @@ "raise.cc", "replace_default_only_switch.cc", "replace_non_indexable_mat_vec_stores.cc", + "resource_table_helper.cc", "shader_io.cc", ], hdrs = [ @@ -66,6 +67,7 @@ "raise.h", "replace_default_only_switch.h", "replace_non_indexable_mat_vec_stores.h", + "resource_table_helper.h", "shader_io.h", ], deps = [
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.cmake b/src/tint/lang/hlsl/writer/raise/BUILD.cmake index 316c7df..7990dfb 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.cmake +++ b/src/tint/lang/hlsl/writer/raise/BUILD.cmake
@@ -63,6 +63,8 @@ lang/hlsl/writer/raise/replace_default_only_switch.h lang/hlsl/writer/raise/replace_non_indexable_mat_vec_stores.cc lang/hlsl/writer/raise/replace_non_indexable_mat_vec_stores.h + lang/hlsl/writer/raise/resource_table_helper.cc + lang/hlsl/writer/raise/resource_table_helper.h lang/hlsl/writer/raise/shader_io.cc lang/hlsl/writer/raise/shader_io.h )
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.gn b/src/tint/lang/hlsl/writer/raise/BUILD.gn index dafb11c..814cf16 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.gn +++ b/src/tint/lang/hlsl/writer/raise/BUILD.gn
@@ -69,6 +69,8 @@ "replace_default_only_switch.h", "replace_non_indexable_mat_vec_stores.cc", "replace_non_indexable_mat_vec_stores.h", + "resource_table_helper.cc", + "resource_table_helper.h", "shader_io.cc", "shader_io.h", ]
diff --git a/src/tint/lang/hlsl/writer/raise/raise.cc b/src/tint/lang/hlsl/writer/raise/raise.cc index f45747b..4f93488 100644 --- a/src/tint/lang/hlsl/writer/raise/raise.cc +++ b/src/tint/lang/hlsl/writer/raise/raise.cc
@@ -48,6 +48,7 @@ #include "src/tint/lang/core/ir/transform/remove_continue_in_switch.h" #include "src/tint/lang/core/ir/transform/remove_terminator_args.h" #include "src/tint/lang/core/ir/transform/rename_conflicts.h" +#include "src/tint/lang/core/ir/transform/resource_table.h" #include "src/tint/lang/core/ir/transform/robustness.h" #include "src/tint/lang/core/ir/transform/signed_integer_polyfill.h" #include "src/tint/lang/core/ir/transform/single_entry_point.h" @@ -71,6 +72,7 @@ #include "src/tint/lang/hlsl/writer/raise/promote_initializers.h" #include "src/tint/lang/hlsl/writer/raise/replace_default_only_switch.h" #include "src/tint/lang/hlsl/writer/raise/replace_non_indexable_mat_vec_stores.h" +#include "src/tint/lang/hlsl/writer/raise/resource_table_helper.h" #include "src/tint/lang/hlsl/writer/raise/shader_io.h" namespace tint::hlsl::writer { @@ -184,6 +186,12 @@ TINT_CHECK_RESULT(core::ir::transform::PreventInfiniteLoops(module)); } + if (options.resource_table.has_value()) { + hlsl::writer::raise::ResourceTableHelper helper; + TINT_CHECK_RESULT( + core::ir::transform::ResourceTable(module, options.resource_table.value(), &helper)); + } + { core::ir::transform::BinaryPolyfillConfig binary_polyfills{}; binary_polyfills.int_div_mod = !options.disable_polyfill_integer_div_mod;
diff --git a/src/tint/lang/hlsl/writer/raise/resource_table_helper.cc b/src/tint/lang/hlsl/writer/raise/resource_table_helper.cc new file mode 100644 index 0000000..06158e3 --- /dev/null +++ b/src/tint/lang/hlsl/writer/raise/resource_table_helper.cc
@@ -0,0 +1,66 @@ +// Copyright 2026 The Dawn & Tint Authors +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "src/tint/lang/hlsl/writer/raise/resource_table_helper.h" + +#include "src/tint/lang/core/type/pointer.h" +#include "src/tint/lang/core/type/resource_table.h" +#include "src/tint/lang/core/type/resource_type.h" + +using namespace tint::core::fluent_types; // NOLINT +using namespace tint::core::number_suffixes; // NOLINT + +namespace tint::hlsl::writer::raise { + +// Returns a map of types to the var which is used to access the memory of that type +Hashmap<const core::type::Type*, core::ir::Var*, 4> ResourceTableHelper::GenerateVars( + core::ir::Builder& b, + const BindingPoint& bp, + const std::vector<ResourceType>& types) const { + Hashmap<const core::type::Type*, core::ir::Var*, 4> res; + + // HLSL does not allow register ranges to overlap, so each unbounded array is bound to + // a monotonically increasing group number from the base one: bp.group. + uint32_t group_offset = 0; + + // TODO(crbug.com/480103159): Only emit vars that are actually referenced. + for (auto& type : types) { + auto* t = core::type::ResourceTypeToType(b.ir.Types(), type); + + // The 'handle' type that the printer uses to emit the unbounded array of type 't'. + auto* binding_type = t; + auto* handle_ty = b.ir.Types().Get<core::type::ResourceTable>(binding_type); + + auto* v = b.Var("tint_resource_table_array", b.ir.Types().ptr(handle, handle_ty)); + v->SetBindingPoint(bp.group + group_offset++, bp.binding); + res.Add(t, v); + } + + return res; +} + +} // namespace tint::hlsl::writer::raise
diff --git a/src/tint/lang/hlsl/writer/raise/resource_table_helper.h b/src/tint/lang/hlsl/writer/raise/resource_table_helper.h new file mode 100644 index 0000000..24f31ac --- /dev/null +++ b/src/tint/lang/hlsl/writer/raise/resource_table_helper.h
@@ -0,0 +1,51 @@ +// Copyright 2026 The Dawn & Tint Authors +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef SRC_TINT_LANG_HLSL_WRITER_RAISE_RESOURCE_TABLE_HELPER_H_ +#define SRC_TINT_LANG_HLSL_WRITER_RAISE_RESOURCE_TABLE_HELPER_H_ + +#include <vector> + +#include "src/tint/lang/core/ir/builder.h" +#include "src/tint/lang/core/ir/transform/resource_table.h" + +namespace tint::hlsl::writer::raise { + +class ResourceTableHelper : public core::ir::transform::ResourceTableHelper { + public: + ~ResourceTableHelper() override = default; + + // Returns a map of types to the var which is used to access the memory of that type + Hashmap<const core::type::Type*, core::ir::Var*, 4> GenerateVars( + core::ir::Builder& b, + const BindingPoint& bp, + const std::vector<ResourceType>& types) const override; +}; + +} // namespace tint::hlsl::writer::raise + +#endif // SRC_TINT_LANG_HLSL_WRITER_RAISE_RESOURCE_TABLE_HELPER_H_
diff --git a/src/tint/lang/hlsl/writer/writer.cc b/src/tint/lang/hlsl/writer/writer.cc index 545e101..1eba8bd 100644 --- a/src/tint/lang/hlsl/writer/writer.cc +++ b/src/tint/lang/hlsl/writer/writer.cc
@@ -75,9 +75,11 @@ continue; } - if (call->Func() == core::BuiltinFn::kGetResource || - call->Func() == core::BuiltinFn::kHasResource) { - return Failure("resource tables not supported by the HLSL backend"); + if ((call->Func() == core::BuiltinFn::kGetResource || + call->Func() == core::BuiltinFn::kHasResource) && + options.compiler == Options::Compiler::kFXC) { + return Failure( + "resource tables not supported by the HLSL backend for compiling with FXC"); } if (call->Func() == core::BuiltinFn::kPrint) { return Failure("print is not supported by the HLSL backend");
diff --git a/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.dxc.hlsl b/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.dxc.hlsl index 17de5d1..9464c61 100644 --- a/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.dxc.hlsl +++ b/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.dxc.hlsl
@@ -1,5 +1,20 @@ -SKIP: FAILED -resource tables not supported by the HLSL backend +Texture1D<float4> tint_resource_table_array[] : register(t51, space43); +ByteAddressBuffer tint_resource_table_metadata : register(t52, space42); +void fs() { + bool v = false; + if ((2u < tint_resource_table_metadata.Load(0u))) { + v = (tint_resource_table_metadata.Load(12u) == 1u); + } else { + v = false; + } + uint v_1 = 0u; + if (v) { + v_1 = 2u; + } else { + v_1 = (0u + tint_resource_table_metadata.Load(0u)); + } + uint v_2 = v_1; + float4 texture_load = tint_resource_table_array[v_2].Load(int2(int(0), int(0))); +} -tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.fxc.hlsl b/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.fxc.hlsl index 17de5d1..36c3a4f 100644 --- a/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.fxc.hlsl +++ b/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@ SKIP: FAILED -resource tables not supported by the HLSL backend +resource tables not supported by the HLSL backend for compiling with FXC tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.spvasm b/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.spvasm index a0fb11f..215109f 100644 --- a/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.spvasm +++ b/test/tint/extensions/resource_table/access_as_constant.wgsl.expected.spvasm
@@ -12,20 +12,21 @@ OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %fs "fs" OpExecutionMode %fs OriginUpperLeft - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 0 "array_length" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 1 "bindings" - OpName %tint_resource_table_buffer_tint_explicit_layout "tint_resource_table_buffer_tint_explicit_layout" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 0 "array_length" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 1 "bindings" + OpName %tint_resource_table_metadata_struct_tint_explicit_layout "tint_resource_table_metadata_struct_tint_explicit_layout" + OpName %tint_resource_table_metadata "tint_resource_table_metadata" OpName %fs "fs" OpName %texture_load "texture_load" - OpDecorate %1 DescriptorSet 42 - OpDecorate %1 Binding 41 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 0 Offset 0 + OpDecorate %1 DescriptorSet 43 + OpDecorate %1 Binding 51 + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 0 Offset 0 OpDecorate %_runtimearr_uint ArrayStride 4 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 1 Offset 4 - OpDecorate %tint_resource_table_buffer_tint_explicit_layout Block - OpDecorate %6 DescriptorSet 42 - OpDecorate %6 Binding 42 - OpDecorate %6 NonWritable + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 1 Offset 4 + OpDecorate %tint_resource_table_metadata_struct_tint_explicit_layout Block + OpDecorate %tint_resource_table_metadata DescriptorSet 42 + OpDecorate %tint_resource_table_metadata Binding 52 + OpDecorate %tint_resource_table_metadata NonWritable %float = OpTypeFloat 32 %4 = OpTypeImage %float 1D 0 0 0 1 Unknown %_runtimearr_4 = OpTypeRuntimeArray %4 @@ -33,9 +34,9 @@ %1 = OpVariable %_ptr_UniformConstant__runtimearr_4 UniformConstant %uint = OpTypeInt 32 0 %_runtimearr_uint = OpTypeRuntimeArray %uint -%tint_resource_table_buffer_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint -%_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_buffer_tint_explicit_layout - %6 = OpVariable %_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout StorageBuffer +%tint_resource_table_metadata_struct_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_metadata_struct_tint_explicit_layout +%tint_resource_table_metadata = OpVariable %_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout StorageBuffer %void = OpTypeVoid %13 = OpTypeFunction %void %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint @@ -50,13 +51,13 @@ %v4float = OpTypeVector %float 4 %fs = OpFunction %void None %13 %14 = OpLabel - %15 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 + %15 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %18 = OpLoad %uint %15 None %19 = OpULessThan %bool %uint_2 %18 OpSelectionMerge %22 None OpBranchConditional %19 %23 %24 %23 = OpLabel - %50 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_1 %uint_2 + %50 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %uint_2 %51 = OpLoad %uint %50 None %26 = OpIEqual %bool %51 %uint_1 OpBranch %22 @@ -69,7 +70,7 @@ %29 = OpLabel OpBranch %28 %30 = OpLabel - %52 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 + %52 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %53 = OpLoad %uint %52 None %32 = OpIAdd %uint %uint_0 %53 OpBranch %28
diff --git a/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.dxc.hlsl b/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.dxc.hlsl index 17de5d1..de85adc 100644 --- a/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.dxc.hlsl +++ b/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.dxc.hlsl
@@ -1,5 +1,45 @@ -SKIP: FAILED +struct fs_outputs { + float4 tint_symbol : SV_Target0; +}; -resource tables not supported by the HLSL backend -tint executable returned error: exit status 1 +Texture2D<float4> tint_resource_table_array[] : register(t51, space43); +SamplerState tint_resource_table_array_1[] : register(s51, space44); +ByteAddressBuffer tint_resource_table_metadata : register(t52, space42); +float4 fs_inner() { + uint v = uint(int(0)); + bool v_1 = false; + if ((v < tint_resource_table_metadata.Load(0u))) { + v_1 = (tint_resource_table_metadata.Load((4u + (v * 4u))) == 5u); + } else { + v_1 = false; + } + uint v_2 = 0u; + if (v_1) { + v_2 = v; + } else { + v_2 = (0u + tint_resource_table_metadata.Load(0u)); + } + uint v_3 = v_2; + uint v_4 = uint(int(1)); + bool v_5 = false; + if ((v_4 < tint_resource_table_metadata.Load(0u))) { + v_5 = (tint_resource_table_metadata.Load((4u + (v_4 * 4u))) == 33u); + } else { + v_5 = false; + } + uint v_6 = 0u; + if (v_5) { + v_6 = v_4; + } else { + v_6 = (1u + tint_resource_table_metadata.Load(0u)); + } + uint v_7 = v_6; + return tint_resource_table_array[v_3].Sample(tint_resource_table_array_1[v_7], (0.0f).xx); +} + +fs_outputs fs() { + fs_outputs v_8 = {fs_inner()}; + return v_8; +} +
diff --git a/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.fxc.hlsl b/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.fxc.hlsl index 17de5d1..36c3a4f 100644 --- a/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.fxc.hlsl +++ b/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@ SKIP: FAILED -resource tables not supported by the HLSL backend +resource tables not supported by the HLSL backend for compiling with FXC tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.spvasm b/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.spvasm index fcfa147..08cce4b 100644 --- a/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.spvasm +++ b/test/tint/extensions/resource_table/access_as_constant_sampler.wgsl.expected.spvasm
@@ -9,23 +9,24 @@ OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %fs "fs" %fs_loc0_Output OpExecutionMode %fs OriginUpperLeft - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 0 "array_length" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 1 "bindings" - OpName %tint_resource_table_buffer_tint_explicit_layout "tint_resource_table_buffer_tint_explicit_layout" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 0 "array_length" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 1 "bindings" + OpName %tint_resource_table_metadata_struct_tint_explicit_layout "tint_resource_table_metadata_struct_tint_explicit_layout" + OpName %tint_resource_table_metadata "tint_resource_table_metadata" OpName %fs_loc0_Output "fs_loc0_Output" OpName %fs_inner "fs_inner" OpName %fs "fs" - OpDecorate %1 DescriptorSet 42 - OpDecorate %1 Binding 41 - OpDecorate %6 DescriptorSet 42 - OpDecorate %6 Binding 41 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 0 Offset 0 + OpDecorate %1 DescriptorSet 43 + OpDecorate %1 Binding 51 + OpDecorate %6 DescriptorSet 43 + OpDecorate %6 Binding 51 + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 0 Offset 0 OpDecorate %_runtimearr_uint ArrayStride 4 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 1 Offset 4 - OpDecorate %tint_resource_table_buffer_tint_explicit_layout Block - OpDecorate %10 DescriptorSet 42 - OpDecorate %10 Binding 42 - OpDecorate %10 NonWritable + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 1 Offset 4 + OpDecorate %tint_resource_table_metadata_struct_tint_explicit_layout Block + OpDecorate %tint_resource_table_metadata DescriptorSet 42 + OpDecorate %tint_resource_table_metadata Binding 52 + OpDecorate %tint_resource_table_metadata NonWritable OpDecorate %fs_loc0_Output Location 0 %float = OpTypeFloat 32 %4 = OpTypeImage %float 2D 0 0 0 1 Unknown @@ -38,9 +39,9 @@ %6 = OpVariable %_ptr_UniformConstant__runtimearr_9 UniformConstant %uint = OpTypeInt 32 0 %_runtimearr_uint = OpTypeRuntimeArray %uint -%tint_resource_table_buffer_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint -%_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_buffer_tint_explicit_layout - %10 = OpVariable %_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout StorageBuffer +%tint_resource_table_metadata_struct_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_metadata_struct_tint_explicit_layout +%tint_resource_table_metadata = OpVariable %_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout StorageBuffer %v4float = OpTypeVector %float 4 %_ptr_Output_v4float = OpTypePointer Output %v4float %fs_loc0_Output = OpVariable %_ptr_Output_v4float Output @@ -65,13 +66,13 @@ %fs_inner = OpFunction %v4float None %19 %20 = OpLabel %21 = OpBitcast %uint %int_0 - %24 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %24 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %27 = OpLoad %uint %24 None %28 = OpULessThan %bool %21 %27 OpSelectionMerge %30 None OpBranchConditional %28 %31 %32 %31 = OpLabel - %67 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_1 %21 + %67 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %21 %69 = OpLoad %uint %67 None %34 = OpIEqual %bool %69 %uint_5 OpBranch %30 @@ -84,7 +85,7 @@ %37 = OpLabel OpBranch %36 %38 = OpLabel - %71 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %71 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %72 = OpLoad %uint %71 None %40 = OpIAdd %uint %uint_0 %72 OpBranch %36 @@ -93,13 +94,13 @@ %41 = OpAccessChain %_ptr_UniformConstant_4 %1 %39 %43 = OpLoad %4 %41 None %44 = OpBitcast %uint %int_1 - %46 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %46 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %47 = OpLoad %uint %46 None %48 = OpULessThan %bool %44 %47 OpSelectionMerge %49 None OpBranchConditional %48 %50 %51 %50 = OpLabel - %73 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_1 %44 + %73 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %44 %74 = OpLoad %uint %73 None %53 = OpIEqual %bool %74 %uint_33 OpBranch %49 @@ -112,7 +113,7 @@ %55 = OpLabel OpBranch %54 %56 = OpLabel - %76 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %76 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %77 = OpLoad %uint %76 None %58 = OpIAdd %uint %uint_1 %77 OpBranch %54
diff --git a/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.dxc.hlsl b/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.dxc.hlsl index 17de5d1..687f08b 100644 --- a/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.dxc.hlsl +++ b/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.dxc.hlsl
@@ -1,5 +1,24 @@ -SKIP: FAILED -resource tables not supported by the HLSL backend +cbuffer cbuffer_index : register(b0, space1) { + uint4 index[1]; +}; +Texture3D<float4> tint_resource_table_array[] : register(t51, space43); +ByteAddressBuffer tint_resource_table_metadata : register(t52, space42); +void fs() { + uint v = index[0u].x; + bool v_1 = false; + if ((v < tint_resource_table_metadata.Load(0u))) { + v_1 = (tint_resource_table_metadata.Load((4u + (v * 4u))) == 13u); + } else { + v_1 = false; + } + uint v_2 = 0u; + if (v_1) { + v_2 = v; + } else { + v_2 = (0u + tint_resource_table_metadata.Load(0u)); + } + uint v_3 = v_2; + float4 texture_load = tint_resource_table_array[v_3].Load(int4((int(0)).xxx, int(0))); +} -tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.fxc.hlsl b/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.fxc.hlsl index 17de5d1..36c3a4f 100644 --- a/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.fxc.hlsl +++ b/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@ SKIP: FAILED -resource tables not supported by the HLSL backend +resource tables not supported by the HLSL backend for compiling with FXC tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.spvasm b/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.spvasm index 4b8a8c7..b7fa381 100644 --- a/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.spvasm +++ b/test/tint/extensions/resource_table/access_as_uniform.wgsl.expected.spvasm
@@ -13,9 +13,10 @@ OpExecutionMode %fs OriginUpperLeft OpMemberName %index_block_tint_explicit_layout 0 "inner" OpName %index_block_tint_explicit_layout "index_block_tint_explicit_layout" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 0 "array_length" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 1 "bindings" - OpName %tint_resource_table_buffer_tint_explicit_layout "tint_resource_table_buffer_tint_explicit_layout" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 0 "array_length" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 1 "bindings" + OpName %tint_resource_table_metadata_struct_tint_explicit_layout "tint_resource_table_metadata_struct_tint_explicit_layout" + OpName %tint_resource_table_metadata "tint_resource_table_metadata" OpName %fs "fs" OpName %texture_load "texture_load" OpDecorate %_arr_v4uint_uint_1 ArrayStride 16 @@ -24,15 +25,15 @@ OpDecorate %1 DescriptorSet 1 OpDecorate %1 Binding 0 OpDecorate %1 NonWritable - OpDecorate %8 DescriptorSet 42 - OpDecorate %8 Binding 41 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 0 Offset 0 + OpDecorate %8 DescriptorSet 43 + OpDecorate %8 Binding 51 + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 0 Offset 0 OpDecorate %_runtimearr_uint ArrayStride 4 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 1 Offset 4 - OpDecorate %tint_resource_table_buffer_tint_explicit_layout Block - OpDecorate %13 DescriptorSet 42 - OpDecorate %13 Binding 42 - OpDecorate %13 NonWritable + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 1 Offset 4 + OpDecorate %tint_resource_table_metadata_struct_tint_explicit_layout Block + OpDecorate %tint_resource_table_metadata DescriptorSet 42 + OpDecorate %tint_resource_table_metadata Binding 52 + OpDecorate %tint_resource_table_metadata NonWritable %uint = OpTypeInt 32 0 %v4uint = OpTypeVector %uint 4 %uint_1 = OpConstant %uint 1 @@ -46,9 +47,9 @@ %_ptr_UniformConstant__runtimearr_11 = OpTypePointer UniformConstant %_runtimearr_11 %8 = OpVariable %_ptr_UniformConstant__runtimearr_11 UniformConstant %_runtimearr_uint = OpTypeRuntimeArray %uint -%tint_resource_table_buffer_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint -%_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_buffer_tint_explicit_layout - %13 = OpVariable %_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout StorageBuffer +%tint_resource_table_metadata_struct_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_metadata_struct_tint_explicit_layout +%tint_resource_table_metadata = OpVariable %_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout StorageBuffer %void = OpTypeVoid %19 = OpTypeFunction %void %_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint @@ -70,13 +71,13 @@ %21 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_0 %24 = OpLoad %v4uint %21 None %25 = OpCompositeExtract %uint %24 0 - %26 = OpAccessChain %_ptr_StorageBuffer_uint %13 %uint_0 + %26 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %28 = OpLoad %uint %26 None %29 = OpULessThan %bool %25 %28 OpSelectionMerge %31 None OpBranchConditional %29 %32 %33 %32 = OpLabel - %62 = OpAccessChain %_ptr_StorageBuffer_uint %13 %uint_1 %25 + %62 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %25 %63 = OpLoad %uint %62 None %35 = OpIEqual %bool %63 %uint_13 OpBranch %31 @@ -89,7 +90,7 @@ %38 = OpLabel OpBranch %37 %39 = OpLabel - %65 = OpAccessChain %_ptr_StorageBuffer_uint %13 %uint_0 + %65 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %66 = OpLoad %uint %65 None %41 = OpIAdd %uint %uint_0 %66 OpBranch %37
diff --git a/test/tint/extensions/resource_table/access_multiple.wgsl.expected.dxc.hlsl b/test/tint/extensions/resource_table/access_multiple.wgsl.expected.dxc.hlsl index 17de5d1..b3c53fc 100644 --- a/test/tint/extensions/resource_table/access_multiple.wgsl.expected.dxc.hlsl +++ b/test/tint/extensions/resource_table/access_multiple.wgsl.expected.dxc.hlsl
@@ -1,5 +1,52 @@ -SKIP: FAILED -resource tables not supported by the HLSL backend +Texture1D<float4> tint_resource_table_array[] : register(t51, space43); +Texture2D<int4> tint_resource_table_array_1[] : register(t51, space44); +Texture3D<uint4> tint_resource_table_array_2[] : register(t51, space45); +ByteAddressBuffer tint_resource_table_metadata : register(t52, space42); +void fs() { + bool v = false; + if ((0u < tint_resource_table_metadata.Load(0u))) { + v = (tint_resource_table_metadata.Load(4u) == 2u); + } else { + v = false; + } + uint v_1 = 0u; + if (v) { + v_1 = 0u; + } else { + v_1 = (0u + tint_resource_table_metadata.Load(0u)); + } + uint v_2 = v_1; + float4 t1d = tint_resource_table_array[v_2].Load(int2(int(0), int(0))); + uint v_3 = uint(int(1)); + bool v_4 = false; + if ((v_3 < tint_resource_table_metadata.Load(0u))) { + v_4 = (tint_resource_table_metadata.Load((4u + (v_3 * 4u))) == 7u); + } else { + v_4 = false; + } + uint v_5 = 0u; + if (v_4) { + v_5 = v_3; + } else { + v_5 = (1u + tint_resource_table_metadata.Load(0u)); + } + uint v_6 = v_5; + int4 t2d = tint_resource_table_array_1[v_6].Load(int3(int2(int(0), int(1)), int(0))); + uint v_7 = uint(int(2)); + bool v_8 = false; + if ((v_7 < tint_resource_table_metadata.Load(0u))) { + v_8 = (tint_resource_table_metadata.Load((4u + (v_7 * 4u))) == 16u); + } else { + v_8 = false; + } + uint v_9 = 0u; + if (v_8) { + v_9 = v_7; + } else { + v_9 = (2u + tint_resource_table_metadata.Load(0u)); + } + uint v_10 = v_9; + uint4 tcube = tint_resource_table_array_2[v_10].Load(int4(int3(int(2), int(1), int(0)), int(0))); +} -tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/access_multiple.wgsl.expected.fxc.hlsl b/test/tint/extensions/resource_table/access_multiple.wgsl.expected.fxc.hlsl index 17de5d1..36c3a4f 100644 --- a/test/tint/extensions/resource_table/access_multiple.wgsl.expected.fxc.hlsl +++ b/test/tint/extensions/resource_table/access_multiple.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@ SKIP: FAILED -resource tables not supported by the HLSL backend +resource tables not supported by the HLSL backend for compiling with FXC tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/access_multiple.wgsl.expected.spvasm b/test/tint/extensions/resource_table/access_multiple.wgsl.expected.spvasm index 91633ae..cdc0c06 100644 --- a/test/tint/extensions/resource_table/access_multiple.wgsl.expected.spvasm +++ b/test/tint/extensions/resource_table/access_multiple.wgsl.expected.spvasm
@@ -12,26 +12,27 @@ OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %fs "fs" OpExecutionMode %fs OriginUpperLeft - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 0 "array_length" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 1 "bindings" - OpName %tint_resource_table_buffer_tint_explicit_layout "tint_resource_table_buffer_tint_explicit_layout" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 0 "array_length" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 1 "bindings" + OpName %tint_resource_table_metadata_struct_tint_explicit_layout "tint_resource_table_metadata_struct_tint_explicit_layout" + OpName %tint_resource_table_metadata "tint_resource_table_metadata" OpName %fs "fs" OpName %t1d "t1d" OpName %t2d "t2d" OpName %tcube "tcube" - OpDecorate %1 DescriptorSet 42 - OpDecorate %1 Binding 41 - OpDecorate %6 DescriptorSet 42 - OpDecorate %6 Binding 41 - OpDecorate %11 DescriptorSet 42 - OpDecorate %11 Binding 41 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 0 Offset 0 + OpDecorate %1 DescriptorSet 43 + OpDecorate %1 Binding 51 + OpDecorate %6 DescriptorSet 43 + OpDecorate %6 Binding 51 + OpDecorate %11 DescriptorSet 43 + OpDecorate %11 Binding 51 + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 0 Offset 0 OpDecorate %_runtimearr_uint ArrayStride 4 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 1 Offset 4 - OpDecorate %tint_resource_table_buffer_tint_explicit_layout Block - OpDecorate %16 DescriptorSet 42 - OpDecorate %16 Binding 42 - OpDecorate %16 NonWritable + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 1 Offset 4 + OpDecorate %tint_resource_table_metadata_struct_tint_explicit_layout Block + OpDecorate %tint_resource_table_metadata DescriptorSet 42 + OpDecorate %tint_resource_table_metadata Binding 52 + OpDecorate %tint_resource_table_metadata NonWritable %float = OpTypeFloat 32 %4 = OpTypeImage %float 1D 0 0 0 1 Unknown %_runtimearr_4 = OpTypeRuntimeArray %4 @@ -48,9 +49,9 @@ %_ptr_UniformConstant__runtimearr_14 = OpTypePointer UniformConstant %_runtimearr_14 %11 = OpVariable %_ptr_UniformConstant__runtimearr_14 UniformConstant %_runtimearr_uint = OpTypeRuntimeArray %uint -%tint_resource_table_buffer_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint -%_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_buffer_tint_explicit_layout - %16 = OpVariable %_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout StorageBuffer +%tint_resource_table_metadata_struct_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_metadata_struct_tint_explicit_layout +%tint_resource_table_metadata = OpVariable %_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout StorageBuffer %void = OpTypeVoid %22 = OpTypeFunction %void %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint @@ -80,13 +81,13 @@ %uint_16 = OpConstant %uint 16 %fs = OpFunction %void None %22 %23 = OpLabel - %24 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 + %24 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %27 = OpLoad %uint %24 None %28 = OpULessThan %bool %uint_0 %27 OpSelectionMerge %30 None OpBranchConditional %28 %31 %32 %31 = OpLabel - %121 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_1 %uint_0 + %121 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %uint_0 %122 = OpLoad %uint %121 None %34 = OpIEqual %bool %122 %uint_2 OpBranch %30 @@ -99,7 +100,7 @@ %37 = OpLabel OpBranch %36 %38 = OpLabel - %124 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 + %124 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %125 = OpLoad %uint %124 None %40 = OpIAdd %uint %uint_0 %125 OpBranch %36 @@ -117,13 +118,13 @@ %54 = OpExtInst %uint %50 UMin %53 %52 %t1d = OpImageFetch %v4float %43 %54 Lod %49 %57 = OpBitcast %uint %int_1 - %59 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 + %59 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %60 = OpLoad %uint %59 None %61 = OpULessThan %bool %57 %60 OpSelectionMerge %62 None OpBranchConditional %61 %63 %64 %63 = OpLabel - %126 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_1 %57 + %126 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %57 %127 = OpLoad %uint %126 None %66 = OpIEqual %bool %127 %uint_7 OpBranch %62 @@ -136,7 +137,7 @@ %68 = OpLabel OpBranch %67 %69 = OpLabel - %129 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 + %129 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %130 = OpLoad %uint %129 None %71 = OpIAdd %uint %uint_1 %130 OpBranch %67 @@ -154,13 +155,13 @@ %86 = OpExtInst %v2uint %50 UMin %83 %81 %t2d = OpImageFetch %v4int %74 %86 Lod %78 %89 = OpBitcast %uint %int_2 - %91 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 + %91 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %92 = OpLoad %uint %91 None %93 = OpULessThan %bool %89 %92 OpSelectionMerge %94 None OpBranchConditional %93 %95 %96 %95 = OpLabel - %131 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_1 %89 + %131 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %89 %132 = OpLoad %uint %131 None %98 = OpIEqual %bool %132 %uint_16 OpBranch %94 @@ -173,7 +174,7 @@ %100 = OpLabel OpBranch %99 %101 = OpLabel - %134 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 + %134 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %135 = OpLoad %uint %134 None %103 = OpIAdd %uint %uint_2 %135 OpBranch %99
diff --git a/test/tint/extensions/resource_table/has_resource.wgsl.expected.dxc.hlsl b/test/tint/extensions/resource_table/has_resource.wgsl.expected.dxc.hlsl index 17de5d1..cae4e99 100644 --- a/test/tint/extensions/resource_table/has_resource.wgsl.expected.dxc.hlsl +++ b/test/tint/extensions/resource_table/has_resource.wgsl.expected.dxc.hlsl
@@ -1,5 +1,13 @@ -SKIP: FAILED -resource tables not supported by the HLSL backend +Texture2D<int4> tint_resource_table_array[] : register(t51, space43); +ByteAddressBuffer tint_resource_table_metadata : register(t52, space42); +void fs() { + bool v = false; + if ((4u < tint_resource_table_metadata.Load(0u))) { + v = (tint_resource_table_metadata.Load(20u) == 7u); + } else { + v = false; + } + bool t = v; +} -tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/has_resource.wgsl.expected.fxc.hlsl b/test/tint/extensions/resource_table/has_resource.wgsl.expected.fxc.hlsl index 17de5d1..36c3a4f 100644 --- a/test/tint/extensions/resource_table/has_resource.wgsl.expected.fxc.hlsl +++ b/test/tint/extensions/resource_table/has_resource.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@ SKIP: FAILED -resource tables not supported by the HLSL backend +resource tables not supported by the HLSL backend for compiling with FXC tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/has_resource.wgsl.expected.spvasm b/test/tint/extensions/resource_table/has_resource.wgsl.expected.spvasm index a035889..7e5d8db 100644 --- a/test/tint/extensions/resource_table/has_resource.wgsl.expected.spvasm +++ b/test/tint/extensions/resource_table/has_resource.wgsl.expected.spvasm
@@ -9,20 +9,21 @@ OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %fs "fs" OpExecutionMode %fs OriginUpperLeft - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 0 "array_length" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 1 "bindings" - OpName %tint_resource_table_buffer_tint_explicit_layout "tint_resource_table_buffer_tint_explicit_layout" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 0 "array_length" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 1 "bindings" + OpName %tint_resource_table_metadata_struct_tint_explicit_layout "tint_resource_table_metadata_struct_tint_explicit_layout" + OpName %tint_resource_table_metadata "tint_resource_table_metadata" OpName %fs "fs" OpName %t "t" - OpDecorate %1 DescriptorSet 42 - OpDecorate %1 Binding 41 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 0 Offset 0 + OpDecorate %1 DescriptorSet 43 + OpDecorate %1 Binding 51 + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 0 Offset 0 OpDecorate %_runtimearr_uint ArrayStride 4 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 1 Offset 4 - OpDecorate %tint_resource_table_buffer_tint_explicit_layout Block - OpDecorate %6 DescriptorSet 42 - OpDecorate %6 Binding 42 - OpDecorate %6 NonWritable + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 1 Offset 4 + OpDecorate %tint_resource_table_metadata_struct_tint_explicit_layout Block + OpDecorate %tint_resource_table_metadata DescriptorSet 42 + OpDecorate %tint_resource_table_metadata Binding 52 + OpDecorate %tint_resource_table_metadata NonWritable %int = OpTypeInt 32 1 %4 = OpTypeImage %int 2D 0 0 0 1 Unknown %_runtimearr_4 = OpTypeRuntimeArray %4 @@ -30,9 +31,9 @@ %1 = OpVariable %_ptr_UniformConstant__runtimearr_4 UniformConstant %uint = OpTypeInt 32 0 %_runtimearr_uint = OpTypeRuntimeArray %uint -%tint_resource_table_buffer_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint -%_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_buffer_tint_explicit_layout - %6 = OpVariable %_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout StorageBuffer +%tint_resource_table_metadata_struct_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_metadata_struct_tint_explicit_layout +%tint_resource_table_metadata = OpVariable %_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout StorageBuffer %void = OpTypeVoid %13 = OpTypeFunction %void %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint @@ -44,13 +45,13 @@ %uint_7 = OpConstant %uint 7 %fs = OpFunction %void None %13 %14 = OpLabel - %15 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 + %15 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %18 = OpLoad %uint %15 None %19 = OpULessThan %bool %uint_4 %18 OpSelectionMerge %22 None OpBranchConditional %19 %23 %24 %23 = OpLabel - %28 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_1 %uint_4 + %28 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %uint_4 %30 = OpLoad %uint %28 None %26 = OpIEqual %bool %30 %uint_7 OpBranch %22
diff --git a/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.dxc.hlsl b/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.dxc.hlsl index 17de5d1..274490f 100644 --- a/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.dxc.hlsl +++ b/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.dxc.hlsl
@@ -1,5 +1,28 @@ -SKIP: FAILED -resource tables not supported by the HLSL backend +RWByteAddressBuffer o : register(u0); +SamplerState tint_resource_table_array[] : register(s51, space43); +SamplerComparisonState tint_resource_table_array_1[] : register(s51, space44); +ByteAddressBuffer tint_resource_table_metadata : register(t52, space42); +void fs() { + uint v = uint(int(0)); + bool v_1 = false; + if ((v < tint_resource_table_metadata.Load(0u))) { + v_1 = (tint_resource_table_metadata.Load((4u + (v * 4u))) == 34u); + } else { + v_1 = false; + } + if (v_1) { + o.Store(0u, (o.Load(0u) + 1u)); + } + uint v_2 = uint(int(1)); + bool v_3 = false; + if ((v_2 < tint_resource_table_metadata.Load(0u))) { + v_3 = (tint_resource_table_metadata.Load((4u + (v_2 * 4u))) == 35u); + } else { + v_3 = false; + } + if (v_3) { + o.Store(0u, (o.Load(0u) + 1u)); + } +} -tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.fxc.hlsl b/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.fxc.hlsl index 17de5d1..36c3a4f 100644 --- a/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.fxc.hlsl +++ b/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@ SKIP: FAILED -resource tables not supported by the HLSL backend +resource tables not supported by the HLSL backend for compiling with FXC tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.spvasm b/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.spvasm index 35bfc0a..44c3d7e 100644 --- a/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.spvasm +++ b/test/tint/extensions/resource_table/has_resource_sampler.wgsl.expected.spvasm
@@ -11,26 +11,27 @@ OpExecutionMode %fs OriginUpperLeft OpMemberName %o_block 0 "inner" OpName %o_block "o_block" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 0 "array_length" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 1 "bindings" - OpName %tint_resource_table_buffer_tint_explicit_layout "tint_resource_table_buffer_tint_explicit_layout" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 0 "array_length" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 1 "bindings" + OpName %tint_resource_table_metadata_struct_tint_explicit_layout "tint_resource_table_metadata_struct_tint_explicit_layout" + OpName %tint_resource_table_metadata "tint_resource_table_metadata" OpName %fs "fs" OpMemberDecorate %o_block 0 Offset 0 OpDecorate %o_block Block OpDecorate %1 DescriptorSet 0 OpDecorate %1 Binding 0 OpDecorate %1 Coherent - OpDecorate %5 DescriptorSet 42 - OpDecorate %5 Binding 41 - OpDecorate %9 DescriptorSet 42 - OpDecorate %9 Binding 41 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 0 Offset 0 + OpDecorate %5 DescriptorSet 43 + OpDecorate %5 Binding 51 + OpDecorate %9 DescriptorSet 43 + OpDecorate %9 Binding 51 + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 0 Offset 0 OpDecorate %_runtimearr_uint ArrayStride 4 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 1 Offset 4 - OpDecorate %tint_resource_table_buffer_tint_explicit_layout Block - OpDecorate %12 DescriptorSet 42 - OpDecorate %12 Binding 42 - OpDecorate %12 NonWritable + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 1 Offset 4 + OpDecorate %tint_resource_table_metadata_struct_tint_explicit_layout Block + OpDecorate %tint_resource_table_metadata DescriptorSet 42 + OpDecorate %tint_resource_table_metadata Binding 52 + OpDecorate %tint_resource_table_metadata NonWritable %uint = OpTypeInt 32 0 %o_block = OpTypeStruct %uint %_ptr_StorageBuffer_o_block = OpTypePointer StorageBuffer %o_block @@ -43,9 +44,9 @@ %_ptr_UniformConstant__runtimearr_8_0 = OpTypePointer UniformConstant %_runtimearr_8_0 %9 = OpVariable %_ptr_UniformConstant__runtimearr_8_0 UniformConstant %_runtimearr_uint = OpTypeRuntimeArray %uint -%tint_resource_table_buffer_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint -%_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_buffer_tint_explicit_layout - %12 = OpVariable %_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout StorageBuffer +%tint_resource_table_metadata_struct_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_metadata_struct_tint_explicit_layout +%tint_resource_table_metadata = OpVariable %_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout StorageBuffer %void = OpTypeVoid %18 = OpTypeFunction %void %int = OpTypeInt 32 1 @@ -62,13 +63,13 @@ %fs = OpFunction %void None %18 %19 = OpLabel %20 = OpBitcast %uint %int_0 - %23 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_0 + %23 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %26 = OpLoad %uint %23 None %27 = OpULessThan %bool %20 %26 OpSelectionMerge %29 None OpBranchConditional %27 %30 %31 %30 = OpLabel - %49 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_1 %20 + %49 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %20 %51 = OpLoad %uint %49 None %33 = OpIEqual %bool %51 %uint_34 OpBranch %29 @@ -87,13 +88,13 @@ OpBranch %35 %35 = OpLabel %37 = OpBitcast %uint %int_1 - %39 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_0 + %39 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %40 = OpLoad %uint %39 None %41 = OpULessThan %bool %37 %40 OpSelectionMerge %42 None OpBranchConditional %41 %43 %44 %43 = OpLabel - %58 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_1 %37 + %58 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %37 %59 = OpLoad %uint %58 None %46 = OpIEqual %bool %59 %uint_35 OpBranch %42
diff --git a/test/tint/extensions/resource_table/to_let.wgsl.expected.dxc.hlsl b/test/tint/extensions/resource_table/to_let.wgsl.expected.dxc.hlsl index 17de5d1..a2add09 100644 --- a/test/tint/extensions/resource_table/to_let.wgsl.expected.dxc.hlsl +++ b/test/tint/extensions/resource_table/to_let.wgsl.expected.dxc.hlsl
@@ -1,5 +1,43 @@ -SKIP: FAILED +struct fs_outputs { + float4 tint_symbol : SV_Target0; +}; -resource tables not supported by the HLSL backend -tint executable returned error: exit status 1 +Texture2D<float4> tint_resource_table_array[] : register(t51, space43); +SamplerState tint_resource_table_array_1[] : register(s51, space44); +ByteAddressBuffer tint_resource_table_metadata : register(t52, space42); +float4 fs_inner() { + bool v = false; + if ((2u < tint_resource_table_metadata.Load(0u))) { + v = (tint_resource_table_metadata.Load(12u) == 5u); + } else { + v = false; + } + uint v_1 = 0u; + if (v) { + v_1 = 2u; + } else { + v_1 = (0u + tint_resource_table_metadata.Load(0u)); + } + uint v_2 = v_1; + bool v_3 = false; + if ((3u < tint_resource_table_metadata.Load(0u))) { + v_3 = (tint_resource_table_metadata.Load(16u) == 33u); + } else { + v_3 = false; + } + uint v_4 = 0u; + if (v_3) { + v_4 = 3u; + } else { + v_4 = (1u + tint_resource_table_metadata.Load(0u)); + } + uint v_5 = v_4; + return tint_resource_table_array[v_2].Sample(tint_resource_table_array_1[v_5], (0.0f).xx); +} + +fs_outputs fs() { + fs_outputs v_6 = {fs_inner()}; + return v_6; +} +
diff --git a/test/tint/extensions/resource_table/to_let.wgsl.expected.fxc.hlsl b/test/tint/extensions/resource_table/to_let.wgsl.expected.fxc.hlsl index 17de5d1..36c3a4f 100644 --- a/test/tint/extensions/resource_table/to_let.wgsl.expected.fxc.hlsl +++ b/test/tint/extensions/resource_table/to_let.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@ SKIP: FAILED -resource tables not supported by the HLSL backend +resource tables not supported by the HLSL backend for compiling with FXC tint executable returned error: exit status 1
diff --git a/test/tint/extensions/resource_table/to_let.wgsl.expected.spvasm b/test/tint/extensions/resource_table/to_let.wgsl.expected.spvasm index 0a5692d..af5fcb8 100644 --- a/test/tint/extensions/resource_table/to_let.wgsl.expected.spvasm +++ b/test/tint/extensions/resource_table/to_let.wgsl.expected.spvasm
@@ -9,23 +9,24 @@ OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %fs "fs" %fs_loc0_Output OpExecutionMode %fs OriginUpperLeft - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 0 "array_length" - OpMemberName %tint_resource_table_buffer_tint_explicit_layout 1 "bindings" - OpName %tint_resource_table_buffer_tint_explicit_layout "tint_resource_table_buffer_tint_explicit_layout" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 0 "array_length" + OpMemberName %tint_resource_table_metadata_struct_tint_explicit_layout 1 "bindings" + OpName %tint_resource_table_metadata_struct_tint_explicit_layout "tint_resource_table_metadata_struct_tint_explicit_layout" + OpName %tint_resource_table_metadata "tint_resource_table_metadata" OpName %fs_loc0_Output "fs_loc0_Output" OpName %fs_inner "fs_inner" OpName %fs "fs" - OpDecorate %1 DescriptorSet 42 - OpDecorate %1 Binding 41 - OpDecorate %6 DescriptorSet 42 - OpDecorate %6 Binding 41 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 0 Offset 0 + OpDecorate %1 DescriptorSet 43 + OpDecorate %1 Binding 51 + OpDecorate %6 DescriptorSet 43 + OpDecorate %6 Binding 51 + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 0 Offset 0 OpDecorate %_runtimearr_uint ArrayStride 4 - OpMemberDecorate %tint_resource_table_buffer_tint_explicit_layout 1 Offset 4 - OpDecorate %tint_resource_table_buffer_tint_explicit_layout Block - OpDecorate %10 DescriptorSet 42 - OpDecorate %10 Binding 42 - OpDecorate %10 NonWritable + OpMemberDecorate %tint_resource_table_metadata_struct_tint_explicit_layout 1 Offset 4 + OpDecorate %tint_resource_table_metadata_struct_tint_explicit_layout Block + OpDecorate %tint_resource_table_metadata DescriptorSet 42 + OpDecorate %tint_resource_table_metadata Binding 52 + OpDecorate %tint_resource_table_metadata NonWritable OpDecorate %fs_loc0_Output Location 0 %float = OpTypeFloat 32 %4 = OpTypeImage %float 2D 0 0 0 1 Unknown @@ -38,9 +39,9 @@ %6 = OpVariable %_ptr_UniformConstant__runtimearr_9 UniformConstant %uint = OpTypeInt 32 0 %_runtimearr_uint = OpTypeRuntimeArray %uint -%tint_resource_table_buffer_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint -%_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_buffer_tint_explicit_layout - %10 = OpVariable %_ptr_StorageBuffer_tint_resource_table_buffer_tint_explicit_layout StorageBuffer +%tint_resource_table_metadata_struct_tint_explicit_layout = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout = OpTypePointer StorageBuffer %tint_resource_table_metadata_struct_tint_explicit_layout +%tint_resource_table_metadata = OpVariable %_ptr_StorageBuffer_tint_resource_table_metadata_struct_tint_explicit_layout StorageBuffer %v4float = OpTypeVector %float 4 %_ptr_Output_v4float = OpTypePointer Output %v4float %fs_loc0_Output = OpVariable %_ptr_Output_v4float Output @@ -63,13 +64,13 @@ %77 = OpTypeFunction %void %fs_inner = OpFunction %v4float None %19 %20 = OpLabel - %21 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %21 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %24 = OpLoad %uint %21 None %25 = OpULessThan %bool %uint_2 %24 OpSelectionMerge %28 None OpBranchConditional %25 %29 %30 %29 = OpLabel - %64 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_1 %uint_2 + %64 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %uint_2 %66 = OpLoad %uint %64 None %32 = OpIEqual %bool %66 %uint_5 OpBranch %28 @@ -82,7 +83,7 @@ %35 = OpLabel OpBranch %34 %36 = OpLabel - %68 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %68 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %69 = OpLoad %uint %68 None %38 = OpIAdd %uint %uint_0 %69 OpBranch %34 @@ -90,13 +91,13 @@ %37 = OpPhi %uint %uint_2 %35 %38 %36 %39 = OpAccessChain %_ptr_UniformConstant_4 %1 %37 %41 = OpLoad %4 %39 None - %42 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %42 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %43 = OpLoad %uint %42 None %44 = OpULessThan %bool %uint_3 %43 OpSelectionMerge %46 None OpBranchConditional %44 %47 %48 %47 = OpLabel - %70 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_1 %uint_3 + %70 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_1 %uint_3 %71 = OpLoad %uint %70 None %50 = OpIEqual %bool %71 %uint_33 OpBranch %46 @@ -109,7 +110,7 @@ %52 = OpLabel OpBranch %51 %53 = OpLabel - %73 = OpAccessChain %_ptr_StorageBuffer_uint %10 %uint_0 + %73 = OpAccessChain %_ptr_StorageBuffer_uint %tint_resource_table_metadata %uint_0 %74 = OpLoad %uint %73 None %55 = OpIAdd %uint %uint_1 %74 OpBranch %51