fix(rendering): water reflection render pass compat, anisotropy feature, shadow pool race

Three bugs found via AMD RADV crash log:

1. Water reflection render pass used BOTTOM_OF_PIPE as srcStageMask but
   pipelines were created against the main pass (EARLY_FRAGMENT_TESTS |
   COLOR_ATTACHMENT_OUTPUT). AMD enforces strict render pass compatibility
   → SIGSEGV when scene renders into reflection texture.

2. samplerAnisotropy was never enabled during device creation despite being
   used in sampler creation — now requested via PhysicalDeviceSelector.

3. Shadow texture descriptor pool was reset each frame while prior frame's
   command buffers might still reference it. Split into per-frame-slot pools
   so each reset is fence-guarded.
This commit is contained in:
Kelsi 2026-04-03 17:41:14 -07:00
parent 62b8a757a3
commit 4f7912cf45
4 changed files with 20 additions and 12 deletions

View file

@ -391,8 +391,9 @@ private:
VkDescriptorSet shadowParamsSet_ = VK_NULL_HANDLE;
::VkBuffer shadowParamsUBO_ = VK_NULL_HANDLE;
VmaAllocation shadowParamsAlloc_ = VK_NULL_HANDLE;
// Per-frame pool for foliage shadow texture descriptor sets
VkDescriptorPool shadowTexPool_ = VK_NULL_HANDLE;
// Per-frame pools for foliage shadow texture descriptor sets (one per frame-in-flight)
static constexpr uint32_t kShadowTexPoolFrames = 2;
VkDescriptorPool shadowTexPool_[kShadowTexPoolFrames] = {};
// Particle pipelines
VkPipeline particlePipeline_ = VK_NULL_HANDLE; // M2 emitter particles