struct lightingInfo {
  float3 diffuse;
  float3 specular;
};

static float u_Float = 0.0f;
static float3 u_Color = float3(0.0f, 0.0f, 0.0f);
Texture2D<float4> TextureSamplerTexture : register(t1, space2);
SamplerState TextureSamplerSampler : register(s0, space2);
static float2 vMainuv = float2(0.0f, 0.0f);
cbuffer cbuffer_x_269 : register(b6, space2) {
  uint4 x_269[11];
};
static float4 v_output1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
static bool gl_FrontFacing = false;
static float2 v_uv = float2(0.0f, 0.0f);
static float4 v_output2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
Texture2D<float4> TextureSampler1Texture : register(t3, space2);
SamplerState TextureSampler1Sampler : register(s2, space2);
cbuffer cbuffer_light0 : register(b5, space0) {
  uint4 light0[6];
};
static float4 glFragColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
SamplerState bumpSamplerSampler : register(s4, space2);
Texture2D<float4> bumpSamplerTexture : register(t5, space2);

float3x3 cotangent_frame_vf3_vf3_vf2_vf2_(inout float3 normal_1, inout float3 p, inout float2 uv, inout float2 tangentSpaceParams) {
  float3 dp1 = float3(0.0f, 0.0f, 0.0f);
  float3 dp2 = float3(0.0f, 0.0f, 0.0f);
  float2 duv1 = float2(0.0f, 0.0f);
  float2 duv2 = float2(0.0f, 0.0f);
  float3 dp2perp = float3(0.0f, 0.0f, 0.0f);
  float3 dp1perp = float3(0.0f, 0.0f, 0.0f);
  float3 tangent = float3(0.0f, 0.0f, 0.0f);
  float3 bitangent = float3(0.0f, 0.0f, 0.0f);
  float invmax = 0.0f;
  const float3 x_133 = p;
  dp1 = ddx(x_133);
  const float3 x_136 = p;
  dp2 = ddy(x_136);
  const float2 x_139 = uv;
  duv1 = ddx(x_139);
  const float2 x_142 = uv;
  duv2 = ddy(x_142);
  const float3 x_145 = dp2;
  const float3 x_146 = normal_1;
  dp2perp = cross(x_145, x_146);
  const float3 x_149 = normal_1;
  dp1perp = cross(x_149, dp1);
  const float3 x_153 = dp2perp;
  const float x_155 = duv1.x;
  const float3 x_157 = dp1perp;
  const float x_159 = duv2.x;
  tangent = ((x_153 * x_155) + (x_157 * x_159));
  const float3 x_163 = dp2perp;
  const float x_165 = duv1.y;
  const float3 x_167 = dp1perp;
  const float x_169 = duv2.y;
  bitangent = ((x_163 * x_165) + (x_167 * x_169));
  const float x_173 = tangentSpaceParams.x;
  tangent = (tangent * x_173);
  const float x_177 = tangentSpaceParams.y;
  bitangent = (bitangent * x_177);
  invmax = rsqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
  const float3 x_191 = (tangent * invmax);
  const float3 x_194 = (bitangent * invmax);
  const float3 x_195 = normal_1;
  return float3x3(float3(x_191.x, x_191.y, x_191.z), float3(x_194.x, x_194.y, x_194.z), float3(x_195.x, x_195.y, x_195.z));
}

float3x3 transposeMat3_mf33_(inout float3x3 inMatrix) {
  float3 i0 = float3(0.0f, 0.0f, 0.0f);
  float3 i1 = float3(0.0f, 0.0f, 0.0f);
  float3 i2 = float3(0.0f, 0.0f, 0.0f);
  float3x3 outMatrix = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  const float3 x_60 = inMatrix[0];
  i0 = x_60;
  const float3 x_64 = inMatrix[1];
  i1 = x_64;
  const float3 x_68 = inMatrix[2];
  i2 = x_68;
  const float x_73 = i0.x;
  const float x_75 = i1.x;
  const float x_77 = i2.x;
  const float3 x_78 = float3(x_73, x_75, x_77);
  const float x_81 = i0.y;
  const float x_83 = i1.y;
  const float x_85 = i2.y;
  const float3 x_86 = float3(x_81, x_83, x_85);
  const float x_89 = i0.z;
  const float x_91 = i1.z;
  const float x_93 = i2.z;
  const float3 x_94 = float3(x_89, x_91, x_93);
  outMatrix = float3x3(float3(x_78.x, x_78.y, x_78.z), float3(x_86.x, x_86.y, x_86.z), float3(x_94.x, x_94.y, x_94.z));
  return outMatrix;
}

