split/threedim#2079
Open
jcelerier wants to merge 79 commits into
Open
Conversation
jcelerier
commented
Jun 14, 2026
Member
- isf: TEX_DIMENSIONS_3D / IMG_SIZE_3D aliases for 3D samplers
- isf: point3d_input AS_COLOR flag for color-swatch display
- isf: parse-time warning on unknown csf_image_input FORMAT
- isf: parser rework — top-level descriptors, uniform inputs, geometry AUXILIARY, vertex inputs
- 3rdparty: add OffsetAllocator submodule
- gfx: add AssetTable + TextureLoader for shared decoded-asset cache
- gfx: add GpuResourceRegistry — slab-allocated GPU arenas backed by OffsetAllocator
- gfx: add CameraMath / GpuTiming / VertexFallback helpers
- gfx: add IsfBindingsBuilder + PipelineStateHelpers
- gfx: add SceneGPUState — FlatScene + scene packer
- gfx: add OffscreenDevice + RhiPreviewWidget + Metal buffer-copy backend
- gfx: extend ISF / SimpleRenderedISF nodes for new ISF features
- csf: rework for scene-aware compute pipeline
- gfx: rework raw raster pipeline (MRT, AUXILIARY, EXECUTION_MODEL) and VSA
- gfx: refresh shared graph plumbing for incremental scene pipeline
- gfx: add ScenePreprocessorNode — scene_spec to flat draws + arena uploads
- gfx: add SceneFilterNode + FlattenedSceneFilterNode + MergeGeometriesNode
- avnd: split CpuFilter / CpuAnalysis lifecycle into init / initState / release
- avnd: add scene_port concept
- avnd: split GpuNode lifecycle and add scene_port storage helpers
- gfx: extend ShaderProgram for new ISF features
- gfx: refresh Filter / GeometryFilter / TexturePort for new pipeline
- gfx: refresh WindowDevice / Spout / Syphon / WindowCapture
- gfx: refresh GfxContext + window / screen / multiwindow nodes for incremental scene rebuild
- js: gpu node lifecycle rework with deterministic teardown
- wip: many bugfixes across the board
- build: more build fixes
- ci: fixes for older qt versions
- rhi: populate caps
- ci: try windows fixes
- gfx: restore PhongNode, still used by score-vfx-template
- gfx: keep TextureRenderTarget compatible with addons' aggregate init
- gfx: do not include mmsystem.h in CommonUBOs.hpp
- gfx: fix build with Qt < 6.9
- gfx: fix designator order after TextureRenderTarget reorder
- gfx: fix build with Qt 6.4
- gfx: more Qt 6.4 compatibility guards
- 3rdparty: add ufbx submodule
- 3rdparty: add fastgltf submodule
- threedim: refresh primitives, buffer/geometry helpers; rename ObjLoader to GeometryLoader; add ImageLoader / BufferInfo / TextureInfo / TangentUtils
- threedim: add unified AssetLoader on top of FbxParser / GltfParser
- threedim: add Camera, CameraArray, CameraSwitch, Light, Transform3D
- threedim: add ScenePreprocessor (replaces SceneFlattener)
- threedim: add SceneFilter + FlattenedSceneFilter + MergeGeometries
- threedim: add SceneGraphFilter + SceneSwitch + SceneSelector + SceneGroup
- threedim: add SceneDuplicator + SceneFromMeshes + SceneInspector + CreateCollection + SceneResourceRoute
- threedim: add InjectBuffer + InjectTexture for live scene-resource injection
- threedim: add PBRMesh + MaterialOverride + ConfigurePrimitive + Instancer + ShadowCascadeSetup
- threedim: add EnvironmentLoader + improve CubemapLoader / CubemapComposer
- threedim: add AnimationPlayer + Humanoid retargeting + InverseKinematics
- threedim: add TextToMesh + TextToTexture
- threedim: add ExtractBuffer2 + ExtractSceneBuffer + ExtractTexture
- threedim: refresh ModelDisplay + RenderPipeline + Splat for scene pipeline
- wip: many bugfixes across the board
- build: more build fixes
- deps: add zstd dep everywhere
- deps: redirect find_package(zstd) to the vendored targets
- deps: provide simdjson on nix & flatpak
11090c0 to
a0bcfef
Compare
…AUXILIARY, vertex inputs Top-level descriptors (PIPELINE_STATE, MULTIVIEW, EXECUTION_MODEL, EXTENSIONS, CLIP_DISTANCES / CULL_DISTANCES, DEPTH_LAYOUT). New input kinds: uniform_input (UBO INPUTS), per-input sampler_config (WRAP / FILTER / COMPARE / MIPS), audio_sampler_config. Storage / image / cubemap input extensions: PERSISTENT, IS_ARRAY, GENERATE_MIPS, cube/3D textures. Geometry input AUXILIARY: storage + sampled, persistent, is_uniform, depth companion, INDIRECT block. Per-pass: LAYER, Z, FORMAT, PIPELINE_STATE override. OUTPUTS: LAYERS, DEPTH, FORMAT, SAMPLES, CUBEMAP, GENERATE_MIPS, WIDTH/HEIGHT expressions. Vertex inputs: REQUIRED, DEFAULT, SEMANTIC, INTERPOLATION (with auto-flat for int/bool varyings). Bug fixes: mat3/mat4 attribute slot count, TYPES struct emission in BOTH stages, drop incorrect std430 padding heuristic that was breaking RawLight stride.
…remental scene rebuild
- RenderList::onEdgeRemoved: rebind surviving sink samplers to the empty texture before releasing their input render target; the incremental path dropped master's implicit rebind-everything guarantee (UAF on live cable disconnect). - MultiWindowNode::setRenderSize: recreate the offscreen target before the render-list rebuild again (the synchronous rebuild path compiled pipelines against pointers freed right after); marshal the OSC rendersize callback to the Qt thread like the other callbacks. - Crousti GpuNode/GpuComputeNode: recreate the SRB after the srb_touched destroy path; it was only created on first init, so any later resource reallocation bound a null native descriptor set. - GaussianSplat: null the batch after the preprocess and depth-key beginComputePass — SH-preprocess frames double-submitted it. - RawRaster: build the MRT pipeline against the per-iteration render pass in execution-model modes (PerMip/PerCubeFace/PerLayer color) — the N-attachment multisampled MRT descriptor is incompatible with the 1-color 1-sample iteration RTs; fix depth sample-count mismatch in the no-declared-depth MRT branch. - ISF: key persistent-SSBO ping-pong and MRT render-once guards on the RenderList frame counter — update() runs once per sink, so the bool guards double-swapped/double-rendered with more than one output edge; SimpleRenderedISF now also re-applies swapped bindings to every SRB. - Soft-fail instead of throwing on the render thread: batch-pool exhaustion in RenderList::render, empty m_passes after a failed pipeline build in RenderedISFNode::update. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A8dWKnm8kgkuDaMMjapgFT
- ShaderProgram: removeIncludesInComments hung on backslash-escaped quotes (loop never advanced). - Window::exposeEvent: restore the null-swapchain self-heal; teardown runs on the render thread with plain writes, so the GUI thread can observe the inconsistent (flag, pointer) pair mid-teardown. - ModelCameraUBO: pack modelNormal as three vec4-aligned columns as std140 mat3 requires; 9 contiguous floats garbled columns 1-2. - GenericNodeRenderer: key the pipeline cache on the renderpass serializedFormat() (QRhi's documented compatibility key) instead of the rp-desc pointer, which could alias a freed descriptor. - ISF: seed the MULTIVIEW viewProjection UBO with identities; it was never written, so multiview shaders collapsed all vertices to zero. - WindowCapture (pipewire): fix ARGB8888/XBGR8888 fourccs (were the invalid 'RA24'/'BX24'); double-buffer the CPU frame so grab()'s pointer survives the capture thread's next resize; publish a dup of the DMA-BUF fd so imports don't race the requeued buffer's teardown. - Graph::reconcileAllRenderLists: don't dereference a null batch when the update-batch pool is exhausted. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A8dWKnm8kgkuDaMMjapgFT
- ScenePreprocessorNode: cascade_split_distances slot k must hold the FAR plane of cascade k (boundary k+1); copying boundary k shifted every split by one slice and dropped the real far distance at 8 cascades. - CustomMesh: skip sub-meshes whose bindings/attributes differ from meshes[0] — the only layout the pipeline is built for — instead of fetching them through the wrong strides. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A8dWKnm8kgkuDaMMjapgFT
…er to GeometryLoader; add ImageLoader / BufferInfo / TextureInfo / TangentUtils
…eateCollection + SceneResourceRoute
…ncer + ShadowCascadeSetup
Avoids spz fetching a duplicate zstd (macOS) or finding broken SDK configs (MSVC).
fastgltf downloads it at configure time otherwise, impossible in sandboxed builds.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A8dWKnm8kgkuDaMMjapgFT
Run fastgltf::validate() after parsing so accessor/mesh/skin indices from the file can't index out of bounds, and reject index values past the vertex streams before mikktspace tangent generation writes through them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A8dWKnm8kgkuDaMMjapgFT
- CameraArray: allocate one RawCamera/RawTransform slot per face — the fixed-stride arenas reject 6-wide blocks, so every allocation failed and the camera array produced no GPU data at all; reset the published scene_state in release() like Light/Transform3D do. - ShadowCascadeSetup: probe split depths through the projection alone (the probe point is view-space, not world-space); pad the light frustum toward the light instead of past the slice; bake the reverse-Z flip into the light projection to match the depth-pass convention (Greater, clear 0). - ModelDisplay: rebuild passes when an edge connected after init has no pass yet; keep the filter-UBO binding counter in lockstep with the shader generator when a filter's renderer isn't resolved; pack the normal matrix as vec4-aligned std140 columns. - TextToMesh: derive mesh stable_id from a monotonic counter — the recycled heap address could alias a previous mesh and serve stale slabs. - Transform wrapper: pass through shadow_cascades / inject_buffers / inject_textures / time_seconds / variants; they were silently zeroed downstream of any Transform3D. - CubemapLoader: clamp the source image to the device texture-size limit, fail gracefully when the equirect texture can't be created, reject face grids smaller than one pixel. - Parsers: contain glTF external URIs inside the asset directory, cap scene-node recursion depth, bound ufbx allocations, free the ufbx scene on every path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A8dWKnm8kgkuDaMMjapgFT
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.