diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
index b351a33..3583595 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -2,18 +2,12 @@
 
 struct ExternalTextureParams {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  mat3x4 yuvToRgbConversionMatrix;
 };
 
 layout(binding = 2) uniform ExternalTextureParams_1 {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  mat3x4 yuvToRgbConversionMatrix;
 } ext_tex_params;
 
 uniform highp sampler2D arg_0_1;
@@ -38,18 +32,12 @@
 
 struct ExternalTextureParams {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  mat3x4 yuvToRgbConversionMatrix;
 };
 
 layout(binding = 2) uniform ExternalTextureParams_1 {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  mat3x4 yuvToRgbConversionMatrix;
 } ext_tex_params;
 
 uniform highp sampler2D arg_0_1;
@@ -69,18 +57,12 @@
 
 struct ExternalTextureParams {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  mat3x4 yuvToRgbConversionMatrix;
 };
 
 layout(binding = 2) uniform ExternalTextureParams_1 {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  mat3x4 yuvToRgbConversionMatrix;
 } ext_tex_params;
 
 uniform highp sampler2D arg_0_1;
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl
index 4697e5b..78d6e70 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl
@@ -1,6 +1,6 @@
 Texture2D<float4> ext_tex_plane_1 : register(t1, space1);
 cbuffer cbuffer_ext_tex_params : register(b2, space1) {
-  uint4 ext_tex_params[2];
+  uint4 ext_tex_params[4];
 };
 Texture2D<float4> arg_0 : register(t0, space1);
 
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl
index 1faa96a..6a4127b 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl
@@ -3,10 +3,7 @@
 using namespace metal;
 struct ExternalTextureParams {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  float3x4 yuvToRgbConversionMatrix;
 };
 
 void textureDimensions_ba1481(texture2d<float, access::sample> tint_symbol_1) {
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm
index 461515f..9ff8d5a 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability ImageQuery
@@ -16,10 +16,7 @@
                OpName %ext_tex_plane_1 "ext_tex_plane_1"
                OpName %ExternalTextureParams "ExternalTextureParams"
                OpMemberName %ExternalTextureParams 0 "numPlanes"
-               OpMemberName %ExternalTextureParams 1 "vr"
-               OpMemberName %ExternalTextureParams 2 "ug"
-               OpMemberName %ExternalTextureParams 3 "vg"
-               OpMemberName %ExternalTextureParams 4 "ub"
+               OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix"
                OpName %ext_tex_params "ext_tex_params"
                OpName %arg_0 "arg_0"
                OpName %textureDimensions_ba1481 "textureDimensions_ba1481"
@@ -34,10 +31,9 @@
                OpDecorate %ext_tex_plane_1 Binding 1
                OpDecorate %ExternalTextureParams Block
                OpMemberDecorate %ExternalTextureParams 0 Offset 0
-               OpMemberDecorate %ExternalTextureParams 1 Offset 4
-               OpMemberDecorate %ExternalTextureParams 2 Offset 8
-               OpMemberDecorate %ExternalTextureParams 3 Offset 12
-               OpMemberDecorate %ExternalTextureParams 4 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 ColMajor
+               OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16
                OpDecorate %ext_tex_params NonWritable
                OpDecorate %ext_tex_params DescriptorSet 1
                OpDecorate %ext_tex_params Binding 2
@@ -55,46 +51,47 @@
 %_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
 %ext_tex_plane_1 = OpVariable %_ptr_UniformConstant_11 UniformConstant
        %uint = OpTypeInt 32 0
-%ExternalTextureParams = OpTypeStruct %uint %float %float %float %float
+%mat3v4float = OpTypeMatrix %v4float 3
+%ExternalTextureParams = OpTypeStruct %uint %mat3v4float
 %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
 %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
       %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
+         %18 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
       %int_0 = OpConstant %int 0
 %_ptr_Function_v2int = OpTypePointer Function %v2int
-         %28 = OpConstantNull %v2int
-         %29 = OpTypeFunction %v4float
+         %29 = OpConstantNull %v2int
+         %30 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-%textureDimensions_ba1481 = OpFunction %void None %17
-         %20 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %28
-         %24 = OpLoad %11 %arg_0
-         %21 = OpImageQuerySizeLod %v2int %24 %int_0
-               OpStore %res %21
+%textureDimensions_ba1481 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2int Function %29
+         %25 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySizeLod %v2int %25 %int_0
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %textureDimensions_ba1481
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_ba1481
                OpReturnValue %5
                OpFunctionEnd
-%vertex_main = OpFunction %void None %17
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+%vertex_main = OpFunction %void None %18
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %17
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %textureDimensions_ba1481
+%fragment_main = OpFunction %void None %18
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_ba1481
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %17
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %textureDimensions_ba1481
+%compute_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_ba1481
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl
index a14b74b..f1d67e8 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl
@@ -1,39 +1,35 @@
 struct ExternalTextureParams {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  float3x4 yuvToRgbConversionMatrix;
 };
 
 Texture2D<float4> ext_tex_plane_1 : register(t1, space1);
 cbuffer cbuffer_ext_tex_params : register(b2, space1) {
-  uint4 ext_tex_params[2];
+  uint4 ext_tex_params[4];
 };
 Texture2D<float4> arg_0 : register(t0, space1);
 
 float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, int2 coord, ExternalTextureParams params) {
+  float3 color = float3(0.0f, 0.0f, 0.0f);
   if ((params.numPlanes == 1u)) {
-    return plane0.Load(int3(coord, 0));
+    color = plane0.Load(int3(coord, 0)).rgb;
+  } else {
+    color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
   }
-  const float y = (plane0.Load(int3(coord, 0)).r - 0.0625f);
-  const float2 uv = (plane1.Load(int3(coord, 0)).rg - 0.5f);
-  const float u = uv.x;
-  const float v = uv.y;
-  const float r = ((1.164000034f * y) + (params.vr * v));
-  const float g = (((1.164000034f * y) - (params.ug * u)) - (params.vg * v));
-  const float b = ((1.164000034f * y) + (params.ub * u));
-  return float4(r, g, b, 1.0f);
+  return float4(color, 1.0f);
 }
 
