Question gouvernante : Quelle stratégie de matérialisation minimise réellement le coût CPU / GPU / mémoire sous WebGPU ?
Statut : orchestration et correctness gate implémentés. La campagne WebGPU reste not-run jusqu'au branchement d'un adaptateur matériel dans bench/main.ts.
| ID | Stratégie | Principe |
|---|---|---|
| A | state-switch |
Bascule classique de pipeline / matériaux (référence) |
| B | storage-buffer |
Tampon de stockage de matériaux (uniforms par objet) |
| C | texture-array |
Tableaux de textures (atlas + index) |
| D | pseudo-bindless |
Atlas / indexing dynamique |
Aucune stratégie n'est imposée. En particulier
pseudo-bindlessdoit rester optionnel : si WebGPU ne le supporte pas proprement sur l'environnement cible, le banc l'exclut et l'inscrit enWATCHLIST.
| Palier | Matériaux uniques |
|---|---|
| M-1 | 1 |
| M-10 | 10 |
| M-100 | 100 |
| M-1k | 1 000 |
| M-10k | 10 000 |
Chaque palier est exécuté par stratégie (4 × 5 = 20 mesures attendues).
| Métrique | Définition |
|---|---|
pipelineStateChanges |
Nombre de changements d'état de pipeline |
bindGroupChanges |
Nombre de changements de bind group |
cpuFrameMs |
Temps CPU par frame |
gpuFrameMs |
Temps GPU par frame |
materialTableBytes |
Mémoire de la table / storage / atlas |
| Verdict | Condition |
|---|---|
INTEGRATE |
Stratégie la moins coûteuse sur 3 des 5 paliers, sans régression > 2× sur les autres |
REJECT |
Stratégie systématiquement la plus lente sur 4 paliers |
WATCHLIST |
Stratégie dépendante de la charge (gagnante seulement à M-1k+) |
pseudo-bindlessnatif : pas imposé si WebGPU ne l'expose pas proprement.- Shading différé : c'est le banc 12.
- Compteur d'échantillons par pixel : non requis.
runMaterialBatchingCampaign reçoit les paliers, stratégies, warmup, échantillons, AbortSignal, callback de progression et callback de mesure matérielle. Le callback rend une sortie réelle et fournit son empreinte ; toutes les stratégies d'un palier doivent correspondre à la première. Les métriques indisponibles restent null.