<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>314588</bug_id>
          
          <creation_ts>2026-05-11 15:32:36 -0700</creation_ts>
          <short_desc>[WebGPU] iesna.eu/?wasm=skyglow_demo fails to compile shader</short_desc>
          <delta_ts>2026-05-12 23:01:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mike Wyrzykowski">mwyrzykowski</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>mwyrzykowski</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2209876</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Wyrzykowski">mwyrzykowski</who>
    <bug_when>2026-05-11 15:32:36 -0700</bug_when>
    <thetext>error = 1 error generated while compiling the shader:
159:45: Expected one of &apos;(&apos;, a literal, or an identifier

I&apos;m guessing we don&apos;t handle this trailing &apos;f&apos;:
sample = clamp(_e13, vec3(0.0001f), vec3(34028235000000000000000000000000000000f));

WGSL source follows:
---------------------------------------------------------------------
struct BloomUniforms {
    threshold_precomputations: vec4&lt;f32&gt;,
    viewport: vec4&lt;f32&gt;,
    scale: vec2&lt;f32&gt;,
    aspect: f32,
}

@group(0) @binding(0) 
var input_texture: texture_2d&lt;f32&gt;;
@group(0) @binding(1) 
var s: sampler;
@group(0) @binding(2) 
var&lt;uniform&gt; uniforms: BloomUniforms;

fn soft_threshold(color: vec3&lt;f32&gt;) -&gt; vec3&lt;f32&gt; {
    var softness: f32;
    var contribution: f32;

    let brightness = max(color.x, max(color.y, color.z));
    let _e9 = uniforms.threshold_precomputations.y;
    softness = (brightness - _e9);
    let _e12 = softness;
    let _e16 = uniforms.threshold_precomputations.z;
    softness = clamp(_e12, 0f, _e16);
    let _e19 = softness;
    let _e20 = softness;
    let _e25 = uniforms.threshold_precomputations.w;
    softness = ((_e19 * _e20) * _e25);
    let _e30 = uniforms.threshold_precomputations.x;
    let _e32 = softness;
    contribution = max((brightness - _e30), _e32);
    let _e37 = contribution;
    contribution = (_e37 / max(brightness, 0.00001f));
    let _e39 = contribution;
    return (color * _e39);
}

fn tonemapping_luminance(v: vec3&lt;f32&gt;) -&gt; f32 {
    return dot(v, vec3&lt;f32&gt;(0.2126f, 0.7152f, 0.0722f));
}

fn karis_average(color_1: vec3&lt;f32&gt;) -&gt; f32 {
    let _e1 = tonemapping_luminance(color_1);
    let luma = (_e1 / 4f);
    return (1f / (1f + luma));
}

fn sample_input_13_tap(uv_2: vec2&lt;f32&gt;) -&gt; vec3&lt;f32&gt; {
    var group0_: vec3&lt;f32&gt;;
    var group1_: vec3&lt;f32&gt;;
    var group2_: vec3&lt;f32&gt;;
    var group3_: vec3&lt;f32&gt;;
    var group4_: vec3&lt;f32&gt;;

    let _e6 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(-2i, 2i));
    let a = _e6.xyz;
    let _e13 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(0i, 2i));
    let b = _e13.xyz;
    let _e20 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(2i, 2i));
    let c = _e20.xyz;
    let _e27 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(-2i, 0i));
    let d = _e27.xyz;
    let _e31 = textureSample(input_texture, s, uv_2);
    let e = _e31.xyz;
    let _e38 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(2i, 0i));
    let f = _e38.xyz;
    let _e45 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(-2i, -2i));
    let g = _e45.xyz;
    let _e52 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(0i, -2i));
    let h = _e52.xyz;
    let _e59 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(2i, -2i));
    let i = _e59.xyz;
    let _e66 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(-1i, 1i));
    let j = _e66.xyz;
    let _e73 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(1i, 1i));
    let k = _e73.xyz;
    let _e80 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(-1i, -1i));
    let l = _e80.xyz;
    let _e87 = textureSample(input_texture, s, uv_2, vec2&lt;i32&gt;(1i, -1i));
    let m = _e87.xyz;
    group0_ = ((((a + b) + d) + e) * 0.03125f);
    group1_ = ((((b + c) + e) + f) * 0.03125f);
    group2_ = ((((d + e) + g) + h) * 0.03125f);
    group3_ = ((((e + f) + h) + i) * 0.03125f);
    group4_ = ((((j + k) + l) + m) * 0.125f);
    let _e119 = group0_;
    let _e120 = karis_average(_e119);
    let _e121 = group0_;
    group0_ = (_e121 * _e120);
    let _e123 = group1_;
    let _e124 = karis_average(_e123);
    let _e125 = group1_;
    group1_ = (_e125 * _e124);
    let _e127 = group2_;
    let _e128 = karis_average(_e127);
    let _e129 = group2_;
    group2_ = (_e129 * _e128);
    let _e131 = group3_;
    let _e132 = karis_average(_e131);
    let _e133 = group3_;
    group3_ = (_e133 * _e132);
    let _e135 = group4_;
    let _e136 = karis_average(_e135);
    let _e137 = group4_;
    group4_ = (_e137 * _e136);
    let _e139 = group0_;
    let _e140 = group1_;
    let _e142 = group2_;
    let _e144 = group3_;
    let _e146 = group4_;
    return ((((_e139 + _e140) + _e142) + _e144) + _e146);
}

