Skip to content

3DGS PR 3: compute-infra: GPU compute shader infrastructure (Vulkan/Metal/GL interop)#7487

Open
ssheorey wants to merge 4 commits into
mainfrom
ss/3dgs-3-compute-infra
Open

3DGS PR 3: compute-infra: GPU compute shader infrastructure (Vulkan/Metal/GL interop)#7487
ssheorey wants to merge 4 commits into
mainfrom
ss/3dgs-3-compute-infra

Conversation

@ssheorey
Copy link
Copy Markdown
Member

@ssheorey ssheorey commented May 6, 2026

Type

  • Bug fix (non-breaking change which fixes an issue): Fixes #
  • New feature (non-breaking change which adds functionality). Resolves #
  • Breaking change (fix or feature that would cause existing functionality to not work as expected) Resolves #

Motivation and Context

Checklist:

  • I have run python util/check_style.py --apply to apply Open3D code style
    to my code.
  • This PR changes Open3D behavior or adds new functionality.
    • Both C++ (Doxygen) and Python (Sphinx / Google style) documentation is
      updated accordingly.
    • I have added or updated C++ and / or Python unit tests OR included test
      results
      (e.g. screenshots or numbers) here.
  • I will follow up and update the code if CI fails.
  • For fork PRs, I have selected Allow edits from maintainers.

Description

Third-party additions:

  • vkmemalloc: Vulkan Memory Allocator (VMA) for device-local buffer allocation
  • vulkan_headers: Khronos Vulkan headers
  • find_dependencies.cmake: add Vulkan + vkmemalloc package discovery
  • cmake/Open3DAddComputeShaders.cmake: compile GLSL .comp -> SPIR-V (glslc)
    and cross-compile to MSL (spirv-cross) for Apple; installs to resources/

cpp/open3d/CMakeLists.txt: link OpenGL::EGL and X11 for the GL shared-context
backend on Linux/Windows.

New source files (wired into the build in the next PR):

  • ComputeGPU.h: ComputeProgramId enum, GaussianSplatGpuContext abstract base,
    GpuComputeFrame/GpuComputePass RAII helpers
  • ComputeGPUVulkan: headless Vulkan instance + device, SSBO/UBO binding,
    command buffer lifecycle, fence-based geometry sync
  • ComputeGPUMetal.mm: Metal GaussianSplatGpuContext implementation
  • GaussianSplatOpenGLContext: GLFW-owned GL 4.6 helper window for shared-context
    creation (GLX on Linux, WGL on Windows) before Engine::create()
  • GaussianSplatVulkanInteropContext: exports VkImage memory to OpenGL via
    GL_EXT_memory_object for zero-copy Filament-Vulkan texture sharing

@update-docs
Copy link
Copy Markdown

update-docs Bot commented May 6, 2026

Thanks for submitting this pull request! The maintainers of this repository would appreciate if you could update the CHANGELOG.md based on your changes.

@ssheorey ssheorey requested a review from benjaminum May 6, 2026 04:38
ssheorey added 3 commits May 5, 2026 21:45
…ling

- Add AGENTS.md with coding and PR review guidelines
- GLEW upgraded to v2.3.1 (adds GL_EXT_memory_object, GL_EXT_semaphore for
  Vulkan-OpenGL interop needed by Gaussian splatting)
- Filament version bump for shared-context platform header support
- Style tooling: check_style.py and check_cpp_style.cmake updated for .comp
  (GLSL compute) and .mm (Objective-C++) file handling
… transforms

- t::PointCloud: IsGaussianSplat(), Rotate/Scale/Translate/Transform for GS
  attributes (positions, quaternion rotations, linear scales, DC/SH coefficients)
- Ivanic-Ruedenberg SH rotation algorithm for f_rest attributes (degrees 1-3)
- Point inversion parity handling for odd-degree SH blocks
- PLY IO (legacy + tensor): read/write GS attributes (pos, rot, scale,
  opacity, f_dc, f_rest); exponentiate log-scales from PLY files at load time
- SPLAT file IO: linear scales, packed quaternions, rgb8 DC color
- FileFormatIO: register .splat extension
- MaterialRecord: add GS-specific render flags (sh_degree, antialias, etc.)
- Renderer/View: virtual interface additions for GS output queries
…erop)

Third-party additions:
- vkmemalloc: Vulkan Memory Allocator (VMA) for device-local buffer allocation
- vulkan_headers: Khronos Vulkan headers
- find_dependencies.cmake: add Vulkan + vkmemalloc package discovery
- cmake/Open3DAddComputeShaders.cmake: compile GLSL .comp -> SPIR-V (glslc)
  and cross-compile to MSL (spirv-cross) for Apple; installs to resources/

cpp/open3d/CMakeLists.txt: link OpenGL::EGL and X11 for the GL shared-context
backend on Linux/Windows.

New source files (wired into the build in the next PR):
- ComputeGPU.h: ComputeProgramId enum, GaussianSplatGpuContext abstract base,
  GpuComputeFrame/GpuComputePass RAII helpers
- ComputeGPUVulkan: headless Vulkan instance + device, SSBO/UBO binding,
  command buffer lifecycle, fence-based geometry sync
- ComputeGPUMetal.mm: Metal GaussianSplatGpuContext implementation
- GaussianSplatOpenGLContext: GLFW-owned GL 4.6 helper window for shared-context
  creation (GLX on Linux, WGL on Windows) before Engine::create()
- GaussianSplatVulkanInteropContext: exports VkImage memory to OpenGL via
  GL_EXT_memory_object for zero-copy Filament-Vulkan texture sharing
@ssheorey ssheorey force-pushed the ss/3dgs-3-compute-infra branch from 6b969dd to e8544b5 Compare May 6, 2026 04:45
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