From abc640c2d0cbd9c5cdc45b1bbea0019869caef4c Mon Sep 17 00:00:00 2001 From: Samuel Bouchet Date: Wed, 25 Mar 2026 19:38:50 +0100 Subject: [PATCH] cleanup --- CLAUDE.md | 17 +++++++++++++++++ CMakeLists.txt | 13 +++++++++++++ README.md | 4 +--- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 39200a8..aa5bb63 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 - 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. +### 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 : - Bright Red / Dark Red = +X / -X - Bright Green / Dark Green = +Y / -Y diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d75d5c..4567247 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,3 +49,16 @@ add_custom_command(TARGET BVLEVoxels POST_BUILD ${CMAKE_SOURCE_DIR}/engine/WickedEngine/shaders/voxel 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 + $/shaders/hlsl6/voxel/voxelVS.cso + $/shaders/hlsl6/voxel/voxelPS.cso + $/shaders/hlsl6/voxel/voxelCullCS.cso + $/shaders/hlsl6/voxel/voxelMeshCS.cso + $/shaders/hlsl6/voxel/voxelCommon.hlsli.cso + COMMENT "Clearing stale voxel shader cache (forces recompilation from current .hlsl sources)" +) diff --git a/README.md b/README.md index b5faea3..cc8e4b0 100644 --- a/README.md +++ b/README.md @@ -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. -![Phase 2](https://img.shields.io/badge/Phase-2%20GPU--driven-blue) - ## Prérequis | Outil | Version | Installation | @@ -109,7 +107,7 @@ GPU: frustum cull compute → indirect args → DrawInstancedIndirectCount (1 ap ## Phases de développement - [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 4** — Toping (rebords, bordures procédurales) - [ ] **Phase 5** — Rendu smooth (Surface Nets / Marching Cubes)