float3 perturbNormalBase_mf33_vf3_f1_(inout float3x3 cotangentFrame, inout float3 normal, inout float scale) {
  const float3x3 x_113 = cotangentFrame;
  const float3 x_114 = normal;
  return normalize(mul(x_114, x_113));
}

float3 perturbNormal_mf33_vf3_f1_(inout float3x3 cotangentFrame_1, inout float3 textureSample, inout float scale_1) {
  float3x3 param = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  float3 param_1 = float3(0.0f, 0.0f, 0.0f);
  float param_2 = 0.0f;
  const float3 x_119 = textureSample;
  const float3x3 x_125 = cotangentFrame_1;
  param = x_125;
  param_1 = ((x_119 * 2.0f) - float3(1.0f, 1.0f, 1.0f));
  const float x_128 = scale_1;
  param_2 = x_128;
  const float3 x_129 = perturbNormalBase_mf33_vf3_f1_(param, param_1, param_2);
  return x_129;
}

lightingInfo computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(inout float3 viewDirectionW, inout float3 vNormal, inout float4 lightData, inout float3 diffuseColor, inout float3 specularColor, inout float3 groundColor, inout float glossiness) {
  float ndl = 0.0f;
  lightingInfo result = (lightingInfo)0;
  float3 angleW = float3(0.0f, 0.0f, 0.0f);
  float specComp = 0.0f;
  const float3 x_212 = vNormal;
  const float4 x_213 = lightData;
  ndl = ((dot(x_212, float3(x_213.x, x_213.y, x_213.z)) * 0.5f) + 0.5f);
  const float3 x_220 = groundColor;
  const float3 x_221 = diffuseColor;
  const float x_222 = ndl;
  result.diffuse = lerp(x_220, x_221, float3(x_222, x_222, x_222));
  const float3 x_227 = viewDirectionW;
  const float4 x_228 = lightData;
  angleW = normalize((x_227 + float3(x_228.x, x_228.y, x_228.z)));
  const float3 x_233 = vNormal;
  specComp = max(0.0f, dot(x_233, angleW));
  const float x_237 = specComp;
  const float x_238 = glossiness;
  specComp = pow(x_237, max(1.0f, x_238));
  const float x_241 = specComp;
  const float3 x_242 = specularColor;
  result.specular = (x_242 * x_241);
  return result;
}