-ExternalTextureParams tint_symbol_1(uint4 buffer[2], uint offset) {
+float3x4 tint_symbol_3(uint4 buffer[4], uint offset) {
   const uint scalar_offset = ((offset + 0u)) / 4;
-  const uint scalar_offset_1 = ((offset + 4u)) / 4;
-  const uint scalar_offset_2 = ((offset + 8u)) / 4;
-  const uint scalar_offset_3 = ((offset + 12u)) / 4;
-  const uint scalar_offset_4 = ((offset + 16u)) / 4;
-  const ExternalTextureParams tint_symbol_4 = {buffer[scalar_offset / 4][scalar_offset % 4], asfloat(buffer[scalar_offset_1 / 4][scalar_offset_1 % 4]), asfloat(buffer[scalar_offset_2 / 4][scalar_offset_2 % 4]), asfloat(buffer[scalar_offset_3 / 4][scalar_offset_3 % 4]), asfloat(buffer[scalar_offset_4 / 4][scalar_offset_4 % 4])};
-  return tint_symbol_4;
+  const uint scalar_offset_1 = ((offset + 16u)) / 4;
+  const uint scalar_offset_2 = ((offset + 32u)) / 4;
+  return float3x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4]));
+}
+
+ExternalTextureParams tint_symbol_1(uint4 buffer[4], uint offset) {
+  const uint scalar_offset_3 = ((offset + 0u)) / 4;
+  const ExternalTextureParams tint_symbol_5 = {buffer[scalar_offset_3 / 4][scalar_offset_3 % 4], tint_symbol_3(buffer, (offset + 16u))};
+  return tint_symbol_5;
 }
 
 void textureLoad_8acf41() {
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl
index d91b328..2cf34bc 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl
@@ -3,24 +3,18 @@
 using namespace metal;
 struct ExternalTextureParams {
   /* 0x0000 */ uint numPlanes;
-  /* 0x0004 */ float vr;
-  /* 0x0008 */ float ug;
-  /* 0x000c */ float vg;
-  /* 0x0010 */ float ub;
+  /* 0x0004 */ int8_t tint_pad[12];
+  /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
 };
 
 float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<float, access::sample> plane1, int2 coord, ExternalTextureParams params) {
+  float3 color = 0.0f;
   if ((params.numPlanes == 1u)) {
-    return plane0.read(uint2(coord), 0);
+    color = float4(plane0.read(uint2(coord), 0)).rgb;
+  } else {
+    color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix);
   }
