Skip to content

Feat: Misc Update#426

Merged
FlyAndNotDown merged 7 commits into
ExplosionEngine:masterfrom
FlyAndNotDown:master
Jun 28, 2026
Merged

Feat: Misc Update#426
FlyAndNotDown merged 7 commits into
ExplosionEngine:masterfrom
FlyAndNotDown:master

Conversation

@FlyAndNotDown

Copy link
Copy Markdown
Member

No description provided.

FlyAndNotDown and others added 6 commits June 25, 2026 23:50
VulkanBuffer::Map applied no offset to the returned pointer and never
flushed/invalidated non-coherent memory; it now returns base+offset,
invalidates on a read map and flushes on unmap of a write map.

Buffer allocation keyed host-access flags off `usages | mapWrite`, which is
always true and forced every buffer into host-visible memory; it now uses
`& mapWrite` for sequential-write and `& mapRead` for random-access host memory.

DX12Buffer::Map likewise returned the resource base without adding the offset;
it now returns base+offset to match the contract.
The buffer<->texture copy paths only produced correct results when copying
a whole sub-resource at the base mip; sub-region and multi-mip/3D copies
were wrong:

- Vulkan: bufferRowLength/bufferImageHeight are measured in texels, but the
  helper assigned byte pitches; drive them from the sub-resource footprint.
- DirectX12: the staging footprint used copyRegion for its extent, making the
  slice stride diverge from the documented footprint; use the full extent and
  let the copy box select the window.
- GetTextureSubResourceCopyFootprint ignored the mip level on Vulkan (always
  base extent) and mis-indexed array layers on DirectX12; both now report the
  per-mip, per-layer footprint (with 3D depth halved per mip).
- Texture asset upload: UpdateMips under-allocated 3D sub-resources (missing
  depth) and the staging fill/copy used base width/height/depth for every mip;
  both are now driven by the per-mip footprint, fixing an out-of-bounds write
  for array textures.
Add DrawIndirect/DrawIndexedIndirect/MultiDrawIndirect/MultiDrawIndexedIndirect to
RasterPassCommandRecorder across the Vulkan, DirectX12 and Dummy backends, with
DrawIndirectArguments/DrawIndexedIndirectArguments describing the indirect buffer
layout. Add BufferState::indirect with the matching Vulkan barrier and DX12 resource
state mappings. DirectX12 pre-creates the draw and draw-indexed command signatures at
device startup.
Runtime dependencies and resources all land in one shared per-sub-project
Binaries directory, and previously every consumer re-copied an overlapping
set of files there, so parallel builds raced on the same destination files
(intermittent "Error copying file" failures, hit most often on macOS).

Now each runtime file is copied by exactly one owner. Files referenced
through a target ($<TARGET_FILE:...>) get a deduplicated per-file owner
created in the consumer scope where the target is visible (imported
third-party targets such as Qt are directory-scoped); first-party owners
wait on their producing target, and they cannot share a single owner or a
build tool such as MirrorTool would close a dependency cycle. Plain-path
third-party files and resources are batched into one per-sub-project assets
target whose copies run sequentially.
DXC's StringRef.h specializes std::is_nothrow_constructible, which recent
Apple Clang on the macOS-latest runner rejects as -Winvalid-specialization
(an error by default), breaking the Configure CMake step. Pass
-Wno-invalid-specialization (guarded by -Wno-unknown-warning-option for
older clang) so the pinned source compiles while keeping its behavior.
@FlyAndNotDown FlyAndNotDown merged commit 7ff03de into ExplosionEngine:master Jun 28, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant