blob: 143f4ea90d4444722105bb321980043b47364303 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#!/usr/bin/env python3
"""Test WebGPU → Canvas → PNG precision loss
Check if bgra8unorm → 2D canvas → PNG loses 2 LSBs.
"""
import numpy as np
# Simulate WebGPU bgra8unorm conversion
# Float [0, 1] → uint8 [0, 255]
test_values = [
1.0, # Perfect white
0.9999, # Near-white
254.5/255, # Exactly 254.5
253.5/255, # Exactly 253.5
]
for val in test_values:
# WebGPU bgra8unorm: round(val * 255)
gpu_u8 = int(np.round(val * 255))
# Convert back to normalized
gpu_f32 = gpu_u8 / 255.0
# JavaScript canvas getImageData: uint8
canvas_u8 = int(np.round(gpu_f32 * 255))
print(f"Input: {val:.6f} → GPU u8: {gpu_u8} → Canvas: {canvas_u8}")
if canvas_u8 != 255:
print(f" ⚠️ Lost {255 - canvas_u8} LSBs")
print("\nConclusion:")
print("If WebGPU stores 1.0 as 255, canvas should read 255.")
print("If user sees 253, likely:")
print(" a) Not viewing CNN layer (viewing static features at scale=1.0)")
print(" b) Value in texture is already 253/255 = 0.9921875")
print(" c) F16 storage or unpacking issue")
|