-  float const y = (plane0.read(uint2(coord), 0)[0] - 0.0625f);
-  float2 const uv = (float4(plane1.read(uint2(coord), 0)).rg - 0.5f);
-  float const u = uv[0];
-  float const v = uv[1];
-  float const r = ((1.164000034f * y) + (params.vr * v));
-  float const g = (((1.164000034f * y) - (params.ug * u)) - (params.vg * v));
-  float const b = ((1.164000034f * y) + (params.ub * u));
-  return float4(r, g, b, 1.0f);
+  return float4(color, 1.0f);
 }
 
 void textureLoad_8acf41(texture2d<float, access::sample> tint_symbol_1, texture2d<float, access::sample> tint_symbol_2, const constant ExternalTextureParams* const tint_symbol_3) {
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm
index 4ac3e99..8e9330c 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 91
+; Bound: 81
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,7 @@
                OpName %ext_tex_plane_1 "ext_tex_plane_1"
                OpName %ExternalTextureParams "ExternalTextureParams"
                OpMemberName %ExternalTextureParams 0 "numPlanes"
-               OpMemberName %ExternalTextureParams 1 "vr"
-               OpMemberName %ExternalTextureParams 2 "ug"
-               OpMemberName %ExternalTextureParams 3 "vg"
-               OpMemberName %ExternalTextureParams 4 "ub"
+               OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix"
                OpName %ext_tex_params "ext_tex_params"
                OpName %arg_0 "arg_0"
                OpName %textureLoadExternal "textureLoadExternal"
@@ -26,6 +23,7 @@
                OpName %plane1 "plane1"
                OpName %coord "coord"
                OpName %params "params"
+               OpName %color "color"
                OpName %textureLoad_8acf41 "textureLoad_8acf41"
                OpName %res "res"
                OpName %vertex_main_inner "vertex_main_inner"
@@ -38,10 +36,9 @@
                OpDecorate %ext_tex_plane_1 Binding 1
                OpDecorate %ExternalTextureParams Block
                OpMemberDecorate %ExternalTextureParams 0 Offset 0
-               OpMemberDecorate %ExternalTextureParams 1 Offset 4
-               OpMemberDecorate %ExternalTextureParams 2 Offset 8
-               OpMemberDecorate %ExternalTextureParams 3 Offset 12
-               OpMemberDecorate %ExternalTextureParams 4 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 ColMajor
+               OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16
                OpDecorate %ext_tex_params NonWritable
                OpDecorate %ext_tex_params DescriptorSet 1
                OpDecorate %ext_tex_params Binding 2
@@ -59,99 +56,92 @@
 %_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
 %ext_tex_plane_1 = OpVariable %_ptr_UniformConstant_11 UniformConstant
        %uint = OpTypeInt 32 0
-%ExternalTextureParams = OpTypeStruct %uint %float %float %float %float
+%mat3v4float = OpTypeMatrix %v4float 3
+%ExternalTextureParams = OpTypeStruct %uint %mat3v4float
 %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
 %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
       %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %17 = OpTypeFunction %v4float %11 %11 %v2int %ExternalTextureParams
+         %18 = OpTypeFunction %v4float %11 %11 %v2int %ExternalTextureParams
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %30 = OpConstantNull %v3float
      %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
-%float_0_0625 = OpConstant %float 0.0625
     %v2float = OpTypeVector %float 2
-  %float_0_5 = OpConstant %float 0.5
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %45 = OpConstantNull %v2float
-%float_1_16400003 = OpConstant %float 1.16400003
     %float_1 = OpConstant %float 1
        %void = OpTypeVoid
-         %67 = OpTypeFunction %void
-         %74 = OpConstantNull %v2int
+         %57 = OpTypeFunction %void
+         %64 = OpConstantNull %v2int
 %_ptr_Function_v4float = OpTypePointer Function %v4float
-         %78 = OpTypeFunction %v4float
-%textureLoadExternal = OpFunction %v4float None %17
+         %68 = OpTypeFunction %v4float
+%textureLoadExternal = OpFunction %v4float None %18
      %plane0 = OpFunctionParameter %11
      %plane1 = OpFunctionParameter %11
       %coord = OpFunctionParameter %v2int
      %params = OpFunctionParameter %ExternalTextureParams
-         %25 = OpLabel
-         %43 = OpVariable %_ptr_Function_v2float Function %45
-         %26 = OpCompositeExtract %uint %params 0
-         %28 = OpIEqual %bool %26 %uint_1
-               OpSelectionMerge %30 None
-               OpBranchConditional %28 %31 %30
-         %31 = OpLabel
-         %32 = OpImageFetch %v4float %plane0 %coord Lod %int_0
-               OpReturnValue %32
-         %30 = OpLabel
-         %34 = OpImageFetch %v4float %plane0 %coord Lod %int_0
-         %35 = OpCompositeExtract %float %34 0
-         %37 = OpFSub %float %35 %float_0_0625
-         %38 = OpImageFetch %v4float %plane1 %coord Lod %int_0
-         %40 = OpVectorShuffle %v2float %38 %38 0 1
-         %46 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
-         %42 = OpFSub %v2float %40 %46
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %50 = OpFMul %float %float_1_16400003 %37
-         %51 = OpCompositeExtract %float %params 1
-         %52 = OpFMul %float %51 %48
-         %53 = OpFAdd %float %50 %52
-         %54 = OpFMul %float %float_1_16400003 %37
-         %55 = OpCompositeExtract %float %params 2
-         %56 = OpFMul %float %55 %47
-         %57 = OpFSub %float %54 %56
-         %58 = OpCompositeExtract %float %params 3
-         %59 = OpFMul %float %58 %48
-         %60 = OpFSub %float %57 %59
-         %61 = OpFMul %float %float_1_16400003 %37
-         %62 = OpCompositeExtract %float %params 4
-         %63 = OpFMul %float %62 %47
-         %64 = OpFAdd %float %61 %63
-         %66 = OpCompositeConstruct %v4float %53 %60 %64 %float_1
-               OpReturnValue %66
+         %26 = OpLabel
+      %color = OpVariable %_ptr_Function_v3float Function %30
+         %31 = OpCompositeExtract %uint %params 0
+         %33 = OpIEqual %bool %31 %uint_1
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %37
+         %36 = OpLabel
+         %38 = OpImageFetch %v4float %plane0 %coord Lod %int_0
+         %40 = OpVectorShuffle %v3float %38 %38 0 1 2
+               OpStore %color %40
+               OpBranch %35
+         %37 = OpLabel
+         %41 = OpImageFetch %v4float %plane0 %coord Lod %int_0
+         %42 = OpCompositeExtract %float %41 0
+         %43 = OpImageFetch %v4float %plane1 %coord Lod %int_0
+         %45 = OpVectorShuffle %v2float %43 %43 0 1
+         %46 = OpCompositeExtract %float %45 0
+         %47 = OpCompositeExtract %float %45 1
+         %49 = OpCompositeConstruct %v4float %42 %46 %47 %float_1
+         %50 = OpCompositeExtract %mat3v4float %params 1
+         %51 = OpVectorTimesMatrix %v3float %49 %50
+               OpStore %color %51
+               OpBranch %35
+         %35 = OpLabel
+         %52 = OpLoad %v3float %color
+         %53 = OpCompositeExtract %float %52 0
+         %54 = OpCompositeExtract %float %52 1
+         %55 = OpCompositeExtract %float %52 2
+         %56 = OpCompositeConstruct %v4float %53 %54 %55 %float_1
+               OpReturnValue %56
                OpFunctionEnd
-%textureLoad_8acf41 = OpFunction %void None %67
-         %70 = OpLabel
+%textureLoad_8acf41 = OpFunction %void None %57
+         %60 = OpLabel
         %res = OpVariable %_ptr_Function_v4float Function %5
-         %72 = OpLoad %11 %arg_0
-         %73 = OpLoad %11 %ext_tex_plane_1
-         %75 = OpLoad %ExternalTextureParams %ext_tex_params
-         %71 = OpFunctionCall %v4float %textureLoadExternal %72 %73 %74 %75
-               OpStore %res %71
+         %62 = OpLoad %11 %arg_0
+         %63 = OpLoad %11 %ext_tex_plane_1
+         %65 = OpLoad %ExternalTextureParams %ext_tex_params
+         %61 = OpFunctionCall %v4float %textureLoadExternal %62 %63 %64 %65
+               OpStore %res %61
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %78
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %textureLoad_8acf41
+%vertex_main_inner = OpFunction %v4float None %68
+         %70 = OpLabel
+         %71 = OpFunctionCall %void %textureLoad_8acf41
                OpReturnValue %5
                OpFunctionEnd
-%vertex_main = OpFunction %void None %67
-         %83 = OpLabel
-         %84 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %84
+%vertex_main = OpFunction %void None %57
+         %73 = OpLabel
+         %74 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %74
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %67
-         %86 = OpLabel
-         %87 = OpFunctionCall %void %textureLoad_8acf41
+%fragment_main = OpFunction %void None %57
+         %76 = OpLabel
+         %77 = OpFunctionCall %void %textureLoad_8acf41
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %67
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %textureLoad_8acf41
+%compute_main = OpFunction %void None %57
+         %79 = OpLabel
+         %80 = OpFunctionCall %void %textureLoad_8acf41
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl
index 4fe76bc..dce01cb 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl
@@ -1,40 +1,36 @@
 struct ExternalTextureParams {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  float3x4 yuvToRgbConversionMatrix;
 };
 
 Texture2D<float4> ext_tex_plane_1 : register(t2, space1);
 cbuffer cbuffer_ext_tex_params : register(b3, space1) {
-  uint4 ext_tex_params[2];
+  uint4 ext_tex_params[4];
 };
 Texture2D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 
 float4 textureSampleExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, SamplerState smp, float2 coord, ExternalTextureParams params) {
+  float3 color = float3(0.0f, 0.0f, 0.0f);
   if ((params.numPlanes == 1u)) {
-    return plane0.SampleLevel(smp, coord, 0.0f);
+    color = plane0.SampleLevel(smp, coord, 0.0f).rgb;
+  } else {
+    color = mul(params.yuvToRgbConversionMatrix, float4(plane0.SampleLevel(smp, coord, 0.0f).r, plane1.SampleLevel(smp, coord, 0.0f).rg, 1.0f));
   }
-  const float y = (plane0.SampleLevel(smp, coord, 0.0f).r - 0.0625f);
-  const float2 uv = (plane1.SampleLevel(smp, coord, 0.0f).rg - 0.5f);
-  const float u = uv.x;
-  const float v = uv.y;
-  const float r = ((1.164000034f * y) + (params.vr * v));
-  const float g = (((1.164000034f * y) - (params.ug * u)) - (params.vg * v));
-  const float b = ((1.164000034f * y) + (params.ub * u));
-  return float4(r, g, b, 1.0f);
+  return float4(color, 1.0f);
 }
 
