diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 4baad6b1..204a05a1 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -120,7 +120,7 @@ may be force-stopped after two failed graceful closes, and ACE then holds the se ## #459 — Five fragment shaders declare SPIR-V `DemoteToHelperInvocation` without the device feature (validation error at every launch) -**Status:** RESOLVED 2026-09-03 at `e33fd2472` — `shaderDemoteToHelperInvocation` is now read through the Vulkan 1.3 feature chain, enabled at device creation, and gated as required in `VulkanCapabilityRecord` (236 Vulkan tests + the hermetic lane green). Proof: the four-pose validation launch at that commit (`logs/selfgate-20260903-171009-fix459-validation`, `logs/vk-validation-459.log`) reports ZERO validation errors; only the ten pre-existing `WARNING-Shader-OutputNotConsumed` performance warnings remain (one pipeline declares a vertex attribute at location 1 its shader never reads — still to be identified; harmless). Found 2026-09-03 by the first Vulkan-validation-layer self-gate of Campaign OVERHAUL v2 (S3 chunk 4 fix round 2's gate; the layer was forced through the loader with `VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation`, since `ACDREAM_DEVTOOLS=1` only adds the debug-utils extension — `VulkanInterop.cs:182-183` creates the instance with `EnabledLayerCount = 0`). +**Status:** RESOLVED 2026-09-03 at `e33fd2472` — `shaderDemoteToHelperInvocation` is now read through the Vulkan 1.3 feature chain, enabled at device creation, and gated as required in `VulkanCapabilityRecord` (236 Vulkan tests + the hermetic lane green). Proof: the four-pose validation launch at that commit (`logs/selfgate-20260903-171009-fix459-validation`, `logs/vk-validation-459.log`) reports ZERO validation errors; only the ten pre-existing `WARNING-Shader-OutputNotConsumed` performance warnings remain (one pipeline declares a vertex attribute at location 1 its shader never reads — harmless; `spirv-dis` narrows the module to a vertex shader with a single `Location 0` input that is built into ~10 pipeline variants: `portal_depth.vert` (the seal/punch variants) or the `directional_shadow_terrain`/`_world_opaque` pair — confirm by matching the reported `VkShaderModule` handle against the creation order when someone trims that pipeline's vertex-input state). Found 2026-09-03 by the first Vulkan-validation-layer self-gate of Campaign OVERHAUL v2 (S3 chunk 4 fix round 2's gate; the layer was forced through the loader with `VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation`, since `ACDREAM_DEVTOOLS=1` only adds the debug-utils extension — `VulkanInterop.cs:182-183` creates the instance with `EnabledLayerCount = 0`). **Severity:** LOW today (every driver we run on accepts it), MEDIUM by the spec (undefined behavior: `VUID-VkShaderModuleCreateInfo-pCode-08740`) **Component:** `tools/ShaderCompiler` target environment / `VulkanGpuDevice` feature chain diff --git a/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md b/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md index f5bed769..4ff6d506 100644 --- a/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md +++ b/docs/research/2026-09-01-overhaul/s4-depth-alpha-packet.md @@ -132,10 +132,16 @@ seal/punch color-state row from S4-c1 kept or retired per its decision. `DrawBlock` call AFTER `DrawSortCell` returns, so chunk 2 adds one leaf method at the sort-cell EXIT (a `WalkFrameEventKind` of its own, ordered after the cell's object turn) — not a print-site change. -- Where does the particle submitter's list membership come from — the - particle draw is retail's own `AddMeshToAlphaList` consumer (billboards go - to ALPHA), or is it drawn through the emitter's cell turn immediately? - Check `ParticleRenderer.cs`'s submit site against the spec's §4 table. +- PARTLY SETTLED (2026-09-03): `ParticleRenderer` submits every deferred + particle draw (billboard and mesh kinds alike) to the single queue with a + viewer distance (`queue.Submit(_alphaSource, token, sqrt(DistanceSq))`). + In retail a particle is a `DrawMesh` like any other subset, so its list is + decided by the §4 branch table on the emitter's subset mask and material + (rows 3/4 → ALPHA under the default `0x0E` delay mask; row 1 immediate + while `m_currentlyDrawingSky` is set — the weather emitters). Chunk 2 + routes particles through the same branch table, not a particle-specific + rule; the parts capture (`*.parts.log`, `PD`/`DM` lines) is the oracle for + which emitters ever appear as immediate draws. - SETTLED (2026-09-03): the `alphadepth` captures' `AM` lines carry the list selector (`AM mesh=… surf=… csurf=… new=… clip=… listSel=…` — `listSel` is the list, `new` the first-for-list flag, `clip` the clip-map duplicate,