This commit is contained in:
Samuel Bouchet 2026-03-25 19:38:50 +01:00
parent 46e8f50f37
commit abc640c2d0
3 changed files with 31 additions and 3 deletions

View file

@ -155,8 +155,25 @@ Les shaders custom doivent respecter le **binding model de Wicked Engine** :
- `DXGI_ERROR_DEVICE_HUNG` → shader en boucle infinie ou accès mémoire hors limites - `DXGI_ERROR_DEVICE_HUNG` → shader en boucle infinie ou accès mémoire hors limites
- Dialog bloquant avec `messageBox` → vient de `wi::helper::messageBox()`, ne pas confondre avec un crash - Dialog bloquant avec `messageBox` → vient de `wi::helper::messageBox()`, ne pas confondre avec un crash
**⚠️ Détection de crash GPU depuis CLI (Claude Code)** : les crashs GPU (`DXGI_ERROR_INVALID_CALL`, device removed) affichent une **modale Windows bloquante** via `wi::helper::messageBox()`. `timeout` tue le process sans détecter le crash. Pour détecter correctement :
1. **NE PAS utiliser `timeout`** pour tester — demander à l'utilisateur de lancer manuellement
2. Vérifier `bvle_backlog.txt` après exécution (contient les erreurs DX12)
3. Vérifier `bvle_crash.log` et `bvle_crash.dmp` pour les crashs SEH
4. Lancer avec `debugdevice` pour obtenir les messages de validation D3D12 détaillés dans le backlog
5. Un exit code non-zéro n'est PAS fiable : `timeout` renvoie 124, la modale attend indéfiniment
**Backlog Wicked** : `wi::backlog::SetLogFile("bvle_backlog.txt")` redirige les logs vers un fichier. Touche `~` (tilde) pour toggler la console à l'écran. **Backlog Wicked** : `wi::backlog::SetLogFile("bvle_backlog.txt")` redirige les logs vers un fichier. Touche `~` (tilde) pour toggler la console à l'écran.
### Gestion des resource states DX12 (buffers)
**Wicked Engine ne fait AUCUN tracking automatique d'état pour les buffers.** Les `GPUBarrier::Buffer(buf, before, after)` sont passées directement à D3D12 sans validation. **Le `state_before` DOIT correspondre à l'état DX12 réel, sinon → DXGI_ERROR_INVALID_CALL.**
**Pièges critiques :**
- `UpdateBuffer()` → appelle `CopyBufferRegion` sans aucune barrier. Le buffer **DOIT** être en COPY_DST (ou COMMON pour promotion implicite sur frame 1).
- Après `DrawInstancedIndirectCount`, les buffers indirect restent en **INDIRECT_ARGUMENT**. Appeler `UpdateBuffer` dessus au frame suivant → crash car pas de transition INDIRECT_ARGUMENT → COPY_DST.
- Les buffers créés avec `Usage::DEFAULT` démarrent en état **COMMON** (D3D12). COMMON supporte la promotion implicite vers COPY_DST, SRV, etc. mais **PAS vers UAV**.
- Solution recommandée : **tracker l'état manuellement** avec un `mutable ResourceState` et faire des barriers explicites entre chaque usage.
**Mode debug face-color** : lancer avec `BVLEVoxels.exe debug` pour activer. Génère un monde de test (blocs isolés) et colore chaque face selon sa direction : **Mode debug face-color** : lancer avec `BVLEVoxels.exe debug` pour activer. Génère un monde de test (blocs isolés) et colore chaque face selon sa direction :
- Bright Red / Dark Red = +X / -X - Bright Red / Dark Red = +X / -X
- Bright Green / Dark Green = +Y / -Y - Bright Green / Dark Green = +Y / -Y

View file

@ -49,3 +49,16 @@ add_custom_command(TARGET BVLEVoxels POST_BUILD
${CMAKE_SOURCE_DIR}/engine/WickedEngine/shaders/voxel ${CMAKE_SOURCE_DIR}/engine/WickedEngine/shaders/voxel
COMMENT "Copying voxel shaders to Wicked Engine shader source directory" COMMENT "Copying voxel shaders to Wicked Engine shader source directory"
) )
# Delete stale compiled voxel shaders to force runtime recompilation.
# Wicked Engine only compiles .hlsl → .cso when .cso is ABSENT (no timestamp check).
# Without this step, .hlsl changes are silently ignored if old .cso files exist.
add_custom_command(TARGET BVLEVoxels POST_BUILD
COMMAND ${CMAKE_COMMAND} -E rm -f
$<TARGET_FILE_DIR:BVLEVoxels>/shaders/hlsl6/voxel/voxelVS.cso
$<TARGET_FILE_DIR:BVLEVoxels>/shaders/hlsl6/voxel/voxelPS.cso
$<TARGET_FILE_DIR:BVLEVoxels>/shaders/hlsl6/voxel/voxelCullCS.cso
$<TARGET_FILE_DIR:BVLEVoxels>/shaders/hlsl6/voxel/voxelMeshCS.cso
$<TARGET_FILE_DIR:BVLEVoxels>/shaders/hlsl6/voxel/voxelCommon.hlsli.cso
COMMENT "Clearing stale voxel shader cache (forces recompilation from current .hlsl sources)"
)

View file

@ -4,8 +4,6 @@ Prototype de moteur voxel hybride basé sur [Wicked Engine](https://github.com/t
Cible : **60+ fps en 1440p**, monde de 512×512×256 voxels visibles. Cible : **60+ fps en 1440p**, monde de 512×512×256 voxels visibles.
![Phase 2](https://img.shields.io/badge/Phase-2%20GPU--driven-blue)
## Prérequis ## Prérequis
| Outil | Version | Installation | | Outil | Version | Installation |
@ -109,7 +107,7 @@ GPU: frustum cull compute → indirect args → DrawInstancedIndirectCount (1 ap
## Phases de développement ## Phases de développement
- [x] **Phase 1** — Setup, meshing CPU, rendu basique - [x] **Phase 1** — Setup, meshing CPU, rendu basique
- [x] **Phase 2** — GPU-driven pipeline, mega-buffer, culling, compute shaders - [ ] **Phase 2** — GPU-driven pipeline, mega-buffer, culling, compute shaders
- [ ] **Phase 3** — Texture blending (triplanar, height-based) - [ ] **Phase 3** — Texture blending (triplanar, height-based)
- [ ] **Phase 4** — Toping (rebords, bordures procédurales) - [ ] **Phase 4** — Toping (rebords, bordures procédurales)
- [ ] **Phase 5** — Rendu smooth (Surface Nets / Marching Cubes) - [ ] **Phase 5** — Rendu smooth (Surface Nets / Marching Cubes)