-ExternalTextureParams tint_symbol_1(uint4 buffer[2], uint offset) {
+float3x4 tint_symbol_3(uint4 buffer[4], uint offset) {
   const uint scalar_offset = ((offset + 0u)) / 4;
-  const uint scalar_offset_1 = ((offset + 4u)) / 4;
-  const uint scalar_offset_2 = ((offset + 8u)) / 4;
-  const uint scalar_offset_3 = ((offset + 12u)) / 4;
-  const uint scalar_offset_4 = ((offset + 16u)) / 4;
-  const ExternalTextureParams tint_symbol_4 = {buffer[scalar_offset / 4][scalar_offset % 4], asfloat(buffer[scalar_offset_1 / 4][scalar_offset_1 % 4]), asfloat(buffer[scalar_offset_2 / 4][scalar_offset_2 % 4]), asfloat(buffer[scalar_offset_3 / 4][scalar_offset_3 % 4]), asfloat(buffer[scalar_offset_4 / 4][scalar_offset_4 % 4])};
-  return tint_symbol_4;
+  const uint scalar_offset_1 = ((offset + 16u)) / 4;
+  const uint scalar_offset_2 = ((offset + 32u)) / 4;
+  return float3x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4]));
+}
+
+ExternalTextureParams tint_symbol_1(uint4 buffer[4], uint offset) {
+  const uint scalar_offset_3 = ((offset + 0u)) / 4;
+  const ExternalTextureParams tint_symbol_5 = {buffer[scalar_offset_3 / 4][scalar_offset_3 % 4], tint_symbol_3(buffer, (offset + 16u))};
+  return tint_symbol_5;
 }
 
 void textureSampleLevel_979816() {
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl
index 9b4be13..2a297df 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl
@@ -3,24 +3,18 @@
 using namespace metal;
 struct ExternalTextureParams {
   /* 0x0000 */ uint numPlanes;
-  /* 0x0004 */ float vr;
-  /* 0x0008 */ float ug;
-  /* 0x000c */ float vg;
-  /* 0x0010 */ float ub;
+  /* 0x0004 */ int8_t tint_pad[12];
+  /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
 };
 
 float4 textureSampleExternal(texture2d<float, access::sample> plane0, texture2d<float, access::sample> plane1, sampler smp, float2 coord, ExternalTextureParams params) {
+  float3 color = 0.0f;
   if ((params.numPlanes == 1u)) {
-    return plane0.sample(smp, coord, level(0.0f));
+    color = float4(plane0.sample(smp, coord, level(0.0f))).rgb;
+  } else {
+    color = (float4(plane0.sample(smp, coord, level(0.0f))[0], float4(plane1.sample(smp, coord, level(0.0f))).rg, 1.0f) * params.yuvToRgbConversionMatrix);
   }
-  float const y = (plane0.sample(smp, coord, level(0.0f))[0] - 0.0625f);
-  float2 const uv = (float4(plane1.sample(smp, coord, level(0.0f))).rg - 0.5f);
-  float const u = uv[0];
-  float const v = uv[1];
-  float const r = ((1.164000034f * y) + (params.vr * v));
-  float const g = (((1.164000034f * y) - (params.ug * u)) - (params.vg * v));
-  float const b = ((1.164000034f * y) + (params.ub * u));
-  return float4(r, g, b, 1.0f);
+  return float4(color, 1.0f);
 }
 
 void textureSampleLevel_979816(texture2d<float, access::sample> tint_symbol_1, texture2d<float, access::sample> tint_symbol_2, sampler tint_symbol_3, const constant ExternalTextureParams* const tint_symbol_4) {
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm
index 62347b9..ae6490c 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 97
+; Bound: 88
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,7 @@
                OpName %ext_tex_plane_1 "ext_tex_plane_1"
                OpName %ExternalTextureParams "ExternalTextureParams"
                OpMemberName %ExternalTextureParams 0 "numPlanes"
-               OpMemberName %ExternalTextureParams 1 "vr"
-               OpMemberName %ExternalTextureParams 2 "ug"
-               OpMemberName %ExternalTextureParams 3 "vg"
-               OpMemberName %ExternalTextureParams 4 "ub"
+               OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix"
                OpName %ext_tex_params "ext_tex_params"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
@@ -28,6 +25,7 @@
                OpName %smp "smp"
                OpName %coord "coord"
                OpName %params "params"
+               OpName %color "color"
                OpName %textureSampleLevel_979816 "textureSampleLevel_979816"
                OpName %res "res"
                OpName %vertex_main_inner "vertex_main_inner"
@@ -40,10 +38,9 @@
                OpDecorate %ext_tex_plane_1 Binding 2
                OpDecorate %ExternalTextureParams Block
                OpMemberDecorate %ExternalTextureParams 0 Offset 0
-               OpMemberDecorate %ExternalTextureParams 1 Offset 4
-               OpMemberDecorate %ExternalTextureParams 2 Offset 8
-               OpMemberDecorate %ExternalTextureParams 3 Offset 12
-               OpMemberDecorate %ExternalTextureParams 4 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 ColMajor
+               OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16
                OpDecorate %ext_tex_params NonWritable
                OpDecorate %ext_tex_params DescriptorSet 1
                OpDecorate %ext_tex_params Binding 3
@@ -63,105 +60,99 @@
 %_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
 %ext_tex_plane_1 = OpVariable %_ptr_UniformConstant_11 UniformConstant
        %uint = OpTypeInt 32 0
-%ExternalTextureParams = OpTypeStruct %uint %float %float %float %float
+%mat3v4float = OpTypeMatrix %v4float 3
+%ExternalTextureParams = OpTypeStruct %uint %mat3v4float
 %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
 %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
       %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
-         %19 = OpTypeSampler
-%_ptr_UniformConstant_19 = OpTypePointer UniformConstant %19
-      %arg_1 = OpVariable %_ptr_UniformConstant_19 UniformConstant
+         %20 = OpTypeSampler
+%_ptr_UniformConstant_20 = OpTypePointer UniformConstant %20
+      %arg_1 = OpVariable %_ptr_UniformConstant_20 UniformConstant
     %v2float = OpTypeVector %float 2
-         %20 = OpTypeFunction %v4float %11 %11 %19 %v2float %ExternalTextureParams
+         %21 = OpTypeFunction %v4float %11 %11 %20 %v2float %ExternalTextureParams
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %33 = OpConstantNull %v3float
      %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
-         %36 = OpTypeSampledImage %11
+         %42 = OpTypeSampledImage %11
     %float_0 = OpConstant %float 0
-%float_0_0625 = OpConstant %float 0.0625
-  %float_0_5 = OpConstant %float 0.5
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %51 = OpConstantNull %v2float
-%float_1_16400003 = OpConstant %float 1.16400003
     %float_1 = OpConstant %float 1
        %void = OpTypeVoid
-         %73 = OpTypeFunction %void
+         %63 = OpTypeFunction %void
+         %71 = OpConstantNull %v2float
 %_ptr_Function_v4float = OpTypePointer Function %v4float
-         %84 = OpTypeFunction %v4float
-%textureSampleExternal = OpFunction %v4float None %20
+         %75 = OpTypeFunction %v4float
+%textureSampleExternal = OpFunction %v4float None %21
      %plane0 = OpFunctionParameter %11
      %plane1 = OpFunctionParameter %11
-        %smp = OpFunctionParameter %19
+        %smp = OpFunctionParameter %20
       %coord = OpFunctionParameter %v2float
      %params = OpFunctionParameter %ExternalTextureParams
-         %28 = OpLabel
-         %49 = OpVariable %_ptr_Function_v2float Function %51
-         %29 = OpCompositeExtract %uint %params 0
-         %31 = OpIEqual %bool %29 %uint_1
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %33
-         %34 = OpLabel
-         %37 = OpSampledImage %36 %plane0 %smp
-         %35 = OpImageSampleExplicitLod %v4float %37 %coord Lod %float_0
-               OpReturnValue %35
-         %33 = OpLabel
-         %40 = OpSampledImage %36 %plane0 %smp
-         %39 = OpImageSampleExplicitLod %v4float %40 %coord Lod %float_0
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpFSub %float %41 %float_0_0625
-         %45 = OpSampledImage %36 %plane1 %smp
-         %44 = OpImageSampleExplicitLod %v4float %45 %coord Lod %float_0
-         %46 = OpVectorShuffle %v2float %44 %44 0 1
-         %52 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
-         %48 = OpFSub %v2float %46 %52
-         %53 = OpCompositeExtract %float %48 0
-         %54 = OpCompositeExtract %float %48 1
-         %56 = OpFMul %float %float_1_16400003 %43
-         %57 = OpCompositeExtract %float %params 1
-         %58 = OpFMul %float %57 %54
-         %59 = OpFAdd %float %56 %58
-         %60 = OpFMul %float %float_1_16400003 %43
-         %61 = OpCompositeExtract %float %params 2
-         %62 = OpFMul %float %61 %53
-         %63 = OpFSub %float %60 %62
-         %64 = OpCompositeExtract %float %params 3
-         %65 = OpFMul %float %64 %54
-         %66 = OpFSub %float %63 %65
-         %67 = OpFMul %float %float_1_16400003 %43
-         %68 = OpCompositeExtract %float %params 4
-         %69 = OpFMul %float %68 %53
-         %70 = OpFAdd %float %67 %69
-         %72 = OpCompositeConstruct %v4float %59 %66 %70 %float_1
-               OpReturnValue %72
+         %29 = OpLabel
+      %color = OpVariable %_ptr_Function_v3float Function %33
+         %34 = OpCompositeExtract %uint %params 0
+         %36 = OpIEqual %bool %34 %uint_1
+               OpSelectionMerge %38 None
+               OpBranchConditional %36 %39 %40
+         %39 = OpLabel
+         %43 = OpSampledImage %42 %plane0 %smp
+         %41 = OpImageSampleExplicitLod %v4float %43 %coord Lod %float_0
+         %45 = OpVectorShuffle %v3float %41 %41 0 1 2
+               OpStore %color %45
+               OpBranch %38
+         %40 = OpLabel
+         %47 = OpSampledImage %42 %plane0 %smp
+         %46 = OpImageSampleExplicitLod %v4float %47 %coord Lod %float_0
+         %48 = OpCompositeExtract %float %46 0
+         %50 = OpSampledImage %42 %plane1 %smp
+         %49 = OpImageSampleExplicitLod %v4float %50 %coord Lod %float_0
+         %51 = OpVectorShuffle %v2float %49 %49 0 1
+         %52 = OpCompositeExtract %float %51 0
+         %53 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %48 %52 %53 %float_1
+         %56 = OpCompositeExtract %mat3v4float %params 1
+         %57 = OpVectorTimesMatrix %v3float %55 %56
+               OpStore %color %57
+               OpBranch %38
+         %38 = OpLabel
+         %58 = OpLoad %v3float %color
+         %59 = OpCompositeExtract %float %58 0
+         %60 = OpCompositeExtract %float %58 1
+         %61 = OpCompositeExtract %float %58 2
+         %62 = OpCompositeConstruct %v4float %59 %60 %61 %float_1
+               OpReturnValue %62
                OpFunctionEnd
-%textureSampleLevel_979816 = OpFunction %void None %73
-         %76 = OpLabel
+%textureSampleLevel_979816 = OpFunction %void None %63
+         %66 = OpLabel
         %res = OpVariable %_ptr_Function_v4float Function %5
-         %78 = OpLoad %11 %arg_0
-         %79 = OpLoad %11 %ext_tex_plane_1
-         %80 = OpLoad %19 %arg_1
-         %81 = OpLoad %ExternalTextureParams %ext_tex_params
-         %77 = OpFunctionCall %v4float %textureSampleExternal %78 %79 %80 %51 %81
-               OpStore %res %77
+         %68 = OpLoad %11 %arg_0
+         %69 = OpLoad %11 %ext_tex_plane_1
+         %70 = OpLoad %20 %arg_1
+         %72 = OpLoad %ExternalTextureParams %ext_tex_params
+         %67 = OpFunctionCall %v4float %textureSampleExternal %68 %69 %70 %71 %72
+               OpStore %res %67
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %84
-         %86 = OpLabel
-         %87 = OpFunctionCall %void %textureSampleLevel_979816
+%vertex_main_inner = OpFunction %v4float None %75
+         %77 = OpLabel
+         %78 = OpFunctionCall %void %textureSampleLevel_979816
                OpReturnValue %5
                OpFunctionEnd
-%vertex_main = OpFunction %void None %73
-         %89 = OpLabel
-         %90 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %90
+%vertex_main = OpFunction %void None %63
+         %80 = OpLabel
+         %81 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %81
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %73
-         %92 = OpLabel
-         %93 = OpFunctionCall %void %textureSampleLevel_979816
+%fragment_main = OpFunction %void None %63
+         %83 = OpLabel
+         %84 = OpFunctionCall %void %textureSampleLevel_979816
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %73
-         %95 = OpLabel
-         %96 = OpFunctionCall %void %textureSampleLevel_979816
+%compute_main = OpFunction %void None %63
+         %86 = OpLabel
+         %87 = OpFunctionCall %void %textureSampleLevel_979816
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.hlsl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.hlsl
index e7f6715..e821392 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.hlsl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.hlsl
@@ -1,43 +1,39 @@
 struct ExternalTextureParams {
   uint numPlanes;
-  float vr;
-  float ug;
-  float vg;
-  float ub;
+  float3x4 yuvToRgbConversionMatrix;
 };
 
 Texture2D<float4> ext_tex_plane_1 : register(t1, space1);
 cbuffer cbuffer_ext_tex_params : register(b2, space1) {
-  uint4 ext_tex_params[2];
+  uint4 ext_tex_params[4];
 };
 Texture2D<float4> arg_0 : register(t0, space1);
 
 float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, int2 coord, ExternalTextureParams params) {
+  float3 color = float3(0.0f, 0.0f, 0.0f);
   if ((params.numPlanes == 1u)) {
-    return plane0.Load(int3(coord, 0));
+    color = plane0.Load(int3(coord, 0)).rgb;
+  } else {
+    color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
   }
-  const float y = (plane0.Load(int3(coord, 0)).r - 0.0625f);
-  const float2 uv = (plane1.Load(int3(coord, 0)).rg - 0.5f);
-  const float u = uv.x;
-  const float v = uv.y;
-  const float r = ((1.164000034f * y) + (params.vr * v));
-  const float g = (((1.164000034f * y) - (params.ug * u)) - (params.vg * v));
-  const float b = ((1.164000034f * y) + (params.ub * u));
-  return float4(r, g, b, 1.0f);
+  return float4(color, 1.0f);
 }
 
 float4 textureLoad2d(Texture2D<float4> tint_symbol, Texture2D<float4> ext_tex_plane_1_1, ExternalTextureParams ext_tex_params_1, int2 coords) {
   return textureLoadExternal(tint_symbol, ext_tex_plane_1_1, coords, ext_tex_params_1);
 }
 
-ExternalTextureParams tint_symbol_2(uint4 buffer[2], uint offset) {
+float3x4 tint_symbol_4(uint4 buffer[4], uint offset) {
   const uint scalar_offset = ((offset + 0u)) / 4;
-  const uint scalar_offset_1 = ((offset + 4u)) / 4;
-  const uint scalar_offset_2 = ((offset + 8u)) / 4;
-  const uint scalar_offset_3 = ((offset + 12u)) / 4;
-  const uint scalar_offset_4 = ((offset + 16u)) / 4;
-  const ExternalTextureParams tint_symbol_5 = {buffer[scalar_offset / 4][scalar_offset % 4], asfloat(buffer[scalar_offset_1 / 4][scalar_offset_1 % 4]), asfloat(buffer[scalar_offset_2 / 4][scalar_offset_2 % 4]), asfloat(buffer[scalar_offset_3 / 4][scalar_offset_3 % 4]), asfloat(buffer[scalar_offset_4 / 4][scalar_offset_4 % 4])};
-  return tint_symbol_5;
+  const uint scalar_offset_1 = ((offset + 16u)) / 4;
+  const uint scalar_offset_2 = ((offset + 32u)) / 4;
+  return float3x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4]));
+}
+
+ExternalTextureParams tint_symbol_2(uint4 buffer[4], uint offset) {
+  const uint scalar_offset_3 = ((offset + 0u)) / 4;
+  const ExternalTextureParams tint_symbol_6 = {buffer[scalar_offset_3 / 4][scalar_offset_3 % 4], tint_symbol_4(buffer, (offset + 16u))};
+  return tint_symbol_6;
 }
 
 void doTextureLoad() {
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl
index 4e82e4d..bc167c9 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl
@@ -3,24 +3,18 @@
 using namespace metal;
 struct ExternalTextureParams {
   /* 0x0000 */ uint numPlanes;
-  /* 0x0004 */ float vr;
-  /* 0x0008 */ float ug;
-  /* 0x000c */ float vg;
-  /* 0x0010 */ float ub;
+  /* 0x0004 */ int8_t tint_pad[12];
+  /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
 };
 
 float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<float, access::sample> plane1, int2 coord, ExternalTextureParams params) {
+  float3 color = 0.0f;
   if ((params.numPlanes == 1u)) {
-    return plane0.read(uint2(coord), 0);
+    color = float4(plane0.read(uint2(coord), 0)).rgb;
+  } else {
+    color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix);
   }
