From 16504337273b15ed32ea1f9d0d697f92e03bb707 Mon Sep 17 00:00:00 2001 From: Ink Open Source Date: Thu, 9 Apr 2026 10:27:20 -0700 Subject: [PATCH] Internal change PiperOrigin-RevId: 897182164 --- ink/rendering/webgpu/BUILD.bazel | 19 ++++++++++++++++ ink/rendering/webgpu/StrokeShader.wgsl | 31 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 ink/rendering/webgpu/BUILD.bazel create mode 100644 ink/rendering/webgpu/StrokeShader.wgsl diff --git a/ink/rendering/webgpu/BUILD.bazel b/ink/rendering/webgpu/BUILD.bazel new file mode 100644 index 00000000..fd14f776 --- /dev/null +++ b/ink/rendering/webgpu/BUILD.bazel @@ -0,0 +1,19 @@ +package( + default_applicable_licenses = ["//ink:license"], + default_visibility = ["//ink:__subpackages__"], +) + +genrule( + name = "stroke_shader_metal", + srcs = ["StrokeShader.wgsl"], + outs = [ + "StrokeShader_vs.metal", + "StrokeShader_fs.metal", + ], + cmd = ( + "$(location //third_party/dawn:tint) $< --format msl --ep vertexMain -o $(location StrokeShader_vs.metal) && " + + "$(location //third_party/dawn:tint) $< --format msl --ep fragmentMain -o $(location StrokeShader_fs.metal)" + ), + tools = ["//third_party/dawn:tint"], + visibility = ["//ink/ios/rendering/metal:__pkg__"], +) diff --git a/ink/rendering/webgpu/StrokeShader.wgsl b/ink/rendering/webgpu/StrokeShader.wgsl new file mode 100644 index 00000000..78d337bb --- /dev/null +++ b/ink/rendering/webgpu/StrokeShader.wgsl @@ -0,0 +1,31 @@ +struct VertexOut { + @builtin(position) position: vec4, + @location(0) color: vec4, +} + +struct Uniforms { + modelTransform: mat4x4, + viewTransform: mat4x4, + projectionTransform: mat4x4, + color: vec4, + vertexStride: u32, +} + +@group(0) @binding(0) var uniforms: Uniforms; +@group(0) @binding(1) var vertices: array; + +@vertex +fn vertexMain(@builtin(vertex_index) vertexID: u32) -> VertexOut { + var out: VertexOut; + let floatOffset = (vertexID * uniforms.vertexStride) / 4u; + let pos = vec2(vertices[floatOffset], vertices[floatOffset + 1u]); + + out.position = uniforms.projectionTransform * uniforms.viewTransform * uniforms.modelTransform * vec4(pos, 0.0, 1.0); + out.color = uniforms.color; + return out; +} + +@fragment +fn fragmentMain(in: VertexOut) -> @location(0) vec4 { + return in.color; +}