fn sample_input_3x3_tent(uv_3: vec2&lt;f32&gt;) -&gt; vec3&lt;f32&gt; {
    var sample_1: vec3&lt;f32&gt;;

    let _e2 = uniforms.scale;
    let _e4 = textureDimensions(input_texture);
    let frag_size = (_e2 / vec2&lt;f32&gt;(_e4));
    let x = frag_size.x;
    let y = frag_size.y;
    let _e17 = textureSample(input_texture, s, vec2&lt;f32&gt;((uv_3.x - x), (uv_3.y + y)));
    let a_1 = _e17.xyz;
    let _e25 = textureSample(input_texture, s, vec2&lt;f32&gt;(uv_3.x, (uv_3.y + y)));
    let b_1 = _e25.xyz;
    let _e34 = textureSample(input_texture, s, vec2&lt;f32&gt;((uv_3.x + x), (uv_3.y + y)));
    let c_1 = _e34.xyz;
    let _e42 = textureSample(input_texture, s, vec2&lt;f32&gt;((uv_3.x - x), uv_3.y));
    let d_1 = _e42.xyz;
    let _e49 = textureSample(input_texture, s, vec2&lt;f32&gt;(uv_3.x, uv_3.y));
    let e_1 = _e49.xyz;
    let _e57 = textureSample(input_texture, s, vec2&lt;f32&gt;((uv_3.x + x), uv_3.y));
    let f_1 = _e57.xyz;
    let _e66 = textureSample(input_texture, s, vec2&lt;f32&gt;((uv_3.x - x), (uv_3.y - y)));
    let g_1 = _e66.xyz;
    let _e74 = textureSample(input_texture, s, vec2&lt;f32&gt;(uv_3.x, (uv_3.y - y)));
    let h_1 = _e74.xyz;
    let _e83 = textureSample(input_texture, s, vec2&lt;f32&gt;((uv_3.x + x), (uv_3.y - y)));
    let i_1 = _e83.xyz;
    sample_1 = (e_1 * 0.25f);
    let _e93 = sample_1;
    sample_1 = (_e93 + ((((b_1 + d_1) + f_1) + h_1) * 0.125f));
    let _e100 = sample_1;
    sample_1 = (_e100 + ((((a_1 + c_1) + g_1) + i_1) * 0.0625f));
    let _e102 = sample_1;
    return _e102;
}

@fragment 
fn downsample_first(@location(0) output_uv: vec2&lt;f32&gt;) -&gt; @location(0) vec4&lt;f32&gt; {
    var sample: vec3&lt;f32&gt;;

    let _e2 = uniforms.viewport;
    let _e7 = uniforms.viewport;
    let sample_uv = (_e2.xy + (output_uv * _e7.zw));
    let _e11 = sample_input_13_tap(sample_uv);
    sample = _e11;
    let _e13 = sample;
    sample = clamp(_e13, vec3(0.0001f), vec3(34028235000000000000000000000000000000f));
    let _e19 = sample;
    return vec4&lt;f32&gt;(_e19, 1f);
}

@fragment 
fn downsample(@location(0) uv: vec2&lt;f32&gt;) -&gt; @location(0) vec4&lt;f32&gt; {
    let _e1 = sample_input_13_tap(uv);
    return vec4&lt;f32&gt;(_e1, 1f);
}

@fragment 
fn upsample(@location(0) uv_1: vec2&lt;f32&gt;) -&gt; @location(0) vec4&lt;f32&gt; {
    let _e1 = sample_input_3x3_tent(uv_1);
    return vec4&lt;f32&gt;(_e1, 1f);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2209877</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2026-05-11 15:32:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/176827607&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2210175</commentid>
    <comment_count>2</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2026-05-12 10:48:49 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/64768</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2210401</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2026-05-12 23:01:18 -0700</bug_when>
    <thetext>Committed 313133@main (7f23f03e34b0): &lt;https://commits.webkit.org/313133@main&gt;

Reviewed commits have been landed. Closing PR #64768 and removing active labels.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>