acdream/src/AcDream.App/Rendering
Erik 871c406b99 feat(render): let a pipeline name the colour format it renders into
Campaign V slice V6d, commit 1 of 3. The third contract amendment of the campaign, in the same shape as GpuBlendMode.InverseAlpha (V4c) and GpuVertexFormat.UByte4UInt (V4d): a slice met a wall the pinned contract could not express, and the fix is a reviewed field rather than a backend working around it.

Vulkan's dynamic rendering bakes the colour-attachment format into the pipeline. VkPipelineRenderingCreateInfo has to name it at creation, and a pipeline whose declared format disagrees with the attachment it is used with is undefined. GpuPipelineDescription named SampleCount and nothing else about the target, so slice V6c had no way to ask the question and hard-coded VulkanTextureFormatMapping.CanonicalColorAttachmentFormat for every pipeline it built. It recorded that as a real expressiveness gap rather than hiding it, and named this commit as the honest fix.

GpuPipelineDescription.ColorFormat defaults to Rgba8UnormRenderTarget, which the Vulkan backend already maps to the swapchain's B8G8R8A8_UNORM, so every pipeline written before the field existed keeps exactly the format it was getting. GL ignores the field entirely: a GL framebuffer carries its own attachment formats and a program binds to whatever is attached, so there is nothing for the GL backend to declare. The substitution that makes an offscreen Rgba8UnormRenderTarget resolve to the swapchain's byte order stays — it is what lets a backbuffer pipeline and an offscreen pipeline share one description, and it is invisible above the API because an image is sampled through its format's component mapping.

The contract test asserts both halves that matter: the default is the render-target format (so nothing moves), and the field is really settable (so naming it is not decoration).

