Donner SVG 0.8.0
0.8.0 ยท ebf353960.8.0 main
SVG editor and embeddable C⁠+⁠+⁠20 engine.
Loading...
Searching...
No Matches
TileSource.h File Reference

Authoritative WGSL for feTile. More...

#include "donner/gpu/shader/wgsl/Compiler.h"
Include dependency graph for TileSource.h:

Namespaces

namespace  donner
 Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css.

Variables

constexpr wgsl::SourceText donner::gpu::shader::programs::kTileSource
 Authoritative WGSL for feTile.

Detailed Description

Authoritative WGSL for feTile.

Variable Documentation

◆ kTileSource

wgsl::SourceText donner::gpu::shader::programs::kTileSource
inlineconstexpr
Initial value:
{R"wgsl(struct TileParams {
srcX: i32,
srcY: i32,
srcW: i32,
srcH: i32,
}
@group(0) @binding(0) var inputTexture: texture_2d<f32>;
@group(0) @binding(1) var outputTexture: texture_storage_2d<rgba32float, write>;
@group(0) @binding(2) var<uniform> params: TileParams;
@compute @workgroup_size(8, 8, 1)
fn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {
let size = textureDimensions(outputTexture);
if (((gid.x >= size.x) || (gid.y >= size.y))) {
return;
}
let coord = vec2<i32>(gid.xy);
if (((params.srcW <= 0i) || (params.srcH <= 0i))) {
textureStore(outputTexture, coord, vec4<f32>(0f, 0f, 0f, 0f));
return;
}
let sampleCoord = vec2<i32>((((((coord.x - params.srcX) % params.srcW) + params.srcW) % params.srcW) + params.srcX), (((((coord.y - params.srcY) % params.srcH) + params.srcH) % params.srcH) + params.srcY));
let inputSize = vec2<i32>(textureDimensions(inputTexture));
let clamped = clamp(sampleCoord, vec2<i32>(0i, 0i), (inputSize - vec2<i32>(1i, 1i)));
textureStore(outputTexture, coord, textureLoad(inputTexture, clamped, 0i));
}
)wgsl"}

Authoritative WGSL for feTile.