#version 310 es

struct Inner {
  int scalar_i32;
  float scalar_f32;
};

struct S {
  float scalar_f32;
  int scalar_i32;
  uint scalar_u32;
  uint pad;
  vec2 vec2_f32;
  ivec2 vec2_i32;
  uvec2 vec2_u32;
  uint pad_1;
  uint pad_2;
  vec3 vec3_f32;
  uint pad_3;
  ivec3 vec3_i32;
  uint pad_4;
  uvec3 vec3_u32;
  uint pad_5;
  vec4 vec4_f32;
  ivec4 vec4_i32;
  uvec4 vec4_u32;
  mat2 mat2x2_f32;
  mat2x3 mat2x3_f32;
  mat2x4 mat2x4_f32;
  mat3x2 mat3x2_f32;
  uint pad_6;
  uint pad_7;
  mat3 mat3x3_f32;
  mat3x4 mat3x4_f32;
  mat4x2 mat4x2_f32;
  mat4x3 mat4x3_f32;
  mat4 mat4x4_f32;
  vec3 arr2_vec3_f32[2];
  Inner struct_inner;
  Inner array_struct_inner[4];
  uint pad_8;
  uint pad_9;
};

layout(binding = 0, std430) buffer sb_block_ssbo {
  S inner;
} sb;

void tint_symbol() {
  sb.inner.scalar_f32 = 0.0f;
  sb.inner.scalar_i32 = 0;
  sb.inner.scalar_u32 = 0u;
  sb.inner.vec2_f32 = vec2(0.0f);
  sb.inner.vec2_i32 = ivec2(0);
  sb.inner.vec2_u32 = uvec2(0u);
  sb.inner.vec3_f32 = vec3(0.0f);
  sb.inner.vec3_i32 = ivec3(0);
  sb.inner.vec3_u32 = uvec3(0u);
  sb.inner.vec4_f32 = vec4(0.0f);
  sb.inner.vec4_i32 = ivec4(0);
  sb.inner.vec4_u32 = uvec4(0u);
  sb.inner.mat2x2_f32 = mat2(vec2(0.0f), vec2(0.0f));
  sb.inner.mat2x3_f32 = mat2x3(vec3(0.0f), vec3(0.0f));
  sb.inner.mat2x4_f32 = mat2x4(vec4(0.0f), vec4(0.0f));
  sb.inner.mat3x2_f32 = mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f));
  sb.inner.mat3x3_f32 = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
  sb.inner.mat3x4_f32 = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
  sb.inner.mat4x2_f32 = mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f));
  sb.inner.mat4x3_f32 = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
  sb.inner.mat4x4_f32 = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
  vec3 tint_symbol_1[2] = vec3[2](vec3(0.0f), vec3(0.0f));
  sb.inner.arr2_vec3_f32 = tint_symbol_1;
  Inner tint_symbol_2 = Inner(0, 0.0f);
  sb.inner.struct_inner = tint_symbol_2;
  Inner tint_symbol_3[4] = Inner[4](Inner(0, 0.0f), Inner(0, 0.0f), Inner(0, 0.0f), Inner(0, 0.0f));
  sb.inner.array_struct_inner = tint_symbol_3;
}

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