App tests 4,057 passed / 3 skipped, up one from the 4,056 baseline. Offline pixel gate against 234fe91d: differing fraction 2.84e-05, 16 pixels of 563,200 compared, inside the documented 15-23 pixel same-commit noise band and about 35x under the 0.001 threshold.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 08:36:06 +02:00
..
Gpu feat(render): let a pipeline name the colour format it renders into 2026-07-28 08:36:06 +02:00
Residency Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
Scene refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
Selection feat(rendering): prove packed dispatcher output parity 2026-07-25 01:31:56 +02:00
Shaders feat(render): Campaign V slice V6c - SPIR-V, pipelines, passes, and a Vulkan frame that draws 2026-07-28 08:17:24 +02:00
Sky Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
Vfx Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
Wb Revert "feat(render): Campaign V slice V4c - move the world draw path onto the RHI" 2026-07-27 22:38:02 +02:00
AnimationPresentationDiagnostics.cs refactor(animation): extract live PartArray presenter 2026-07-21 09:37:02 +02:00
AttachmentUpdateOrder.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
BindlessTextureMutationGuard.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
BindlessTexturePair.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
BitmapFont.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
BoundedUnownedResourceCache.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
CameraController.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CameraFrameController.cs refactor(camera): extract the update frame 2026-07-22 03:08:58 +02:00
CellVisibility.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ChaseCamera.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ClipFrame.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ClipFrameAssembler.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ClipPlaneSet.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CompositeTextureArrayCache.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CreatureAppraisalPresentation.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
DatLiveEntityProjectionMaterializer.cs refactor(runtime): close simulation ownership 2026-07-26 15:53:31 +02:00
DebugLineRenderer.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
DebugVmRenderFactsPublisher.cs refactor(render): extract frame presentation diagnostics 2026-07-22 05:02:31 +02:00
DevToolsFramePresenter.cs refactor(runtime): move session lifetime and ordered transport 2026-07-25 19:39:24 +02:00
DevToolsRuntimeSources.cs refactor(runtime): close simulation ownership 2026-07-26 15:53:31 +02:00
DisplayFramePacingController.cs feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
DollCamera.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DollEntityBuilder.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DynamicBufferCapacity.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
EquippedChildRenderController.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
FixedEntityTextureOwnerLease.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
FlyCamera.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
FramebufferResizeController.cs refactor(app): compose settings and developer tools 2026-07-22 16:11:34 +02:00
FramePacingController.cs feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
FramePacingPolicy.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
FramePacingWaiterFactory.cs feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
FrameProfilerGpuMeasurement.cs perf(diag): complete trustworthy Slice A capture tooling 2026-07-24 12:46:51 +02:00
FrustumCuller.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
GameFrameGraphSlot.cs refactor(app): compose atomic frame roots 2026-07-22 19:02:08 +02:00
GameRenderResourceLifetime.cs refactor(app): compose world rendering startup 2026-07-22 16:46:05 +02:00
GameWindow.cs feat(render): Campaign V slice V5 - Vulkan bring-up, dark 2026-07-28 07:11:50 +02:00
GameWindowLifetime.cs Revert "feat(render): Campaign V slice V4d-2 - move terrain onto the RHI" 2026-07-27 22:38:02 +02:00
GlBindlessHandleTable.cs feat(render): Campaign V slice V2a - mesh path texture-index migration 2026-07-27 15:51:26 +02:00
GlConstructionCleanupLedger.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
GlResourceCommand.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
GlTextureConstructionTransaction.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
GpuDeviceFrameLifetime.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
GpuFrameFlightController.cs refactor(render): extract frame resource preparation 2026-07-22 05:23:46 +02:00
GpuRetiredTerrainSlotAllocator.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
HostQuiescenceGate.cs refactor(app): own native window callback lifetime 2026-07-22 09:59:10 +02:00
IAnimationHookCaptureSink.cs refactor(runtime): extract the live object frame 2026-07-22 00:42:26 +02:00
ICamera.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ICameraCollisionProbe.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ILiveAnimationPresentationContext.cs refactor(animation): extract live PartArray presenter 2026-07-21 09:37:02 +02:00
ILiveStaticPartFrameSource.cs fix(animation): harden presentation phase handoffs 2026-07-21 10:01:25 +02:00
IndoorDrawPlan.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
InteriorEntityPartition.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LinuxMonotonicFramePacingWaiter.cs feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
LiveAnimationPresentationContext.cs fix(runtime): restore interaction completion ownership 2026-07-23 05:51:51 +02:00
LiveEntityAnimationPresenter.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
LiveEntityAnimationScheduler.cs refactor(runtime): own projectile simulation 2026-07-26 14:17:42 +02:00
LiveEntityAnimationState.cs fix(animation): harden presentation phase handoffs 2026-07-21 10:01:25 +02:00
LiveEntityAppearanceBinding.cs refactor(world): extract live projection mechanics 2026-07-21 16:17:03 +02:00
LiveEntityCreateSupersessionRecovery.cs refactor(world): extract live entity hydration 2026-07-21 17:32:45 +02:00
LiveEntityPartArrayLifecycle.cs refactor(update): cut over the frame orchestrator 2026-07-22 03:31:38 +02:00
LiveStaticAnimationResidency.cs refactor(runtime): extract the live object frame 2026-07-22 00:42:26 +02:00
NdcScissorRect.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
OrbitCamera.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
OrderedResourceTeardown.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
OutdoorCellNode.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
OwnerScopedResourceRegistry.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
PaperdollFramePresenter.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
PaperdollViewportRenderer.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ParticleEmitterRetirementTracker.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
ParticleRenderer.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ParticleSubmissionOrdering.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
PhysicsCameraCollisionProbe.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PortalDepthMaskRenderer.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PortalProjection.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PortalTunnelCamera.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PortalTunnelPresentation.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PortalView.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PortalVisibilityBuilder.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PrivateEntityViewportRenderer.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
PrivatePresentationRenderer.cs feat(ui): port retail creature appraisal presentation 2026-07-23 12:55:24 +02:00
QuadClipper.cs fix(ui): render live component counts 2026-07-15 18:11:02 +02:00
RenderBootstrap.cs Revert "feat(render): Campaign V slice V4c - move the world draw path onto the RHI" 2026-07-27 22:38:02 +02:00
RenderFrameDiagnosticsController.cs perf(diagnostics): expose prepared asset source counters 2026-07-24 15:16:32 +02:00
RenderFrameDiagnosticSources.cs refactor(runtime): own world environment state 2026-07-26 16:45:04 +02:00
RenderFrameGlStateController.cs refactor(render): extract world scene frame owner 2026-07-22 07:22:09 +02:00
RenderFrameOrchestrator.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RenderFramePreparationController.cs refactor(render): compose render frame orchestrator 2026-07-22 08:03:49 +02:00
RenderFrameResourceController.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
ResourceCleanupGroup.cs refactor(app): compose world rendering startup 2026-07-22 16:46:05 +02:00
ResourceShutdownTransaction.cs refactor(app): extract focused window lifetime 2026-07-22 19:43:52 +02:00
RestoredTextureBindingMutation.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
RetailAlphaQueue.cs perf(render): bound animation and alpha scratch residency 2026-07-24 16:34:28 +02:00
RetailChaseCamera.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RetailCursorManager.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RetailCursorResolver.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
RetailParticleGeometryClassifier.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RetailPViewPassExecutor.cs perf(rendering): retire production entity partition 2026-07-25 10:50:57 +02:00
RetailPViewRenderer.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RetailStaticAnimatingObjectScheduler.cs feat(rendering): index incremental scene queries 2026-07-24 22:12:26 +02:00
RollingTimingSampleWindow.cs refactor(render): extract frame presentation diagnostics 2026-07-22 05:02:31 +02:00
RuntimeResourceSlots.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
SamplerCache.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
SceneLightingUboBinding.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ScreenPolygonClip.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
Shader.cs Revert "feat(render): Campaign V slice V4c - move the world draw path onto the RHI" 2026-07-27 22:38:02 +02:00
ShaderProgramConstruction.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
SilkWindowCallbackBinding.cs refactor(app): own native window callback lifetime 2026-07-22 09:59:10 +02:00
SkyPesFrameController.cs refactor(render): extract world frame preparation 2026-07-22 05:54:00 +02:00
SpawnMotionInitializer.cs refactor(world): extract live entity hydration 2026-07-21 17:32:45 +02:00
StandaloneBindlessTextureCache.cs feat(render): unify physical residency accounting 2026-07-24 16:20:48 +02:00
StaticLiveRootCommitter.cs refactor(runtime): extract the live object frame 2026-07-22 00:42:26 +02:00
SyntheticEntityMeshReferenceOwner.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
TeleportViewPlaneController.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
TerrainAtlas.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
TerrainDrawDiagnosticsController.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
TerrainModernRenderer.cs Revert "feat(render): Campaign V slice V4d-1 - converge terrain's view and projection" 2026-07-27 22:38:02 +02:00
TerrainTextureTilingTable.cs fix(rendering): restore retail terrain texture tiling 2026-07-13 21:04:22 +02:00
TextRenderer.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
TextRenderGlStateScope.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
TextureCache.cs feat(render): Campaign V slice V4a - port TextRenderer/BitmapFont/DebugLineRenderer/TextureCache UI path onto IGpuDevice 2026-07-27 19:37:19 +02:00
TrackedTextureConstruction.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
ViewconeCuller.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
WindowsHighResolutionFramePacingWaiter.cs fix #225: stabilize render pacing and frame CPU 2026-07-19 06:29:30 +02:00
WorldRenderDiagnostics.cs test(render): add blank-world attribution apparatus and a post-world GL sample 2026-07-28 00:08:10 +02:00
WorldRenderFrameBuilder.cs refactor(runtime): close simulation ownership 2026-07-26 15:53:31 +02:00
WorldRevealRenderResourceScheduler.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
WorldSceneDiagnosticsController.cs test(render): add blank-world attribution apparatus and a post-world GL sample 2026-07-28 00:08:10 +02:00
WorldScenePassExecutor.cs feat(rendering): complete current-path render referee 2026-07-24 21:28:12 +02:00
WorldSceneRenderer.cs perf(rendering): retire production entity partition 2026-07-25 10:50:57 +02:00
WorldSceneRuntimeSources.cs refactor(runtime): close simulation ownership 2026-07-26 15:53:31 +02:00