-  float const y = (plane0.read(uint2(coord), 0)[0] - 0.0625f);
-  float2 const uv = (float4(plane1.read(uint2(coord), 0)).rg - 0.5f);
-  float const u = uv[0];
-  float const v = uv[1];
-  float const r = ((1.164000034f * y) + (params.vr * v));
-  float const g = (((1.164000034f * y) - (params.ug * u)) - (params.vg * v));
-  float const b = ((1.164000034f * y) + (params.ub * u));
-  return float4(r, g, b, 1.0f);
+  return float4(color, 1.0f);
 }
 
 float4 textureLoad2d(texture2d<float, access::sample> tint_symbol, texture2d<float, access::sample> ext_tex_plane_1_1, ExternalTextureParams ext_tex_params_1, int2 coords) {
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.spvasm b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.spvasm
index cd8297f..9fbc846 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.spvasm
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 99
+; Bound: 89
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,7 @@
                OpName %ext_tex_plane_1 "ext_tex_plane_1"
                OpName %ExternalTextureParams "ExternalTextureParams"
                OpMemberName %ExternalTextureParams 0 "numPlanes"
-               OpMemberName %ExternalTextureParams 1 "vr"
-               OpMemberName %ExternalTextureParams 2 "ug"
-               OpMemberName %ExternalTextureParams 3 "vg"
-               OpMemberName %ExternalTextureParams 4 "ub"
+               OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix"
                OpName %ext_tex_params "ext_tex_params"
                OpName %arg_0 "arg_0"
                OpName %textureLoadExternal "textureLoadExternal"
@@ -26,6 +23,7 @@
                OpName %plane1 "plane1"
                OpName %coord "coord"
                OpName %params "params"
+               OpName %color "color"
                OpName %textureLoad2d "textureLoad2d"
                OpName %texture "texture"
                OpName %ext_tex_plane_1_1 "ext_tex_plane_1_1"
@@ -43,10 +41,9 @@
                OpDecorate %ext_tex_plane_1 Binding 1
                OpDecorate %ExternalTextureParams Block
                OpMemberDecorate %ExternalTextureParams 0 Offset 0
-               OpMemberDecorate %ExternalTextureParams 1 Offset 4
-               OpMemberDecorate %ExternalTextureParams 2 Offset 8
-               OpMemberDecorate %ExternalTextureParams 3 Offset 12
-               OpMemberDecorate %ExternalTextureParams 4 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 Offset 16
+               OpMemberDecorate %ExternalTextureParams 1 ColMajor
+               OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16
                OpDecorate %ext_tex_params NonWritable
                OpDecorate %ext_tex_params DescriptorSet 1
                OpDecorate %ext_tex_params Binding 2
@@ -64,109 +61,102 @@
 %_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
 %ext_tex_plane_1 = OpVariable %_ptr_UniformConstant_11 UniformConstant
        %uint = OpTypeInt 32 0
-%ExternalTextureParams = OpTypeStruct %uint %float %float %float %float
+%mat3v4float = OpTypeMatrix %v4float 3
+%ExternalTextureParams = OpTypeStruct %uint %mat3v4float
 %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
 %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
       %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %17 = OpTypeFunction %v4float %11 %11 %v2int %ExternalTextureParams
+         %18 = OpTypeFunction %v4float %11 %11 %v2int %ExternalTextureParams
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %30 = OpConstantNull %v3float
      %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
-%float_0_0625 = OpConstant %float 0.0625
     %v2float = OpTypeVector %float 2
-  %float_0_5 = OpConstant %float 0.5
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %45 = OpConstantNull %v2float
-%float_1_16400003 = OpConstant %float 1.16400003
     %float_1 = OpConstant %float 1
-         %67 = OpTypeFunction %v4float %11 %11 %ExternalTextureParams %v2int
+         %57 = OpTypeFunction %v4float %11 %11 %ExternalTextureParams %v2int
        %void = OpTypeVoid
-         %75 = OpTypeFunction %void
-         %83 = OpConstantNull %v2int
+         %65 = OpTypeFunction %void
+         %73 = OpConstantNull %v2int
 %_ptr_Function_v4float = OpTypePointer Function %v4float
-         %86 = OpTypeFunction %v4float
-%textureLoadExternal = OpFunction %v4float None %17
+         %76 = OpTypeFunction %v4float
+%textureLoadExternal = OpFunction %v4float None %18
      %plane0 = OpFunctionParameter %11
      %plane1 = OpFunctionParameter %11
       %coord = OpFunctionParameter %v2int
      %params = OpFunctionParameter %ExternalTextureParams
-         %25 = OpLabel
-         %43 = OpVariable %_ptr_Function_v2float Function %45
-         %26 = OpCompositeExtract %uint %params 0
-         %28 = OpIEqual %bool %26 %uint_1
-               OpSelectionMerge %30 None
-               OpBranchConditional %28 %31 %30
-         %31 = OpLabel
-         %32 = OpImageFetch %v4float %plane0 %coord Lod %int_0
-               OpReturnValue %32
-         %30 = OpLabel
-         %34 = OpImageFetch %v4float %plane0 %coord Lod %int_0
-         %35 = OpCompositeExtract %float %34 0
-         %37 = OpFSub %float %35 %float_0_0625
-         %38 = OpImageFetch %v4float %plane1 %coord Lod %int_0
-         %40 = OpVectorShuffle %v2float %38 %38 0 1
-         %46 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
-         %42 = OpFSub %v2float %40 %46
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %50 = OpFMul %float %float_1_16400003 %37
-         %51 = OpCompositeExtract %float %params 1
-         %52 = OpFMul %float %51 %48
-         %53 = OpFAdd %float %50 %52
-         %54 = OpFMul %float %float_1_16400003 %37
-         %55 = OpCompositeExtract %float %params 2
-         %56 = OpFMul %float %55 %47
-         %57 = OpFSub %float %54 %56
-         %58 = OpCompositeExtract %float %params 3
-         %59 = OpFMul %float %58 %48
-         %60 = OpFSub %float %57 %59
-         %61 = OpFMul %float %float_1_16400003 %37
-         %62 = OpCompositeExtract %float %params 4
-         %63 = OpFMul %float %62 %47
-         %64 = OpFAdd %float %61 %63
-         %66 = OpCompositeConstruct %v4float %53 %60 %64 %float_1
-               OpReturnValue %66
+         %26 = OpLabel
+      %color = OpVariable %_ptr_Function_v3float Function %30
+         %31 = OpCompositeExtract %uint %params 0
+         %33 = OpIEqual %bool %31 %uint_1
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %37
+         %36 = OpLabel
+         %38 = OpImageFetch %v4float %plane0 %coord Lod %int_0
+         %40 = OpVectorShuffle %v3float %38 %38 0 1 2
+               OpStore %color %40
+               OpBranch %35
+         %37 = OpLabel
+         %41 = OpImageFetch %v4float %plane0 %coord Lod %int_0
+         %42 = OpCompositeExtract %float %41 0
+         %43 = OpImageFetch %v4float %plane1 %coord Lod %int_0
+         %45 = OpVectorShuffle %v2float %43 %43 0 1
+         %46 = OpCompositeExtract %float %45 0
+         %47 = OpCompositeExtract %float %45 1
+         %49 = OpCompositeConstruct %v4float %42 %46 %47 %float_1
+         %50 = OpCompositeExtract %mat3v4float %params 1
+         %51 = OpVectorTimesMatrix %v3float %49 %50
+               OpStore %color %51
+               OpBranch %35
+         %35 = OpLabel
+         %52 = OpLoad %v3float %color
+         %53 = OpCompositeExtract %float %52 0
+         %54 = OpCompositeExtract %float %52 1
+         %55 = OpCompositeExtract %float %52 2
+         %56 = OpCompositeConstruct %v4float %53 %54 %55 %float_1
+               OpReturnValue %56
                OpFunctionEnd
-%textureLoad2d = OpFunction %v4float None %67
+%textureLoad2d = OpFunction %v4float None %57
     %texture = OpFunctionParameter %11
 %ext_tex_plane_1_1 = OpFunctionParameter %11
 %ext_tex_params_1 = OpFunctionParameter %ExternalTextureParams
      %coords = OpFunctionParameter %v2int
-         %73 = OpLabel
-         %74 = OpFunctionCall %v4float %textureLoadExternal %texture %ext_tex_plane_1_1 %coords %ext_tex_params_1
-               OpReturnValue %74
+         %63 = OpLabel
+         %64 = OpFunctionCall %v4float %textureLoadExternal %texture %ext_tex_plane_1_1 %coords %ext_tex_params_1
+               OpReturnValue %64
                OpFunctionEnd
-%doTextureLoad = OpFunction %void None %75
-         %78 = OpLabel
+%doTextureLoad = OpFunction %void None %65
+         %68 = OpLabel
         %res = OpVariable %_ptr_Function_v4float Function %5
-         %80 = OpLoad %11 %arg_0
-         %81 = OpLoad %11 %ext_tex_plane_1
-         %82 = OpLoad %ExternalTextureParams %ext_tex_params
-         %79 = OpFunctionCall %v4float %textureLoad2d %80 %81 %82 %83
-               OpStore %res %79
+         %70 = OpLoad %11 %arg_0
+         %71 = OpLoad %11 %ext_tex_plane_1
+         %72 = OpLoad %ExternalTextureParams %ext_tex_params
+         %69 = OpFunctionCall %v4float %textureLoad2d %70 %71 %72 %73
+               OpStore %res %69
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %86
-         %88 = OpLabel
-         %89 = OpFunctionCall %void %doTextureLoad
+%vertex_main_inner = OpFunction %v4float None %76
+         %78 = OpLabel
+         %79 = OpFunctionCall %void %doTextureLoad
                OpReturnValue %5
                OpFunctionEnd
-%vertex_main = OpFunction %void None %75
-         %91 = OpLabel
-         %92 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %92
+%vertex_main = OpFunction %void None %65
+         %81 = OpLabel
+         %82 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %82
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %75
-         %94 = OpLabel
-         %95 = OpFunctionCall %void %doTextureLoad
+%fragment_main = OpFunction %void None %65
+         %84 = OpLabel
+         %85 = OpFunctionCall %void %doTextureLoad
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %75
-         %97 = OpLabel
-         %98 = OpFunctionCall %void %doTextureLoad
+%compute_main = OpFunction %void None %65
+         %87 = OpLabel
+         %88 = OpFunctionCall %void %doTextureLoad
                OpReturn
                OpFunctionEnd
