WebGL arithmetic
webgl.arithmetic
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
Per-operation shader pixels, compile/link/readback controls and actual precision retain useful numeric differences.
Find it in the repository
- Collector source
core/signals/webgl/arithmetic.ts- Export
measurementModule· Signal object- Field definitions
core/definitions/webgl/arithmetic.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.arithmetic- Collector
webgl.arithmetic- API / surface
- core/signals/webgl/arithmetic.ts
- Timeout
- 750 ms
- Companion signals
- None
- Fixture inputs
- Declared requests (listed below)
Exact request inputs
[
{
"key": "webgl.arithmetic.opaque-control",
"inputs": {
"opaque-control": {
"dialect": "GLSL ES 1.00",
"dimensions": [
2,
2
],
"attributes": {
"alpha": false,
"antialias": false,
"depth": false,
"stencil": false,
"preserveDrawingBuffer": true
},
"vertexSource": "attribute vec2 position; void main(){gl_Position=vec4(position,0.0,1.0);}",
"fragmentSource": "precision highp float; uniform vec4 operands; void main(){gl_FragColor=vec4(vec3(17.0,34.0,51.0)/255.0,1.0);}",
"operands": [
17,
20,
2,
10
],
"expected": [
17,
34,
51,
255
],
"encoding": "opaque RGBA8; red = value/255 (sqrt uses value*64/255)"
}
},
"controls": {
"opaque-control": [
{
"relationshipId": "glsl.opaque-control",
"class": "required",
"preconditions": [
"compile/link/framebuffer/error controls passed",
"opaque 8-bit RGB and alpha readback",
"dither/blend disabled",
"highp precision >=16",
"prior encoding controls satisfied"
]
}
]
}
},
{
"key": "webgl.arithmetic.encoding-control",
"inputs": {
"encoding-control": {
"dialect": "GLSL ES 1.00",
"dimensions": [
2,
2
],
"attributes": {
"alpha": false,
"antialias": false,
"depth": false,
"stencil": false,
"preserveDrawingBuffer": true
},
"vertexSource": "attribute vec2 position; void main(){gl_Position=vec4(position,0.0,1.0);}",
"fragmentSource": "precision highp float; uniform vec4 operands; void main(){gl_FragColor=vec4(vec3(37.0/255.0,0.0,0.0),1.0);}",
"operands": [
17,
20,
2,
10
],
"expected": [
37,
0,
0,
255
],
"encoding": "opaque RGBA8; red = value/255 (sqrt uses value*64/255)"
}
},
"controls": {
"encoding-control": [
{
"relationshipId": "glsl.encoding-control",
"class": "required",
"preconditions": [
"compile/link/framebuffer/error controls passed",
"opaque 8-bit RGB and alpha readback",
"dither/blend disabled",
"highp precision >=16",
"prior encoding controls satisfied"
]
}
]
}
},
{
"key": "webgl.arithmetic.integer-add",
"inputs": {
"integer-add": {
"dialect": "GLSL ES 1.00",
"dimensions": [
2,
2
],
"attributes": {
"alpha": false,
"antialias": false,
"depth": false,
"stencil": false,
"preserveDrawingBuffer": true
},
"vertexSource": "attribute vec2 position; void main(){gl_Position=vec4(position,0.0,1.0);}",
"fragmentSource": "precision highp float; uniform vec4 operands; void main(){gl_FragColor=vec4(vec3(float(int(operands.x)+int(operands.y))/255.0,0.0,0.0),1.0);}",
"operands": [
17,
20,
2,
10
],
"expected": [
37,
0,
0,
255
],
"encoding": "opaque RGBA8; red = value/255 (sqrt uses value*64/255)"
}
},
"controls": {
"integer-add": [
{
"relationshipId": "glsl.integer-add",
"class": "required",
"preconditions": [
"compile/link/framebuffer/error controls passed",
"opaque 8-bit RGB and alpha readback",
"dither/blend disabled",
"highp precision >=16",
"prior encoding controls satisfied"
]
}
]
}
},
{
"key": "webgl.arithmetic.matrix-vector",
"inputs": {
"matrix-vector": {
"dialect": "GLSL ES 1.00",
"dimensions": [
2,
2
],
"attributes": {
"alpha": false,
"antialias": false,
"depth": false,
"stencil": false,
"preserveDrawingBuffer": true
},
"vertexSource": "attribute vec2 position; void main(){gl_Position=vec4(position,0.0,1.0);}",
"fragmentSource": "precision highp float; uniform vec4 operands; void main(){gl_FragColor=vec4(vec3((mat2(operands.z,0.0,0.0,1.0)*vec2(operands.w,1.0)).x/255.0+operands.x/255.0,0.0,0.0),1.0);}",
"operands": [
17,
20,
2,
10
],
"expected": [
37,
0,
0,
255
],
"encoding": "opaque RGBA8; red = value/255 (sqrt uses value*64/255)"
}
},
"controls": {
"matrix-vector": [
{
"relationshipId": "glsl.matrix-vector",
"class": "permitted",
"preconditions": [
"compile/link/framebuffer/error controls passed",
"opaque 8-bit RGB and alpha readback",
"dither/blend disabled",
"highp precision >=16",
"prior encoding controls satisfied"
]
}
]
}
},
{
"key": "webgl.arithmetic.sqrt-response",
"inputs": {
"sqrt-response": {
"dialect": "GLSL ES 1.00",
"dimensions": [
2,
2
],
"attributes": {
"alpha": false,
"antialias": false,
"depth": false,
"stencil": false,
"preserveDrawingBuffer": true
},
"vertexSource": "attribute vec2 position; void main(){gl_Position=vec4(position,0.0,1.0);}",
"fragmentSource": "precision highp float; uniform vec4 operands; void main(){gl_FragColor=vec4(vec3(sqrt(operands.z)*64.0/255.0,0.0,0.0),1.0);}",
"operands": [
17,
20,
2,
10
],
"expected": null,
"encoding": "opaque RGBA8; red = value/255 (sqrt uses value*64/255)"
}
},
"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.arithmetic. 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/arithmetic"
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 |
|---|