From 3f467d121229142177ef1b2f417fe87c7bf7fdf2 Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Sun, 24 Sep 2023 15:10:19 +0200 Subject: Compute vertex position in shader --- wgpu/src/shader/quad.wgsl | 8 ++++++++ wgpu/src/shader/quad/gradient.wgsl | 4 ++-- wgpu/src/shader/quad/solid.wgsl | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/quad.wgsl b/wgpu/src/shader/quad.wgsl index f919cfe2..555e81bb 100644 --- a/wgpu/src/shader/quad.wgsl +++ b/wgpu/src/shader/quad.wgsl @@ -37,3 +37,11 @@ fn select_border_radius(radi: vec4, position: vec2, center: vec2) rx = select(rx, ry, position.y > center.y); return rx; } + +// Compute the normalized quad coordinates based on the vertex index. +fn vertex_position(vertex_index: u32) -> vec2 { + // #: 0 1 2 3 4 5 + // x: 1 1 0 0 0 1 + // y: 1 0 0 0 1 1 + return vec2((vec2(1u, 2u) + vertex_index) % 6u < 3u); +} diff --git a/wgpu/src/shader/quad/gradient.wgsl b/wgpu/src/shader/quad/gradient.wgsl index 0754e97f..36cae61c 100644 --- a/wgpu/src/shader/quad/gradient.wgsl +++ b/wgpu/src/shader/quad/gradient.wgsl @@ -1,5 +1,5 @@ struct GradientVertexInput { - @location(0) v_pos: vec2, + @builtin(vertex_index) vertex_index: u32, @location(1) @interpolate(flat) colors_1: vec4, @location(2) @interpolate(flat) colors_2: vec4, @location(3) @interpolate(flat) colors_3: vec4, @@ -48,7 +48,7 @@ fn gradient_vs_main(input: GradientVertexInput) -> GradientVertexOutput { vec4(pos - vec2(0.5, 0.5), 0.0, 1.0) ); - out.position = globals.transform * transform * vec4(input.v_pos, 0.0, 1.0); + out.position = globals.transform * transform * vec4(vertex_position(input.vertex_index), 0.0, 1.0); out.colors_1 = input.colors_1; out.colors_2 = input.colors_2; out.colors_3 = input.colors_3; diff --git a/wgpu/src/shader/quad/solid.wgsl b/wgpu/src/shader/quad/solid.wgsl index ebd6d877..5fc5b13a 100644 --- a/wgpu/src/shader/quad/solid.wgsl +++ b/wgpu/src/shader/quad/solid.wgsl @@ -1,5 +1,5 @@ struct SolidVertexInput { - @location(0) v_pos: vec2, + @builtin(vertex_index) vertex_index: u32, @location(1) color: vec4, @location(2) pos: vec2, @location(3) scale: vec2, @@ -40,7 +40,7 @@ fn solid_vs_main(input: SolidVertexInput) -> SolidVertexOutput { vec4(pos - vec2(0.5, 0.5), 0.0, 1.0) ); - out.position = globals.transform * transform * vec4(input.v_pos, 0.0, 1.0); + out.position = globals.transform * transform * vec4(vertex_position(input.vertex_index), 0.0, 1.0); out.color = input.color; out.border_color = input.border_color; out.pos = pos; -- cgit From bcc55e6036df0a2f9bdc7a21bf6ac98c03dd29ae Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Sun, 24 Sep 2023 15:12:32 +0200 Subject: Reassign attribute locations --- wgpu/src/shader/quad/gradient.wgsl | 20 ++++++++++---------- wgpu/src/shader/quad/solid.wgsl | 12 ++++++------ 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/quad/gradient.wgsl b/wgpu/src/shader/quad/gradient.wgsl index 36cae61c..4ad2fea8 100644 --- a/wgpu/src/shader/quad/gradient.wgsl +++ b/wgpu/src/shader/quad/gradient.wgsl @@ -1,15 +1,15 @@ struct GradientVertexInput { @builtin(vertex_index) vertex_index: u32, - @location(1) @interpolate(flat) colors_1: vec4, - @location(2) @interpolate(flat) colors_2: vec4, - @location(3) @interpolate(flat) colors_3: vec4, - @location(4) @interpolate(flat) colors_4: vec4, - @location(5) @interpolate(flat) offsets: vec4, - @location(6) direction: vec4, - @location(7) position_and_scale: vec4, - @location(8) border_color: vec4, - @location(9) border_radius: vec4, - @location(10) border_width: f32, + @location(0) @interpolate(flat) colors_1: vec4, + @location(1) @interpolate(flat) colors_2: vec4, + @location(2) @interpolate(flat) colors_3: vec4, + @location(3) @interpolate(flat) colors_4: vec4, + @location(4) @interpolate(flat) offsets: vec4, + @location(5) direction: vec4, + @location(6) position_and_scale: vec4, + @location(7) border_color: vec4, + @location(8) border_radius: vec4, + @location(9) border_width: f32, } struct GradientVertexOutput { diff --git a/wgpu/src/shader/quad/solid.wgsl b/wgpu/src/shader/quad/solid.wgsl index 5fc5b13a..f84dd7ab 100644 --- a/wgpu/src/shader/quad/solid.wgsl +++ b/wgpu/src/shader/quad/solid.wgsl @@ -1,11 +1,11 @@ struct SolidVertexInput { @builtin(vertex_index) vertex_index: u32, - @location(1) color: vec4, - @location(2) pos: vec2, - @location(3) scale: vec2, - @location(4) border_color: vec4, - @location(5) border_radius: vec4, - @location(6) border_width: f32, + @location(0) color: vec4, + @location(1) pos: vec2, + @location(2) scale: vec2, + @location(3) border_color: vec4, + @location(4) border_radius: vec4, + @location(5) border_width: f32, } struct SolidVertexOutput { -- cgit From e197abe0aae659742532ff2e2985afc97f041d2a Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Sun, 24 Sep 2023 15:19:07 +0200 Subject: Move vertex position function into own file --- wgpu/src/shader/quad.wgsl | 8 -------- wgpu/src/shader/vertex.wgsl | 7 +++++++ 2 files changed, 7 insertions(+), 8 deletions(-) create mode 100644 wgpu/src/shader/vertex.wgsl (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/quad.wgsl b/wgpu/src/shader/quad.wgsl index 555e81bb..f919cfe2 100644 --- a/wgpu/src/shader/quad.wgsl +++ b/wgpu/src/shader/quad.wgsl @@ -37,11 +37,3 @@ fn select_border_radius(radi: vec4, position: vec2, center: vec2) rx = select(rx, ry, position.y > center.y); return rx; } - -// Compute the normalized quad coordinates based on the vertex index. -fn vertex_position(vertex_index: u32) -> vec2 { - // #: 0 1 2 3 4 5 - // x: 1 1 0 0 0 1 - // y: 1 0 0 0 1 1 - return vec2((vec2(1u, 2u) + vertex_index) % 6u < 3u); -} diff --git a/wgpu/src/shader/vertex.wgsl b/wgpu/src/shader/vertex.wgsl new file mode 100644 index 00000000..904f8470 --- /dev/null +++ b/wgpu/src/shader/vertex.wgsl @@ -0,0 +1,7 @@ +// Compute the normalized quad coordinates based on the vertex index. +fn vertex_position(vertex_index: u32) -> vec2 { + // #: 0 1 2 3 4 5 + // x: 1 1 0 0 0 1 + // y: 1 0 0 0 1 1 + return vec2((vec2(1u, 2u) + vertex_index) % 6u < 3u); +} -- cgit From 5fb877ab5984dd1c4a3f3dcccf87103393da4e0c Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Sun, 24 Sep 2023 15:24:08 +0200 Subject: Compute vertex position for image shader --- wgpu/src/shader/image.wgsl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/image.wgsl b/wgpu/src/shader/image.wgsl index 5e22cdf4..0c8b3bdb 100644 --- a/wgpu/src/shader/image.wgsl +++ b/wgpu/src/shader/image.wgsl @@ -7,7 +7,7 @@ struct Globals { @group(1) @binding(0) var u_texture: texture_2d_array; struct VertexInput { - @location(0) v_pos: vec2, + @builtin(vertex_index) vertex_index: u32, @location(1) pos: vec2, @location(2) scale: vec2, @location(3) atlas_pos: vec2, @@ -25,7 +25,9 @@ struct VertexOutput { fn vs_main(input: VertexInput) -> VertexOutput { var out: VertexOutput; - out.uv = vec2(input.v_pos * input.atlas_scale + input.atlas_pos); + let v_pos = vertex_position(input.vertex_index); + + out.uv = vec2(v_pos * input.atlas_scale + input.atlas_pos); out.layer = f32(input.layer); var transform: mat4x4 = mat4x4( @@ -35,7 +37,7 @@ fn vs_main(input: VertexInput) -> VertexOutput { vec4(input.pos, 0.0, 1.0) ); - out.position = globals.transform * transform * vec4(input.v_pos, 0.0, 1.0); + out.position = globals.transform * transform * vec4(v_pos, 0.0, 1.0); return out; } -- cgit From 41dec5bd203ff5b1574a33a17d5f7358ae1beea2 Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Sun, 24 Sep 2023 15:26:10 +0200 Subject: Reassign attribute locations for image shader --- wgpu/src/shader/image.wgsl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/image.wgsl b/wgpu/src/shader/image.wgsl index 0c8b3bdb..7b2e5238 100644 --- a/wgpu/src/shader/image.wgsl +++ b/wgpu/src/shader/image.wgsl @@ -8,11 +8,11 @@ struct Globals { struct VertexInput { @builtin(vertex_index) vertex_index: u32, - @location(1) pos: vec2, - @location(2) scale: vec2, - @location(3) atlas_pos: vec2, - @location(4) atlas_scale: vec2, - @location(5) layer: i32, + @location(0) pos: vec2, + @location(1) scale: vec2, + @location(2) atlas_pos: vec2, + @location(3) atlas_scale: vec2, + @location(4) layer: i32, } struct VertexOutput { -- cgit From 0c7f6e4b34391c709aa4c333c4a9cc10e607f6c4 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 19 Jan 2024 20:43:18 +0100 Subject: Fix `vertex.wgsl` shader in `iced_wgpu` --- wgpu/src/shader/vertex.wgsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/vertex.wgsl b/wgpu/src/shader/vertex.wgsl index 904f8470..e6af6fc0 100644 --- a/wgpu/src/shader/vertex.wgsl +++ b/wgpu/src/shader/vertex.wgsl @@ -3,5 +3,5 @@ fn vertex_position(vertex_index: u32) -> vec2 { // #: 0 1 2 3 4 5 // x: 1 1 0 0 0 1 // y: 1 0 0 0 1 1 - return vec2((vec2(1u, 2u) + vertex_index) % 6u < 3u); + return vec2((vec2(1u, 2u) + vertex_index) % vec2(6u) < vec2(3u)); } -- cgit