diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl
index 015dcfb..d48a53a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
 Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
 
-void textureDimensions_26d6bf() {
+uint textureDimensions_26d6bf() {
   uint tint_tmp;
   arg_0.GetDimensions(tint_tmp);
   uint res = tint_tmp;
-  prevent_dce.Store(0u, asuint(res));
+  return res;
 }
 
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  textureDimensions_26d6bf();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
 
 void fragment_main() {
-  textureDimensions_26d6bf();
+  prevent_dce.Store(0u, asuint(textureDimensions_26d6bf()));
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  textureDimensions_26d6bf();
+  prevent_dce.Store(0u, asuint(textureDimensions_26d6bf()));
   return;
 }
+
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
+struct tint_symbol_1 {
+  nointerpolation uint prevent_dce : TEXCOORD0;
+  float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+  VertexOutput tint_symbol = (VertexOutput)0;
+  tint_symbol.pos = (0.0f).xxxx;
+  tint_symbol.prevent_dce = textureDimensions_26d6bf();
+  return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+  VertexOutput inner_result = vertex_main_inner();
+  tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+  wrapper_result.pos = inner_result.pos;
+  wrapper_result.prevent_dce = inner_result.prevent_dce;
+  return wrapper_result;
+}
