cbuffer cbuffer_uniforms : register(b0, space0) {
  uint4 uniforms[10];
};
ByteAddressBuffer pointLights : register(t1, space0);
SamplerState mySampler : register(s2, space0);
Texture2D<float4> myTexture : register(t3, space0);

struct FragmentInput {
  float4 position;
  float4 view_position;
  float4 normal;
  float2 uv;
  float4 color;
};
struct FragmentOutput {
  float4 color;
};

float4 getColor(FragmentInput fragment) {
  float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
  if ((uniforms[8].y == 0u)) {
    color = fragment.color;
  } else {
    if ((uniforms[8].y == 1u)) {
      color = fragment.normal;
      color.a = 1.0f;
    } else {
      if ((uniforms[8].y == 2u)) {
        color = asfloat(uniforms[9]);
      } else {
        if ((uniforms[8].y == 3u)) {
          color = myTexture.Sample(mySampler, fragment.uv);
        }
      }
    }
  }
  return color;
}

struct tint_symbol_1 {
  float4 view_position : TEXCOORD0;
  float4 normal : TEXCOORD1;
  float2 uv : TEXCOORD2;
  float4 color : TEXCOORD3;
  float4 position : SV_Position;
};
struct tint_symbol_2 {
  float4 color : SV_Target0;
};

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const FragmentInput fragment = {tint_symbol.position, tint_symbol.view_position, tint_symbol.normal, tint_symbol.uv, tint_symbol.color};
  FragmentOutput output = (FragmentOutput)0;
  output.color = float4(1.0f, 0.0f, 0.0f, 1.0f);
  uniforms;
  mySampler;
  myTexture;
  pointLights;
  const tint_symbol_2 tint_symbol_5 = {output.color};
  return tint_symbol_5;
}
