@aardworx/wombat.rendering 0.9.5 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts +24 -14
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts.map +1 -1
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.js +160 -68
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.js.map +1 -1
- package/dist/runtime/textureAtlas/atlasPool.d.ts +0 -11
- package/dist/runtime/textureAtlas/atlasPool.d.ts.map +1 -1
- package/dist/runtime/textureAtlas/atlasPool.js +90 -128
- package/dist/runtime/textureAtlas/atlasPool.js.map +1 -1
- package/package.json +1 -1
- package/src/runtime/textureAtlas/atlasMipGutterKernel.ts +206 -74
- package/src/runtime/textureAtlas/atlasPool.ts +101 -143
|
@@ -16,20 +16,30 @@ export interface MipSlot {
|
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Build the mip pyramid + gutters on GPU
|
|
20
|
-
* sub-rect of `page`. `srcPixels` is the
|
|
21
|
-
* (`srcW × srcH` pixels). The
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* Caller must ensure the page has COPY_DST usage (atlas pages
|
|
29
|
-
* always do).
|
|
30
|
-
*
|
|
31
|
-
* Buffer is destroyed once submitted work completes (fire-and-forget
|
|
32
|
-
* via `onSubmittedWorkDone`).
|
|
19
|
+
* Build the mip pyramid + gutters on GPU from a **CPU pixel array**
|
|
20
|
+
* and upload the result to a sub-rect of `page`. `srcPixels` is the
|
|
21
|
+
* raw RGBA8 source for mip 0 (`srcW × srcH` pixels). The scratch
|
|
22
|
+
* buffer's mip-0 region is filled at creation (`mappedAtCreation`),
|
|
23
|
+
* then the compute passes downscale the remaining mips and fill every
|
|
24
|
+
* mip's 2-px gutter ring. Used for `raw` host sources (where the
|
|
25
|
+
* pixels are already in memory — no extraction cost) and as the
|
|
26
|
+
* fallback for `external` sources when the GPU staging path is
|
|
27
|
+
* unavailable. Caller must ensure `page` has COPY_DST usage.
|
|
33
28
|
*/
|
|
34
29
|
export declare function buildMipsAndGutterOnGpu(device: GPUDevice, page: GPUTexture, subRectX: number, subRectY: number, boundsW: number, boundsH: number, srcPixels: Uint8Array, srcW: number, srcH: number, mips: readonly MipSlot[]): void;
|
|
30
|
+
/**
|
|
31
|
+
* Build the mip pyramid + gutters on GPU from a **staging texture**
|
|
32
|
+
* and upload the result to a sub-rect of `page`. `srcTex` holds the
|
|
33
|
+
* decoded mip-0 pixels (`srcW × srcH`) — typically just filled by
|
|
34
|
+
* `copyExternalImageToTexture`, so no main-thread pixel readback is
|
|
35
|
+
* involved. An `interiorFromTexture` compute pass copies `srcTex` into
|
|
36
|
+
* the scratch buffer; the rest is identical to `buildMipsAndGutterOnGpu`
|
|
37
|
+
* (downscale every further mip, fill every mip's 2-px gutter ring,
|
|
38
|
+
* single `copyBufferToTexture` into the page).
|
|
39
|
+
*
|
|
40
|
+
* Caller owns `srcTex` and is responsible for destroying it after the
|
|
41
|
+
* submission completes (`device.queue.onSubmittedWorkDone()`); this
|
|
42
|
+
* function only reads it. `srcTex` must have TEXTURE_BINDING usage.
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildMipsAndGutterFromTexture(device: GPUDevice, page: GPUTexture, subRectX: number, subRectY: number, boundsW: number, boundsH: number, srcTex: GPUTexture, srcW: number, srcH: number, mips: readonly MipSlot[]): void;
|
|
35
45
|
//# sourceMappingURL=atlasMipGutterKernel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlasMipGutterKernel.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"atlasMipGutterKernel.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"AA+KA;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAkJD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAChC,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAC1B,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,IAAI,CAoCN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAChC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAC1B,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,IAAI,CAYN"}
|
|
@@ -44,6 +44,11 @@ struct Params {
|
|
|
44
44
|
|
|
45
45
|
@group(0) @binding(0) var<storage, read_write> buf: array<u32>;
|
|
46
46
|
@group(0) @binding(1) var<uniform> P: Params;
|
|
47
|
+
// Optional mip-0 source — bound only by the interiorFromTexture
|
|
48
|
+
// entry point (the staging-texture upload path). The buffer-only
|
|
49
|
+
// entry points (interior, gutter) don't reference it, so their
|
|
50
|
+
// pipeline layouts omit it.
|
|
51
|
+
@group(0) @binding(2) var srcTex: texture_2d<f32>;
|
|
47
52
|
|
|
48
53
|
fn loadRgba(x: u32, y: u32) -> vec4<f32> {
|
|
49
54
|
let idx = y * P.buf_stride_u32 + x;
|
|
@@ -55,6 +60,18 @@ fn storeRgba(x: u32, y: u32, v: vec4<f32>) {
|
|
|
55
60
|
buf[idx] = pack4x8unorm(v);
|
|
56
61
|
}
|
|
57
62
|
|
|
63
|
+
// Copy the staging texture's pixels into the buffer at mip-0's
|
|
64
|
+
// interior offset (dst_origin_in_buf). src_size = staging size.
|
|
65
|
+
// Used by the external-source upload path so the source decode
|
|
66
|
+
// happens GPU-side (copyExternalImageToTexture -> staging) instead
|
|
67
|
+
// of via a main-thread canvas-2d getImageData round-trip.
|
|
68
|
+
@compute @workgroup_size(8, 8, 1)
|
|
69
|
+
fn interiorFromTexture(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
70
|
+
if (gid.x >= P.src_size.x || gid.y >= P.src_size.y) { return; }
|
|
71
|
+
let v = textureLoad(srcTex, vec2<i32>(i32(gid.x), i32(gid.y)), 0);
|
|
72
|
+
storeRgba(P.dst_origin_in_buf.x + gid.x, P.dst_origin_in_buf.y + gid.y, v);
|
|
73
|
+
}
|
|
74
|
+
|
|
58
75
|
@compute @workgroup_size(8, 8, 1)
|
|
59
76
|
fn interior(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
60
77
|
if (gid.x >= P.dst_size.x || gid.y >= P.dst_size.y) { return; }
|
|
@@ -107,77 +124,58 @@ function getKernel(device) {
|
|
|
107
124
|
if (cached !== undefined)
|
|
108
125
|
return cached;
|
|
109
126
|
const module = device.createShaderModule({ code: WGSL, label: "atlas/mipGutterKernel" });
|
|
110
|
-
const
|
|
111
|
-
label: "atlas/mipGutterKernel/bgl",
|
|
127
|
+
const bufBindGroupLayout = device.createBindGroupLayout({
|
|
128
|
+
label: "atlas/mipGutterKernel/bgl.buf",
|
|
112
129
|
entries: [
|
|
113
130
|
{ binding: 0, visibility: 0x4 /* COMPUTE */, buffer: { type: "storage" } },
|
|
114
131
|
{ binding: 1, visibility: 0x4 /* COMPUTE */, buffer: { type: "uniform" } },
|
|
115
132
|
],
|
|
116
133
|
});
|
|
117
|
-
const
|
|
134
|
+
const texBindGroupLayout = device.createBindGroupLayout({
|
|
135
|
+
label: "atlas/mipGutterKernel/bgl.tex",
|
|
136
|
+
entries: [
|
|
137
|
+
{ binding: 0, visibility: 0x4 /* COMPUTE */, buffer: { type: "storage" } },
|
|
138
|
+
{ binding: 1, visibility: 0x4 /* COMPUTE */, buffer: { type: "uniform" } },
|
|
139
|
+
{ binding: 2, visibility: 0x4 /* COMPUTE */, texture: { sampleType: "float", viewDimension: "2d" } },
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
const bufLayout = device.createPipelineLayout({ bindGroupLayouts: [bufBindGroupLayout] });
|
|
143
|
+
const texLayout = device.createPipelineLayout({ bindGroupLayouts: [texBindGroupLayout] });
|
|
118
144
|
const interiorPipeline = device.createComputePipeline({
|
|
119
|
-
layout, compute: { module, entryPoint: "interior" },
|
|
145
|
+
layout: bufLayout, compute: { module, entryPoint: "interior" },
|
|
120
146
|
label: "atlas/mipGutterKernel/interior",
|
|
121
147
|
});
|
|
122
148
|
const gutterPipeline = device.createComputePipeline({
|
|
123
|
-
layout, compute: { module, entryPoint: "gutter" },
|
|
149
|
+
layout: bufLayout, compute: { module, entryPoint: "gutter" },
|
|
124
150
|
label: "atlas/mipGutterKernel/gutter",
|
|
125
151
|
});
|
|
126
|
-
const
|
|
152
|
+
const interiorFromTexturePipeline = device.createComputePipeline({
|
|
153
|
+
layout: texLayout, compute: { module, entryPoint: "interiorFromTexture" },
|
|
154
|
+
label: "atlas/mipGutterKernel/interiorFromTexture",
|
|
155
|
+
});
|
|
156
|
+
const entry = {
|
|
157
|
+
bufBindGroupLayout, texBindGroupLayout,
|
|
158
|
+
interiorPipeline, gutterPipeline, interiorFromTexturePipeline,
|
|
159
|
+
};
|
|
127
160
|
caches.set(device, entry);
|
|
128
161
|
return entry;
|
|
129
162
|
}
|
|
130
163
|
/**
|
|
131
|
-
*
|
|
132
|
-
* sub-rect
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* - Dispatches per-mip interior + gutter compute passes.
|
|
138
|
-
* - copyBufferToTexture into the page at (subRectX, subRectY).
|
|
139
|
-
*
|
|
140
|
-
* Caller must ensure the page has COPY_DST usage (atlas pages
|
|
141
|
-
* always do).
|
|
164
|
+
* Shared orchestration: allocate a scratch buffer laid out as the
|
|
165
|
+
* sub-rect's bounding box, initialise mip-0 (per `mip0Src`), run the
|
|
166
|
+
* per-mip interior-downscale + gutter compute passes over the buffer,
|
|
167
|
+
* then `copyBufferToTexture` into `page` at (subRectX, subRectY). The
|
|
168
|
+
* scratch buffer + per-pass UBOs are freed once the submission
|
|
169
|
+
* completes. Caller owns `mip0Src.tex` (if any) and its lifetime.
|
|
142
170
|
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
171
|
+
* `makeScratch` lets the `prefilled` path create the buffer with
|
|
172
|
+
* `mappedAtCreation` and fill it before we run; the `texture` path
|
|
173
|
+
* passes a plain (already-created) buffer.
|
|
145
174
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return;
|
|
149
|
-
const { bindGroupLayout, interiorPipeline, gutterPipeline } = getKernel(device);
|
|
150
|
-
// Buffer layout: rows padded to 256 bytes for the final
|
|
151
|
-
// copyBufferToTexture. Stride in u32: 256 / 4 = 64 minimum, or
|
|
152
|
-
// ceil(boundsW * 4 / 256) * 256 / 4.
|
|
153
|
-
const rowBytes = Math.max(256, Math.ceil(boundsW * 4 / 256) * 256);
|
|
175
|
+
function runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, mip0Src) {
|
|
176
|
+
const k = getKernel(device);
|
|
154
177
|
const bufStrideU32 = rowBytes / 4;
|
|
155
|
-
const bufSize = rowBytes * boundsH;
|
|
156
|
-
const scratch = device.createBuffer({
|
|
157
|
-
label: `atlas/mipGutter/scratch(${boundsW}x${boundsH})`,
|
|
158
|
-
size: bufSize,
|
|
159
|
-
usage: 0x80 /* STORAGE */ | 0x04 /* COPY_SRC */ | 0x08 /* COPY_DST */,
|
|
160
|
-
mappedAtCreation: true,
|
|
161
|
-
});
|
|
162
|
-
// CPU init: write mip-0 source pixels at the mip-0 interior offset
|
|
163
|
-
// inside the buffer. mips[0].origin is the interior offset.
|
|
164
178
|
const mip0 = mips[0];
|
|
165
|
-
{
|
|
166
|
-
const mapped = new Uint32Array(scratch.getMappedRange());
|
|
167
|
-
for (let y = 0; y < srcH; y++) {
|
|
168
|
-
for (let x = 0; x < srcW; x++) {
|
|
169
|
-
const si = (y * srcW + x) * 4;
|
|
170
|
-
const r = srcPixels[si];
|
|
171
|
-
const g = srcPixels[si + 1];
|
|
172
|
-
const b = srcPixels[si + 2];
|
|
173
|
-
const a = srcPixels[si + 3];
|
|
174
|
-
// little-endian rgba8: byte0=r, byte1=g, byte2=b, byte3=a.
|
|
175
|
-
const packed = (a << 24) | (b << 16) | (g << 8) | r;
|
|
176
|
-
mapped[(mip0.origin.y + y) * bufStrideU32 + (mip0.origin.x + x)] = packed >>> 0;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
scratch.unmap();
|
|
181
179
|
const enc = device.createCommandEncoder({ label: "atlas/mipGutterKernel" });
|
|
182
180
|
const ubos = [];
|
|
183
181
|
const makeUbo = (srcO, srcS, dstO, dstS) => {
|
|
@@ -201,35 +199,55 @@ export function buildMipsAndGutterOnGpu(device, page, subRectX, subRectY, bounds
|
|
|
201
199
|
ubos.push(buf);
|
|
202
200
|
return buf;
|
|
203
201
|
};
|
|
204
|
-
const
|
|
205
|
-
layout:
|
|
202
|
+
const makeBufBg = (ubo) => device.createBindGroup({
|
|
203
|
+
layout: k.bufBindGroupLayout,
|
|
206
204
|
entries: [
|
|
207
205
|
{ binding: 0, resource: { buffer: scratch } },
|
|
208
206
|
{ binding: 1, resource: { buffer: ubo } },
|
|
209
207
|
],
|
|
210
208
|
});
|
|
209
|
+
// Mip-0 init pass — only the staging-texture path needs one. Reads
|
|
210
|
+
// `srcTex[gid]` for gid in [0,srcW)×[0,srcH), writes into the buffer
|
|
211
|
+
// at mip0.origin. Its own pass so the write is visible to the
|
|
212
|
+
// downstream interior/gutter passes (the pass boundary is a barrier).
|
|
213
|
+
if (mip0Src.kind === "texture") {
|
|
214
|
+
const ubo = makeUbo(mip0.origin, { w: srcW, h: srcH }, mip0.origin, { w: srcW, h: srcH });
|
|
215
|
+
const bg = device.createBindGroup({
|
|
216
|
+
layout: k.texBindGroupLayout,
|
|
217
|
+
entries: [
|
|
218
|
+
{ binding: 0, resource: { buffer: scratch } },
|
|
219
|
+
{ binding: 1, resource: { buffer: ubo } },
|
|
220
|
+
{ binding: 2, resource: mip0Src.tex.createView() },
|
|
221
|
+
],
|
|
222
|
+
});
|
|
223
|
+
const pass = enc.beginComputePass({ label: "atlas/mipGutter/interiorFromTexture" });
|
|
224
|
+
pass.setPipeline(k.interiorFromTexturePipeline);
|
|
225
|
+
pass.setBindGroup(0, bg);
|
|
226
|
+
pass.dispatchWorkgroups(Math.ceil(srcW / 8), Math.ceil(srcH / 8), 1);
|
|
227
|
+
pass.end();
|
|
228
|
+
}
|
|
211
229
|
// Interior passes: one compute pass per mip > 0 (pass boundary
|
|
212
230
|
// gives us the barrier ensuring mip-(k-1) is fully written before
|
|
213
231
|
// mip-k reads it).
|
|
214
|
-
for (let
|
|
215
|
-
const src = mips[
|
|
216
|
-
const dst = mips[
|
|
232
|
+
for (let m = 1; m < mips.length; m++) {
|
|
233
|
+
const src = mips[m - 1];
|
|
234
|
+
const dst = mips[m];
|
|
217
235
|
const ubo = makeUbo(src.origin, src.size, dst.origin, dst.size);
|
|
218
|
-
const pass = enc.beginComputePass({ label: `atlas/mipGutter/interior/${
|
|
219
|
-
pass.setPipeline(interiorPipeline);
|
|
220
|
-
pass.setBindGroup(0,
|
|
236
|
+
const pass = enc.beginComputePass({ label: `atlas/mipGutter/interior/${m}` });
|
|
237
|
+
pass.setPipeline(k.interiorPipeline);
|
|
238
|
+
pass.setBindGroup(0, makeBufBg(ubo));
|
|
221
239
|
pass.dispatchWorkgroups(Math.ceil(dst.size.w / 8), Math.ceil(dst.size.h / 8), 1);
|
|
222
240
|
pass.end();
|
|
223
241
|
}
|
|
224
|
-
// Gutter passes: one per mip (each pass reads mip-
|
|
225
|
-
//
|
|
226
|
-
// pass for
|
|
227
|
-
for (let
|
|
228
|
-
const dst = mips[
|
|
242
|
+
// Gutter passes: one per mip (each pass reads mip-m interior, which
|
|
243
|
+
// was either filled at buffer creation / by the texture pass for
|
|
244
|
+
// m=0, or by the interior pass for m>0).
|
|
245
|
+
for (let m = 0; m < mips.length; m++) {
|
|
246
|
+
const dst = mips[m];
|
|
229
247
|
const ubo = makeUbo(dst.origin, dst.size, dst.origin, dst.size);
|
|
230
|
-
const pass = enc.beginComputePass({ label: `atlas/mipGutter/gutter/${
|
|
231
|
-
pass.setPipeline(gutterPipeline);
|
|
232
|
-
pass.setBindGroup(0,
|
|
248
|
+
const pass = enc.beginComputePass({ label: `atlas/mipGutter/gutter/${m}` });
|
|
249
|
+
pass.setPipeline(k.gutterPipeline);
|
|
250
|
+
pass.setBindGroup(0, makeBufBg(ubo));
|
|
233
251
|
pass.dispatchWorkgroups(Math.ceil((dst.size.w + 4) / 8), Math.ceil((dst.size.h + 4) / 8), 1);
|
|
234
252
|
pass.end();
|
|
235
253
|
}
|
|
@@ -244,4 +262,78 @@ export function buildMipsAndGutterOnGpu(device, page, subRectX, subRectY, bounds
|
|
|
244
262
|
b.destroy();
|
|
245
263
|
});
|
|
246
264
|
}
|
|
265
|
+
/** Scratch-buffer geometry for a sub-rect's bounding box. Rows are
|
|
266
|
+
* padded to 256 bytes for the final `copyBufferToTexture`. */
|
|
267
|
+
function scratchGeom(boundsW, boundsH) {
|
|
268
|
+
const rowBytes = Math.max(256, Math.ceil(boundsW * 4 / 256) * 256);
|
|
269
|
+
return { rowBytes, bufSize: rowBytes * boundsH };
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Build the mip pyramid + gutters on GPU from a **CPU pixel array**
|
|
273
|
+
* and upload the result to a sub-rect of `page`. `srcPixels` is the
|
|
274
|
+
* raw RGBA8 source for mip 0 (`srcW × srcH` pixels). The scratch
|
|
275
|
+
* buffer's mip-0 region is filled at creation (`mappedAtCreation`),
|
|
276
|
+
* then the compute passes downscale the remaining mips and fill every
|
|
277
|
+
* mip's 2-px gutter ring. Used for `raw` host sources (where the
|
|
278
|
+
* pixels are already in memory — no extraction cost) and as the
|
|
279
|
+
* fallback for `external` sources when the GPU staging path is
|
|
280
|
+
* unavailable. Caller must ensure `page` has COPY_DST usage.
|
|
281
|
+
*/
|
|
282
|
+
export function buildMipsAndGutterOnGpu(device, page, subRectX, subRectY, boundsW, boundsH, srcPixels, srcW, srcH, mips) {
|
|
283
|
+
if (mips.length === 0)
|
|
284
|
+
return;
|
|
285
|
+
const { rowBytes, bufSize } = scratchGeom(boundsW, boundsH);
|
|
286
|
+
const bufStrideU32 = rowBytes / 4;
|
|
287
|
+
const scratch = device.createBuffer({
|
|
288
|
+
label: `atlas/mipGutter/scratch(${boundsW}x${boundsH})`,
|
|
289
|
+
size: bufSize,
|
|
290
|
+
usage: 0x80 /* STORAGE */ | 0x04 /* COPY_SRC */ | 0x08 /* COPY_DST */,
|
|
291
|
+
mappedAtCreation: true,
|
|
292
|
+
});
|
|
293
|
+
// CPU init: write mip-0 source pixels at the mip-0 interior offset
|
|
294
|
+
// inside the buffer. mips[0].origin is the interior offset.
|
|
295
|
+
const mip0 = mips[0];
|
|
296
|
+
{
|
|
297
|
+
const mapped = new Uint32Array(scratch.getMappedRange());
|
|
298
|
+
for (let y = 0; y < srcH; y++) {
|
|
299
|
+
for (let x = 0; x < srcW; x++) {
|
|
300
|
+
const si = (y * srcW + x) * 4;
|
|
301
|
+
const r = srcPixels[si];
|
|
302
|
+
const g = srcPixels[si + 1];
|
|
303
|
+
const b = srcPixels[si + 2];
|
|
304
|
+
const a = srcPixels[si + 3];
|
|
305
|
+
// little-endian rgba8: byte0=r, byte1=g, byte2=b, byte3=a.
|
|
306
|
+
const packed = (a << 24) | (b << 16) | (g << 8) | r;
|
|
307
|
+
mapped[(mip0.origin.y + y) * bufStrideU32 + (mip0.origin.x + x)] = packed >>> 0;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
scratch.unmap();
|
|
312
|
+
runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, { kind: "prefilled" });
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Build the mip pyramid + gutters on GPU from a **staging texture**
|
|
316
|
+
* and upload the result to a sub-rect of `page`. `srcTex` holds the
|
|
317
|
+
* decoded mip-0 pixels (`srcW × srcH`) — typically just filled by
|
|
318
|
+
* `copyExternalImageToTexture`, so no main-thread pixel readback is
|
|
319
|
+
* involved. An `interiorFromTexture` compute pass copies `srcTex` into
|
|
320
|
+
* the scratch buffer; the rest is identical to `buildMipsAndGutterOnGpu`
|
|
321
|
+
* (downscale every further mip, fill every mip's 2-px gutter ring,
|
|
322
|
+
* single `copyBufferToTexture` into the page).
|
|
323
|
+
*
|
|
324
|
+
* Caller owns `srcTex` and is responsible for destroying it after the
|
|
325
|
+
* submission completes (`device.queue.onSubmittedWorkDone()`); this
|
|
326
|
+
* function only reads it. `srcTex` must have TEXTURE_BINDING usage.
|
|
327
|
+
*/
|
|
328
|
+
export function buildMipsAndGutterFromTexture(device, page, subRectX, subRectY, boundsW, boundsH, srcTex, srcW, srcH, mips) {
|
|
329
|
+
if (mips.length === 0)
|
|
330
|
+
return;
|
|
331
|
+
const { rowBytes, bufSize } = scratchGeom(boundsW, boundsH);
|
|
332
|
+
const scratch = device.createBuffer({
|
|
333
|
+
label: `atlas/mipGutter/scratch(${boundsW}x${boundsH})`,
|
|
334
|
+
size: bufSize,
|
|
335
|
+
usage: 0x80 /* STORAGE */ | 0x04 /* COPY_SRC */ | 0x08 /* COPY_DST */,
|
|
336
|
+
});
|
|
337
|
+
runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, { kind: "texture", tex: srcTex });
|
|
338
|
+
}
|
|
247
339
|
//# sourceMappingURL=atlasMipGutterKernel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlasMipGutterKernel.js","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,gEAAgE;AAChE,2DAA2D;AAC3D,EAAE;AACF,eAAe;AACf,eAAe;AACf,mEAAmE;AACnE,iEAAiE;AACjE,gEAAgE;AAChE,kEAAkE;AAClE,qEAAqE;AACrE,mDAAmD;AACnD,EAAE;AACF,eAAe;AACf,mEAAmE;AACnE,kEAAkE;AAClE,4CAA4C;AAC5C,iEAAiE;AACjE,qEAAqE;AACrE,mEAAmE;AACnE,6DAA6D;AAC7D,8DAA8D;AAC9D,kEAAkE;AAClE,mEAAmE;AACnE,4CAA4C;AAC5C,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,2DAA2D;AAC3D,qEAAqE;AACrE,kEAAkE;AAClE,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AAEtE,MAAM,IAAI,GAAG,UAAU,CAAA
|
|
1
|
+
{"version":3,"file":"atlasMipGutterKernel.js","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"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"}
|
|
@@ -270,17 +270,6 @@ export declare class AtlasPool {
|
|
|
270
270
|
* rare; only on platforms without canvas support).
|
|
271
271
|
*/
|
|
272
272
|
private uploadLevelWithGutter;
|
|
273
|
-
/**
|
|
274
|
-
* Fill a sub-rect's 2-px gutter ring (inner clamp-replicate ring +
|
|
275
|
-
* outer wrap ring) from the already-uploaded interior pixels, using
|
|
276
|
-
* ~24 tiny intra-page `copyTextureToTexture` ops. `(ix, iy)` is the
|
|
277
|
-
* interior origin (= sub-rect origin + 2,+2), `w×h` the interior
|
|
278
|
-
* size. Used by the `copyExternalImageToTexture` fast path. If the
|
|
279
|
-
* platform rejects same-texture copies these become no-ops (validation
|
|
280
|
-
* errors don't throw synchronously) and the gutter cells stay as-is —
|
|
281
|
-
* which is the documented "visually invisible" tolerance.
|
|
282
|
-
*/
|
|
283
|
-
private fillGutterRing;
|
|
284
273
|
private uploadLevel;
|
|
285
274
|
/**
|
|
286
275
|
* Upload `src` (RGBA8, w×h) to `texture` at (x, y) via `writeTexture`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlasPool.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasPool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"atlasPool.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasPool.ts"],"names":[],"mappings":"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"}
|