void main_1() {
  float4 tempTextureRead = float4(0.0f, 0.0f, 0.0f, 0.0f);
  float3 rgb = float3(0.0f, 0.0f, 0.0f);
  float3 output5 = float3(0.0f, 0.0f, 0.0f);
  float4 output4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  float2 uvOffset = float2(0.0f, 0.0f);
  float normalScale = 0.0f;
  float2 TBNUV = float2(0.0f, 0.0f);
  float2 x_299 = float2(0.0f, 0.0f);
  float3x3 TBN = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  float3 param_3 = float3(0.0f, 0.0f, 0.0f);
  float3 param_4 = float3(0.0f, 0.0f, 0.0f);
  float2 param_5 = float2(0.0f, 0.0f);
  float2 param_6 = float2(0.0f, 0.0f);
  float3x3 invTBN = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  float3x3 param_7 = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  float parallaxLimit = 0.0f;
  float2 vOffsetDir = float2(0.0f, 0.0f);
  float2 vMaxOffset = float2(0.0f, 0.0f);
  float numSamples = 0.0f;
  float stepSize = 0.0f;
  float currRayHeight = 0.0f;
  float2 vCurrOffset = float2(0.0f, 0.0f);
  float2 vLastOffset = float2(0.0f, 0.0f);
  float lastSampledHeight = 0.0f;
  float currSampledHeight = 0.0f;
  int i = 0;
  float delta1 = 0.0f;
  float delta2 = 0.0f;
  float ratio = 0.0f;
  float2 parallaxOcclusion_0 = float2(0.0f, 0.0f);
  float3x3 param_8 = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  float3 param_9 = float3(0.0f, 0.0f, 0.0f);
  float param_10 = 0.0f;
  float2 output6 = float2(0.0f, 0.0f);
  float4 tempTextureRead1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  float3 rgb1 = float3(0.0f, 0.0f, 0.0f);
  float3 viewDirectionW_1 = float3(0.0f, 0.0f, 0.0f);
  float shadow = 0.0f;
  float glossiness_1 = 0.0f;
  float3 diffuseBase = float3(0.0f, 0.0f, 0.0f);
  float3 specularBase = float3(0.0f, 0.0f, 0.0f);
  float3 normalW = float3(0.0f, 0.0f, 0.0f);
  lightingInfo info = (lightingInfo)0;
  float3 param_11 = float3(0.0f, 0.0f, 0.0f);
  float3 param_12 = float3(0.0f, 0.0f, 0.0f);
  float4 param_13 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  float3 param_14 = float3(0.0f, 0.0f, 0.0f);
  float3 param_15 = float3(0.0f, 0.0f, 0.0f);
  float3 param_16 = float3(0.0f, 0.0f, 0.0f);
  float param_17 = 0.0f;
  float3 diffuseOutput = float3(0.0f, 0.0f, 0.0f);
  float3 specularOutput = float3(0.0f, 0.0f, 0.0f);
  float3 output3 = float3(0.0f, 0.0f, 0.0f);
  u_Float = 100.0f;
  u_Color = float3(0.5f, 0.5f, 0.5f);
  const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, vMainuv);
  tempTextureRead = x_262;
  const float4 x_264 = tempTextureRead;
  const uint scalar_offset = (160u) / 4;
  const float x_273 = asfloat(x_269[scalar_offset / 4][scalar_offset % 4]);
  rgb = (float3(x_264.x, x_264.y, x_264.z) * x_273);
  const uint scalar_offset_1 = (144u) / 4;
  const float3 x_279 = asfloat(x_269[scalar_offset_1 / 4].xyz);
  const float4 x_282 = v_output1;
  output5 = normalize((x_279 - float3(x_282.x, x_282.y, x_282.z)));
  output4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  uvOffset = float2(0.0f, 0.0f);
  const uint scalar_offset_2 = (128u) / 4;
  const float x_292 = asfloat(x_269[scalar_offset_2 / 4][scalar_offset_2 % 4]);
  normalScale = (1.0f / x_292);
  if (gl_FrontFacing) {
    x_299 = v_uv;
  } else {
    x_299 = -(v_uv);
  }
  TBNUV = x_299;
  const float4 x_310 = v_output2;
  param_3 = (float3(x_310.x, x_310.y, x_310.z) * normalScale);
  const float4 x_317 = v_output1;
  param_4 = float3(x_317.x, x_317.y, x_317.z);
  param_5 = TBNUV;
  const uint scalar_offset_3 = (168u) / 4;
  uint4 ubo_load = x_269[scalar_offset_3 / 4];
  const float2 x_324 = asfloat(((scalar_offset_3 & 2) ? ubo_load.zw : ubo_load.xy));
  param_6 = x_324;
  const float3x3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
  TBN = x_325;
  param_7 = TBN;
  const float3x3 x_329 = transposeMat3_mf33_(param_7);
  invTBN = x_329;
  const float3 x_334 = mul(-(output5), invTBN);
  parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(output5), invTBN).z);
  const uint scalar_offset_4 = (156u) / 4;
  const float x_345 = asfloat(x_269[scalar_offset_4 / 4][scalar_offset_4 % 4]);
  parallaxLimit = (parallaxLimit * x_345);
  const float3 x_352 = mul(-(output5), invTBN);
  vOffsetDir = normalize(float2(x_352.x, x_352.y));
  vMaxOffset = (vOffsetDir * parallaxLimit);
  const float4 x_366 = v_output2;
  numSamples = (15.0f + (dot(mul(-(output5), invTBN), mul(float3(x_366.x, x_366.y, x_366.z), invTBN)) * -11.0f));
  stepSize = (1.0f / numSamples);
  currRayHeight = 1.0f;
  vCurrOffset = float2(0.0f, 0.0f);
  vLastOffset = float2(0.0f, 0.0f);
  lastSampledHeight = 1.0f;
  currSampledHeight = 1.0f;
  i = 0;
  {
    for(; (i < 15); i = (i + 1)) {
      const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + vCurrOffset));
      currSampledHeight = x_397.w;
      if ((currSampledHeight > currRayHeight)) {
        delta1 = (currSampledHeight - currRayHeight);
        delta2 = ((currRayHeight + stepSize) - lastSampledHeight);
        ratio = (delta1 / (delta1 + delta2));
        vCurrOffset = ((vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio)));
        break;
      } else {
        currRayHeight = (currRayHeight - stepSize);
        vLastOffset = vCurrOffset;
        vCurrOffset = (vCurrOffset + (vMaxOffset * stepSize));
        lastSampledHeight = currSampledHeight;
      }
    }
  }
  parallaxOcclusion_0 = vCurrOffset;
  uvOffset = parallaxOcclusion_0;
  const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + uvOffset));
  const uint scalar_offset_5 = (128u) / 4;
  const float x_454 = asfloat(x_269[scalar_offset_5 / 4][scalar_offset_5 % 4]);
  param_8 = TBN;
  param_9 = float3(x_452.x, x_452.y, x_452.z);
  param_10 = (1.0f / x_454);
  const float3 x_461 = perturbNormal_mf33_vf3_f1_(param_8, param_9, param_10);
  output4 = float4(x_461.x, x_461.y, x_461.z, output4.w);
  output6 = (v_uv + uvOffset);
  const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, output6);
  tempTextureRead1 = x_475;
  const float4 x_477 = tempTextureRead1;
  rgb1 = float3(x_477.x, x_477.y, x_477.z);
  const uint scalar_offset_6 = (144u) / 4;
  const float3 x_481 = asfloat(x_269[scalar_offset_6 / 4].xyz);
  const float4 x_482 = v_output1;
  viewDirectionW_1 = normalize((x_481 - float3(x_482.x, x_482.y, x_482.z)));
  shadow = 1.0f;
  glossiness_1 = (1.0f * u_Float);
  diffuseBase = float3(0.0f, 0.0f, 0.0f);
  specularBase = float3(0.0f, 0.0f, 0.0f);
  const float4 x_494 = output4;
  normalW = float3(x_494.x, x_494.y, x_494.z);
  param_11 = viewDirectionW_1;
  param_12 = normalW;
  const uint scalar_offset_7 = (0u) / 4;
  const float4 x_507 = asfloat(light0[scalar_offset_7 / 4]);
  param_13 = x_507;
  const uint scalar_offset_8 = (16u) / 4;
  const float4 x_510 = asfloat(light0[scalar_offset_8 / 4]);
  param_14 = float3(x_510.x, x_510.y, x_510.z);
  const uint scalar_offset_9 = (32u) / 4;
  const float4 x_514 = asfloat(light0[scalar_offset_9 / 4]);
  param_15 = float3(x_514.x, x_514.y, x_514.z);
  const uint scalar_offset_10 = (48u) / 4;
  const float3 x_518 = asfloat(light0[scalar_offset_10 / 4].xyz);
  param_16 = x_518;
  param_17 = glossiness_1;
  const lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
  info = x_521;
  shadow = 1.0f;
  const float3 x_523 = info.diffuse;
  diffuseBase = (diffuseBase + (x_523 * shadow));
  const float3 x_529 = info.specular;
  specularBase = (specularBase + (x_529 * shadow));
  diffuseOutput = (diffuseBase * rgb1);
  specularOutput = (specularBase * u_Color);
  output3 = (diffuseOutput + specularOutput);
  const float3 x_548 = output3;
  glFragColor = float4(x_548.x, x_548.y, x_548.z, 1.0f);
  return;
}

struct main_out {
  float4 glFragColor_1;
};
struct tint_symbol_1 {
  float4 v_output1_param : TEXCOORD0;
  float2 vMainuv_param : TEXCOORD1;
  float4 v_output2_param : TEXCOORD2;
  float2 v_uv_param : TEXCOORD3;
  bool gl_FrontFacing_param : SV_IsFrontFace;
};
struct tint_symbol_2 {
  float4 glFragColor_1 : SV_Target0;
};

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const float2 vMainuv_param = tint_symbol.vMainuv_param;
  const float4 v_output1_param = tint_symbol.v_output1_param;
  const bool gl_FrontFacing_param = tint_symbol.gl_FrontFacing_param;
  const float2 v_uv_param = tint_symbol.v_uv_param;
  const float4 v_output2_param = tint_symbol.v_output2_param;
  vMainuv = vMainuv_param;
  v_output1 = v_output1_param;
  gl_FrontFacing = gl_FrontFacing_param;
  v_uv = v_uv_param;
  v_output2 = v_output2_param;
  main_1();
  const main_out tint_symbol_3 = {glFragColor};
  const tint_symbol_2 tint_symbol_9 = {tint_symbol_3.glFragColor_1};
  return tint_symbol_9;
}
