# SHADER-139 — Compatibilité Vulkan du shader beta.138 Socle **beta.138**, Minecraft **26.3**, Java **25**, branche `codex/vulkan-shaders-beta139`. Le signalement initial concernait un bloom invisible même à 100 %. Le joueur indique ensuite que le rendu fonctionne de nouveau sur Windows et demande la compatibilité Vulkan. Les changements expérimentaux d'intensité ont été retirés : les shaders et les valeurs par défaut restent ceux de beta.138. ## Contrat Utiliser les mêmes pipelines RenderPearl sur OpenGL et Vulkan. Vérifier le backend réellement utilisé, car Minecraft peut retomber sur OpenGL lorsque Vulkan ne démarre pas. Tester les effets dans de nouveaux mondes ignorés, sans ouvrir de sauvegarde personnelle ni modifier le backend de l'instance Prism. Le lancement des tests accepte désormais `-PsanctuaryClientGraphicsBackend=vulkan` ou `opengl`. Les tests de shaders refusent tout repli silencieux et consignent le nom du backend, du GPU et du pilote. Cette option concerne uniquement le client de développement. ## Reproduction ```sh JAVA_HOME=/chemin/vers/jdk-25 ./gradlew :sanctuary:runClientGameTest \ -PsanctuaryClientTests=true -PsanctuaryPixelShadows122ClientTests=true \ -PsanctuaryClientGraphicsBackend=vulkan \ -PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true ``` Sur Windows, utiliser `gradlew.bat` avec les mêmes propriétés et Java 25. Ajouter `-PsanctuaryClientImprovedTransparency=true` pour tester la transparence améliorée ; le choix initial est restauré après le test. Pour les rayons et la météo, remplacer `sanctuaryPixelShadows122ClientTests` par `sanctuarySunshaft137ClientTests`. Pour isoler le bloom et le lens flare, utiliser `sanctuaryBloom130ClientTests`. ## Diagnostic initial Le client Vulkan démarre ici sur **Apple M1 / MoltenVK 1.4.2**, API 1.2.350. Le test du bloom réussit en **2 min 19 s** : les masques des vingt minerais, les contrôles OFF/zéro, intensité/diffusion, l'occlusion, le rechargement, les torches, glowstone, lampes, lave, soleil et le lens flare sont vérifiés. Les mesures de référence du bloom sont identiques à celles d'OpenGL : 14649 pixels de minerai, gain du halo faible 218131, fort 1970502, gain solaire 7708. Log : `build/shader139-vulkan-first.log`. Cela confirme cette combinaison précise ; ce n'est pas une validation des pilotes NVIDIA/AMD/Intel sous Windows. En cas de retour du problème, le `logs/latest.log` de la session Windows concernée est nécessaire pour relever le backend effectif, le GPU, le pilote et les éventuelles erreurs de pipeline. ## Suite Vulkan `sanctuaryPixelShadows122ClientTests` réussit en **8 min 50 s**. Les contrôles couvrent ombres diurnes/nocturnes, feuillage, stabilité en temps réel, highlights CTM, bloom et lens flare, SSGI en déplacement et près des surfaces, PBR directionnel, rechargement, redimensionnement et interfaces FR/EN. Log : `build/shader139-vulkan-suite2.log`. Le bloom et le lens flare réussissent aussi avec `sanctuaryClientImprovedTransparency=true`, en **1 min 45 s**. Le backend est bien Vulkan, sa profondeur est en `[0, 1]` et l'option de transparence est active. Les mesures du bloom restent identiques. Log : `build/shader139-vulkan-transparency.log`. La suite météo/rayons beta.138 n'a pas été rejouée sous Vulkan dans ce ticket ; les résultats ci-dessus portent sur les effets explicitement listés. Le joueur confirme que le retour à OpenGL rétablit l'effet sur Windows. Ce défaut particulier reste à reproduire à partir d'un journal récent. Un premier lancement utilisait un nom de propriété incomplet et a exécuté la suite générale, échouant dans Blocodex avant les tests de shaders. Ce lancement n'est pas compté comme une validation Vulkan des shaders. La commande corrigée utilise `sanctuaryPixelShadows122ClientTests`. ## Construction `./gradlew check build -x :sanctuary:runGameTest` réussit ; le serveur GameTest dédié reste exclu conformément au refus EULA antérieur. Log : `build/shader139-check-build.log`. Le JAR reconstruit est **strictement identique, octet pour octet**, au JAR Sanctuary de la release beta.138. La distribution ne change pas et ne nécessite donc pas de nouvel assemblage. ## Distribution Ce ticket ajoute des options de lancement de tests et leur documentation. Les shaders de production et les réglages de beta.138 ne sont pas changés. Aucune nouvelle livraison binaire, aucun tag beta.139 ni mise à jour de l'instance personnelle n'est effectué pour une vérification seule. ## Référence du moteur Minecraft 26.3 compile les shaders OpenGL et Vulkan via ShaderC et expose `RENDERPEARL_DEPTH_IS_ZERO_TO_ONE` pour la convention de profondeur. [Notes officielles Minecraft 26.3](https://feedback.minecraft.net/hc/en-us/articles/48913133328013-Minecraft-Java-Edition-26-3). Les effets Sanctuary transmettent déjà la convention du périphérique aux reconstructions de position ; aucun remplacement spéculatif n'est appliqué.