bug/fxc/gradient_in_varying_loop/1112.wgsl:23:33 warning: 'textureSample' must only be called from uniform control flow
        let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
                                ^^^^^^^^^^^^^

bug/fxc/gradient_in_varying_loop/1112.wgsl:8:29 note: return value of 'textureSample' may be non-uniform
    let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
                            ^^^^^^^^^^^^^

SamplerState tint_symbol : register(s0, space0);
Texture2D<float4> randomTexture : register(t1, space0);
Texture2D<float4> depthTexture : register(t2, space0);

struct tint_symbol_2 {
  float2 vUV : TEXCOORD0;
};
struct tint_symbol_3 {
  float4 value : SV_Target0;
};

float4 main_inner(float2 vUV) {
  const float3 random = randomTexture.Sample(tint_symbol, vUV).rgb;
  int i = 0;
  [loop] while (true) {
    if ((i < 1)) {
    } else {
      break;
    }
    const float3 offset = float3((random.x).xxx);
    bool tint_tmp_2 = (offset.x < 0.0f);
    if (!tint_tmp_2) {
      tint_tmp_2 = (offset.y < 0.0f);
    }
    bool tint_tmp_1 = (tint_tmp_2);
    if (!tint_tmp_1) {
      tint_tmp_1 = (offset.x > 1.0f);
    }
    bool tint_tmp = (tint_tmp_1);
    if (!tint_tmp) {
      tint_tmp = (offset.y > 1.0f);
    }
    if ((tint_tmp)) {
      i = (i + 1);
      continue;
    }
    const float sampleDepth = depthTexture.Sample(tint_symbol, offset.xy).r;
    i = (i + 1);
  }
  return float4((1.0f).xxxx);
}

tint_symbol_3 main(tint_symbol_2 tint_symbol_1) {
  const float4 inner_result = main_inner(tint_symbol_1.vUV);
  tint_symbol_3 wrapper_result = (tint_symbol_3)0;
  wrapper_result.value = inner_result;
  return wrapper_result;
}
