#version 310 es

struct ExternalTextureParams {
  uint numPlanes;
  mat3x4 yuvToRgbConversionMatrix;
};

layout(binding = 2) uniform ExternalTextureParams_1 {
  uint numPlanes;
  mat3x4 yuvToRgbConversionMatrix;
} ext_tex_params;

uniform highp sampler2D arg_0_1;
void textureDimensions_ba1481() {
  ivec2 res = textureSize(arg_0_1, 0);
}

vec4 vertex_main() {
  textureDimensions_ba1481();
  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
}

void main() {
  vec4 inner_result = vertex_main();
  gl_Position = inner_result;
  gl_Position.y = -(gl_Position.y);
  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
  return;
}
#version 310 es
precision mediump float;

struct ExternalTextureParams {
  uint numPlanes;
  mat3x4 yuvToRgbConversionMatrix;
};

layout(binding = 2) uniform ExternalTextureParams_1 {
  uint numPlanes;
  mat3x4 yuvToRgbConversionMatrix;
} ext_tex_params;

uniform highp sampler2D arg_0_1;
void textureDimensions_ba1481() {
  ivec2 res = textureSize(arg_0_1, 0);
}

void fragment_main() {
  textureDimensions_ba1481();
}

void main() {
  fragment_main();
  return;
}
#version 310 es

struct ExternalTextureParams {
  uint numPlanes;
  mat3x4 yuvToRgbConversionMatrix;
};

layout(binding = 2) uniform ExternalTextureParams_1 {
  uint numPlanes;
  mat3x4 yuvToRgbConversionMatrix;
} ext_tex_params;

uniform highp sampler2D arg_0_1;
void textureDimensions_ba1481() {
  ivec2 res = textureSize(arg_0_1, 0);
}

void compute_main() {
  textureDimensions_ba1481();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  compute_main();
  return;
}
