diff --git a/src/tint/lang/msl/writer/printer/printer.cc b/src/tint/lang/msl/writer/printer/printer.cc
index 3a232f5..6719802 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -1370,6 +1370,10 @@
                 }
             }
 
+            if (auto color = attributes.color) {
+                out << " [[color(" << color.value() << ")]]";
+            }
+
             if (auto interpolation = attributes.interpolation) {
                 auto name = InterpolationToAttribute(interpolation->type, interpolation->sampling);
                 if (name.empty()) {
diff --git a/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl
index b8b4fc8..e9948ba 100644
--- a/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct In {
+  float4 uv;
+};
+
+struct f_inputs {
+  float4 fbf [[color(0)]];
+  float4 In_uv [[user(locn0)]];
+};
+
+void g(float a, float b, float c) {
+}
+
+void f_inner(float4 pos, float4 fbf, In in) {
+  g(pos[0u], fbf[0u], in.uv[0u]);
+}
+
+fragment void f(float4 pos [[position]], f_inputs inputs [[stage_in]]) {
+  f_inner(pos, inputs.fbf, In{.uv=inputs.In_uv});
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl
index b8b4fc8..ec4f7df 100644
--- a/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl
@@ -1,9 +1,18 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct f_inputs {
+  float4 uv [[user(locn0)]];
+  float4 fbf [[color(0)]];
+};
+
+void g(float a, float b, float c) {
+}
+
+void f_inner(float4 pos, float4 uv, float4 fbf) {
+  g(pos[0u], uv[0u], fbf[0u]);
+}
+
+fragment void f(float4 pos [[position]], f_inputs inputs [[stage_in]]) {
+  f_inner(pos, inputs.uv, inputs.fbf);
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl
index 5cb271d..41d6c4a 100644
--- a/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl
@@ -1,9 +1,24 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/utils/containers/slice.h:216 internal compiler error: TINT_ASSERT(i < Length())
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct In {
+  float4 pos;
+  float4 uv;
+  float4 fbf;
+};
+
+struct f_inputs {
+  float4 In_uv [[user(locn0)]];
+  float4 In_fbf [[color(0)]];
+};
+
+void g(float a, float b, float c) {
+}
+
+void f_inner(In in) {
+  g(in.pos[0u], in.uv[0u], in.fbf[1u]);
+}
+
+fragment void f(float4 In_pos [[position]], f_inputs inputs [[stage_in]]) {
+  f_inner(In{.pos=In_pos, .uv=inputs.In_uv, .fbf=inputs.In_fbf});
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl
index b8b4fc8..3522649 100644
--- a/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct In {
+  float4 pos;
+};
+
+struct f_inputs {
+  int4 fbf_2 [[color(2)]];
+  float4 uv [[user(locn0)]];
+  uint4 fbf_0 [[color(0)]];
+};
+
+void g(int a, float b, float c, uint d) {
+}
+
+void f_inner(int4 fbf_2, In in, float4 uv, uint4 fbf_0) {
+  g(fbf_2[2u], in.pos[0u], uv[0u], fbf_0[1u]);
+}
+
+fragment void f(f_inputs inputs [[stage_in]], float4 In_pos [[position]]) {
+  f_inner(inputs.fbf_2, In{.pos=In_pos}, inputs.uv, inputs.fbf_0);
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl
index 5cb271d..b93cb32 100644
--- a/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/utils/containers/slice.h:216 internal compiler error: TINT_ASSERT(i < Length())
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct In {
+  int4 fbf;
+  float4 pos;
+};
+
+struct f_inputs {
+  int4 In_fbf [[color(3)]];
+};
+
+void g(int a, float b) {
+}
+
+void f_inner(In in) {
+  g(in.fbf[3u], in.pos[0u]);
+}
+
+fragment void f(f_inputs inputs [[stage_in]], float4 In_pos [[position]]) {
+  f_inner(In{.fbf=inputs.In_fbf, .pos=In_pos});
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl
index b8b4fc8..89a8791 100644
--- a/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl
@@ -1,9 +1,21 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct In {
+  float4 pos;
+};
+
+struct f_inputs {
+  float4 fbf [[color(2)]];
+};
+
+void g(float a, float b) {
+}
+
+void f_inner(In in, float4 fbf) {
+  g(in.pos[0u], fbf[1u]);
+}
+
+fragment void f(float4 In_pos [[position]], f_inputs inputs [[stage_in]]) {
+  f_inner(In{.pos=In_pos}, inputs.fbf);
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl
index b8b4fc8..ebeb721 100644
--- a/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl
@@ -1,9 +1,17 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct f_inputs {
+  float4 fbf [[color(3)]];
+};
+
+void g(float a, float b) {
+}
+
+void f_inner(float4 fbf, float4 pos) {
+  g(fbf[3u], pos[0u]);
+}
+
+fragment void f(f_inputs inputs [[stage_in]], float4 pos [[position]]) {
+  f_inner(inputs.fbf, pos);
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl
index 5cb271d..c9d1663 100644
--- a/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/utils/containers/slice.h:216 internal compiler error: TINT_ASSERT(i < Length())
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct FBF {
+  float4 c1;
+  int4 c3;
+};
+
+struct f_inputs {
+  float4 FBF_c1 [[color(1)]];
+  int4 FBF_c3 [[color(3)]];
+};
+
+void g(float a, float b, int c) {
+}
+
+void f_inner(float4 pos, FBF fbf) {
+  g(fbf.c1[0u], pos[1u], fbf.c3[2u]);
+}
+
+fragment void f(float4 pos [[position]], f_inputs inputs [[stage_in]]) {
+  f_inner(pos, FBF{.c1=inputs.FBF_c1, .c3=inputs.FBF_c3});
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl
index 5cb271d..d4dbf7a 100644
--- a/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/utils/containers/slice.h:216 internal compiler error: TINT_ASSERT(i < Length())
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct In {
+  float4 a;
+  float4 b;
+  int4 fbf;
+};
+
+struct f_inputs {
+  float4 In_a [[user(locn0)]];
+  float4 In_b [[user(locn1)]] [[flat]];
+  int4 In_fbf [[color(1)]];
+};
+
+void g(float a, float b, int c) {
+}
+
+void f_inner(In in) {
+  g(in.a[0u], in.b[1u], in.fbf[0u]);
+}
+
+fragment void f(f_inputs inputs [[stage_in]]) {
+  f_inner(In{.a=inputs.In_a, .b=inputs.In_b, .fbf=inputs.In_fbf});
+}
diff --git a/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl
index b8b4fc8..9554a0d 100644
--- a/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct f_inputs {
+  float4 a [[user(locn0)]];
+  float4 b [[user(locn1)]] [[flat]];
+  float4 fbf [[color(0)]];
+};
+
+void g(float a, float b, float c) {
+}
+
+void f_inner(float4 a, float4 b, float4 fbf) {
+  g(a[0u], b[1u], fbf[0u]);
+}
+
+fragment void f(f_inputs inputs [[stage_in]]) {
+  f_inner(inputs.a, inputs.b, inputs.fbf);
+}
diff --git a/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl
index b8b4fc8..3fdbf09 100644
--- a/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Out {
+  float4 x;
+  float4 y;
+  float4 z;
+};
+
+struct f_outputs {
+  float4 Out_x [[color(0)]];
+  float4 Out_y [[color(2)]];
+  float4 Out_z [[color(4)]];
+};
+
+struct f_inputs {
+  float4 fbf_1 [[color(1)]];
+  float4 fbf_3 [[color(3)]];
+};
+
+Out f_inner(float4 fbf_1, float4 fbf_3) {
+  return Out{.x=fbf_1, .y=float4(20.0f), .z=fbf_3};
+}
+
+fragment f_outputs f(f_inputs inputs [[stage_in]]) {
+  Out const v = f_inner(inputs.fbf_1, inputs.fbf_3);
+  return f_outputs{.Out_x=v.x, .Out_y=v.y, .Out_z=v.z};
+}
diff --git a/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl
index b8b4fc8..52023c4 100644
--- a/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl
@@ -1,9 +1,27 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Out {
+  float4 x;
+  float4 y;
+  float4 z;
+};
+
+struct f_outputs {
+  float4 Out_x [[color(0)]];
+  float4 Out_y [[color(2)]];
+  float4 Out_z [[color(3)]];
+};
+
+struct f_inputs {
+  float4 fbf [[color(0)]];
+};
+
+Out f_inner(float4 fbf) {
+  return Out{.x=float4(10.0f), .y=fbf, .z=float4(30.0f)};
+}
+
+fragment f_outputs f(f_inputs inputs [[stage_in]]) {
+  Out const v = f_inner(inputs.fbf);
+  return f_outputs{.Out_x=v.x, .Out_y=v.y, .Out_z=v.z};
+}
diff --git a/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl
index b8b4fc8..e88d408 100644
--- a/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct f_outputs {
+  float4 tint_symbol [[color(0)]];
+};
+
+struct f_inputs {
+  float4 fbf_1 [[color(1)]];
+  float4 fbf_3 [[color(3)]];
+};
+
+float4 f_inner(float4 fbf_1, float4 fbf_3) {
+  return (fbf_1 + fbf_3);
+}
+
+fragment f_outputs f(f_inputs inputs [[stage_in]]) {
+  return f_outputs{.tint_symbol=f_inner(inputs.fbf_1, inputs.fbf_3)};
+}
diff --git a/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl
index b8b4fc8..ff99056 100644
--- a/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl
@@ -1,9 +1,18 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct f_outputs {
+  float4 tint_symbol [[color(0)]];
+};
+
+struct f_inputs {
+  float4 fbf [[color(0)]];
+};
+
+float4 f_inner(float4 fbf) {
+  return fbf;
+}
+
+fragment f_outputs f(f_inputs inputs [[stage_in]]) {
+  return f_outputs{.tint_symbol=f_inner(inputs.fbf)};
+}
diff --git a/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl
index b8b4fc8..312c5cd 100644
--- a/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl
@@ -1,9 +1,18 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct f_inputs {
+  float4 fbf_1 [[color(1)]];
+  float4 fbf_3 [[color(3)]];
+};
+
+void g(float a, float b) {
+}
+
+void f_inner(float4 fbf_1, float4 fbf_3) {
+  g(fbf_1[0u], fbf_3[1u]);
+}
+
+fragment void f(f_inputs inputs [[stage_in]]) {
+  f_inner(inputs.fbf_1, inputs.fbf_3);
+}
diff --git a/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl
index b8b4fc8..490ca7a 100644
--- a/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl
@@ -1,9 +1,17 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:371 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct f_inputs {
+  float4 fbf [[color(0)]];
+};
+
+void g(float a) {
+}
+
+void f_inner(float4 fbf) {
+  g(fbf[1u]);
+}
+
+fragment void f(f_inputs inputs [[stage_in]]) {
+  f_inner(inputs.fbf);
+}
