Readback destination layout
webgl.readback-layout
Ready · No signal has been run.
Results
Research focus
Selected evidence from this run. Cross-run stability and comparison verdicts require a session comparison.
Full evidence
| Property | Value |
|---|---|
| No results yet. No signal has been run. | |
JSON
Selected signal results for external comparison. Field statuses, controls and exact values are retained.
No run export is available.
Source
Source is not connected yet.
// Test source pending.Reference
Reference is not connected yet.
Definition
Known pixels, sentinel guards and PACK state across typed destinations and fenced pixel-pack buffers, including independent retrieval offsets.
Find it in the repository
- Collector source
core/signals/webgl/readback-layout.ts- Export
measurementModule· Signal object- Field definitions
core/definitions/webgl/readback-layout.ts- Capture membership
- Product capture ·
common/capture/product.ts - Page registration
app/signals/registry.ts- Field projection
core/results/measurement.ts
Execution contract
- Signal
webgl.readback-layout- Collector
webgl.readback-layout- API / surface
- core/signals/webgl/readback-layout.ts
- Timeout
- 2250 ms
- Companion signals
- None
- Fixture inputs
- Declared requests (listed below)
Exact request inputs
[
{
"key": "webgl.readback-layout.responses",
"inputs": {
"tight": {
"bytes": 24,
"byteOffset": 0,
"viewLength": 24,
"dstOffset": 0,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"alignment": 4,
"invalid": null,
"id": "tight",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"oversized": {
"bytes": 256,
"byteOffset": 0,
"viewLength": 256,
"dstOffset": 0,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"alignment": 4,
"invalid": null,
"id": "oversized",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"subview": {
"bytes": 256,
"byteOffset": 13,
"viewLength": 200,
"dstOffset": 0,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"alignment": 4,
"invalid": null,
"id": "subview",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"destination-offset": {
"bytes": 256,
"byteOffset": 0,
"viewLength": 256,
"dstOffset": 7,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"alignment": 4,
"invalid": null,
"id": "destination-offset",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"alignment-padding": {
"bytes": 256,
"byteOffset": 0,
"viewLength": 256,
"dstOffset": 0,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"alignment": 8,
"invalid": null,
"id": "alignment-padding",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"row-length": {
"bytes": 256,
"byteOffset": 0,
"viewLength": 256,
"dstOffset": 0,
"rowLength": 5,
"skipRows": 0,
"skipPixels": 0,
"alignment": 4,
"invalid": null,
"id": "row-length",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"row-skip": {
"bytes": 256,
"byteOffset": 0,
"viewLength": 256,
"dstOffset": 0,
"rowLength": 0,
"skipRows": 2,
"skipPixels": 0,
"alignment": 4,
"invalid": null,
"id": "row-skip",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"pixel-skip": {
"bytes": 256,
"byteOffset": 0,
"viewLength": 256,
"dstOffset": 0,
"rowLength": 5,
"skipRows": 0,
"skipPixels": 1,
"alignment": 4,
"invalid": null,
"id": "pixel-skip",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"combined": {
"bytes": 256,
"byteOffset": 9,
"viewLength": 220,
"dstOffset": 3,
"rowLength": 5,
"skipRows": 1,
"skipPixels": 1,
"alignment": 8,
"invalid": null,
"id": "combined",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"undersized": {
"bytes": 23,
"byteOffset": 0,
"viewLength": 23,
"dstOffset": 0,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"alignment": 4,
"invalid": "size",
"id": "undersized",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"incompatible-type": {
"bytes": 256,
"byteOffset": 0,
"viewLength": 256,
"dstOffset": 0,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"alignment": 4,
"invalid": "type",
"id": "incompatible-type",
"fixture": "asymmetric-rgba8",
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"format": "RGBA",
"type": "UNSIGNED_BYTE",
"sentinel": 165,
"pattern": "R=x*29+y;G=y*31+x;B=(x+3*y)*7;A=255"
},
"pbo-tight": {
"revision": "pixel-pack-r1",
"id": "pbo-tight",
"offset": 0,
"alignment": 4,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"invalid": false,
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"bytes": 256,
"sentinel": 165,
"typedViewByteOffset": 0,
"typedDestinationElementOffset": 0,
"getBufferSubData": {
"sourceByteOffset": 0,
"viewByteOffset": 7,
"destinationElementOffset": 3,
"lengthElements": 256
}
},
"pbo-offset": {
"revision": "pixel-pack-r1",
"id": "pbo-offset",
"offset": 16,
"alignment": 4,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"invalid": false,
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"bytes": 256,
"sentinel": 165,
"typedViewByteOffset": 0,
"typedDestinationElementOffset": 16,
"getBufferSubData": {
"sourceByteOffset": 0,
"viewByteOffset": 7,
"destinationElementOffset": 3,
"lengthElements": 256
}
},
"pbo-padded": {
"revision": "pixel-pack-r1",
"id": "pbo-padded",
"offset": 16,
"alignment": 8,
"rowLength": 5,
"skipRows": 1,
"skipPixels": 1,
"invalid": false,
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"bytes": 256,
"sentinel": 165,
"typedViewByteOffset": 0,
"typedDestinationElementOffset": 16,
"getBufferSubData": {
"sourceByteOffset": 0,
"viewByteOffset": 7,
"destinationElementOffset": 3,
"lengthElements": 256
}
},
"pbo-wrong-overload": {
"revision": "pixel-pack-r1",
"id": "pbo-wrong-overload",
"offset": 16,
"alignment": 4,
"rowLength": 0,
"skipRows": 0,
"skipPixels": 0,
"invalid": true,
"framebuffer": [
8,
8
],
"rectangle": [
1,
2,
3,
2
],
"bytes": 256,
"sentinel": 165,
"typedViewByteOffset": 0,
"typedDestinationElementOffset": 16,
"getBufferSubData": {
"sourceByteOffset": 0,
"viewByteOffset": 7,
"destinationElementOffset": 3,
"lengthElements": 256
}
}
},
"controls": {}
}
]One collector runs per invocation. Results and JSON select this signal’s fields; any companions execute in the same collector.
Generated source manifest lists runtime files, fixture URLs and content digests for this build. The Source tab provides a copyable console sample.
Run and edit locally
From the repository root, start the Astro app, then open /signals/webgl.readback-layout. Edit the collector source and reload the page to load its new build.
pnpm run dev:webIn a browser module served by this repository’s Vite graph:
import { createCollector } from "/core/collect"
import { measurementModule } from "/core/signals/webgl/readback-layout"
const signal = measurementModule
const collector = createCollector()
const suite = { signals: [signal] }
const result = await collector.collect(suite)Reuse the collector owner for repeated calls so collection can enforce cleanup. This returns the collector’s raw result; app/signals/projection.ts selects the retained fields shown on this page.
rg -n 'measurementModule' core app tests
pnpm run check
pnpm run test tests/unit/app/focused-projection.test.ts| Property | Value |
|---|