31namespace visualization {
60 "gaussian_radix_sort_histograms",
61 "gaussian_radix_sort_scatter",
62 "gaussian_compute_dispatch_args",
63 "gaussian_depth_merge",
67 "kGsShaderNames must match ComputeProgramId::kCount");
84 "RadixSortParams must be 16 bytes to match GLSL layout");
141 const char* label =
nullptr) = 0;
145 std::size_t new_size,
146 const char* label =
nullptr) = 0;
151 const char* label =
nullptr) {
155 std::size_t new_size,
156 const char* label =
nullptr) {
176 virtual void BindSSBO(std::uint32_t binding, std::uintptr_t buf) = 0;
177 virtual void BindUBO(std::uint32_t binding, std::uintptr_t buf) = 0;
181 std::size_t range_size) = 0;
186 std::uint32_t groups_y,
187 std::uint32_t groups_z) = 0;
189 std::size_t byte_offset) = 0;
201 const char* label =
nullptr) = 0;
206 const char* label =
nullptr) = 0;
212 const char* label =
nullptr) = 0;
220 std::vector<float>& out) {
234 std::vector<std::uint16_t>& out) {
252 std::uint32_t
height) = 0;
296 : ctx_(ctx), kind_(kind) {
342 const char* label =
nullptr)
343 : ctx_(ctx), label_(label) {
359 [[nodiscard]]
bool ok()
const {
return ok_; }
364 if (ok_) ctx_.
BindUBO(binding, buf);
377 if (ok_) ctx_.
BindSSBO(binding, buf);
400 void Dispatch(std::uint32_t gx, std::uint32_t gy, std::uint32_t gz) {
418#if !defined(__APPLE__)
421#if defined(__APPLE__)
422[[nodiscard]] std::unique_ptr<GaussianSplatGpuContext>
423CreateComputeGpuContextMetal(std::uintptr_t device_handle,
424 std::uintptr_t command_queue_handle);
Definition ComputeGPU.h:132
virtual void DestroyBuffer(std::uintptr_t buf)=0
virtual void EndCompositePass()
Definition ComputeGPU.h:267
virtual std::uintptr_t ResizeBuffer(std::uintptr_t buf, std::size_t new_size, const char *label=nullptr)=0
Returns a valid handle (may replace buf when the API reallocates).
virtual void DestroyTexture(std::uintptr_t tex)=0
virtual void BeginCompositePass()
Definition ComputeGPU.h:266
virtual ~GaussianSplatGpuContext()=default
virtual void BindUBORange(std::uint32_t binding, std::uintptr_t buf, std::size_t offset, std::size_t range_size)=0
virtual std::uintptr_t ResizeTexture2DR32F(std::uintptr_t tex, std::uint32_t width, std::uint32_t height, const char *label=nullptr)=0
virtual void PopDebugGroup()
Definition ComputeGPU.h:282
virtual bool DownloadBuffer(std::uintptr_t buf, void *dst, std::size_t size, std::size_t offset)
Definition ComputeGPU.h:163
virtual void BindSamplerTexture(std::uint32_t unit, std::uintptr_t tex, std::uint32_t width, std::uint32_t height)=0
virtual void UploadBuffer(std::uintptr_t buf, const void *data, std::size_t size, std::size_t offset)=0
virtual void BindSSBO(std::uint32_t binding, std::uintptr_t buf)=0
virtual void Dispatch(std::uint32_t groups_x, std::uint32_t groups_y, std::uint32_t groups_z)=0
virtual std::uintptr_t ResizePrivateBuffer(std::uintptr_t buf, std::size_t new_size, const char *label=nullptr)
Definition ComputeGPU.h:154
virtual void ClearBufferUInt32Zero(std::uintptr_t buf)=0
virtual bool DownloadTextureR32F(std::uintptr_t tex, std::uint32_t width, std::uint32_t height, std::vector< float > &out)
Definition ComputeGPU.h:217
virtual std::uintptr_t CreateTexture2DR32F(std::uint32_t width, std::uint32_t height, const char *label=nullptr)=0
virtual void BindUBO(std::uint32_t binding, std::uintptr_t buf)=0
virtual void WaitForGeometryPass()
Definition ComputeGPU.h:277
virtual bool EnsureProgramsLoaded()=0
Load all compute programs (lazy, idempotent).
virtual void DispatchIndirect(std::uintptr_t indirect_buf, std::size_t byte_offset)=0
virtual std::uintptr_t CreateBuffer(std::size_t size, const char *label=nullptr)=0
virtual void FullBarrier()=0
virtual std::uint32_t GetMaxComputeWorkGroupCount() const
Definition ComputeGPU.h:196
virtual void BindImage(std::uint32_t binding, std::uintptr_t tex, std::uint32_t width, std::uint32_t height, ImageFormat fmt)=0
Bind a write image at the given unit with the specified format.
virtual void FinishGpuWork()=0
virtual void BeginGeometryPass()
Definition ComputeGPU.h:264
virtual void EndGeometryPass()
Definition ComputeGPU.h:265
virtual std::uintptr_t ResizeTexture2DR16UI(std::uintptr_t tex, std::uint32_t width, std::uint32_t height, const char *label=nullptr)=0
Create or resize an R16UI texture for merged-depth CPU readback.
virtual bool DownloadTextureR16UI(std::uintptr_t tex, std::uint32_t width, std::uint32_t height, std::vector< std::uint16_t > &out)
Definition ComputeGPU.h:231
virtual void UseProgram(ComputeProgramId id)=0
virtual std::uintptr_t CreatePrivateBuffer(std::size_t size, const char *label=nullptr)
Definition ComputeGPU.h:150
virtual void PushDebugGroup(const char *)
Definition ComputeGPU.h:281
virtual bool WasLastSubmitSuccessful() const
Returns whether the most recently submitted GPU work succeeded.
Definition ComputeGPU.h:260
Definition ComputeGPU.h:291
GpuComputeFrame(const GpuComputeFrame &)=delete
~GpuComputeFrame()
Definition ComputeGPU.h:303
GpuComputeFrame(GaussianSplatGpuContext &ctx, Kind kind)
Definition ComputeGPU.h:295
Kind
Definition ComputeGPU.h:293
@ kComposite
Definition ComputeGPU.h:293
@ kGeometry
Definition ComputeGPU.h:293
GpuComputeFrame & operator=(const GpuComputeFrame &)=delete
void End()
Explicitly end the frame early (dtor becomes a no-op).
Definition ComputeGPU.h:309
Definition ComputeGPU.h:338
GpuComputePass(const GpuComputePass &)=delete
GpuComputePass & UBORange(std::uint32_t binding, std::uintptr_t buf, std::size_t offset, std::size_t size)
Definition ComputeGPU.h:368
void DispatchIndirect(std::uintptr_t buf, std::size_t byte_offset)
Definition ComputeGPU.h:404
~GpuComputePass()
Definition ComputeGPU.h:351
GpuComputePass & operator=(const GpuComputePass &)=delete
GpuComputePass & UBO(std::uint32_t binding, std::uintptr_t buf)
Definition ComputeGPU.h:363
GpuComputePass & SSBO(std::uint32_t binding, std::uintptr_t buf)
Definition ComputeGPU.h:376
GpuComputePass(GaussianSplatGpuContext &ctx, ComputeProgramId pid, const char *label=nullptr)
Definition ComputeGPU.h:340
void Dispatch(std::uint32_t gx, std::uint32_t gy, std::uint32_t gz)
Definition ComputeGPU.h:400
GpuComputePass & Sampler(std::uint32_t unit, std::uintptr_t tex, std::uint32_t w, std::uint32_t h)
Definition ComputeGPU.h:390
bool ok() const
Returns false only when EnsureProgramsLoaded() failed (device error).
Definition ComputeGPU.h:359
GpuComputePass & Image(std::uint32_t binding, std::uintptr_t tex, std::uint32_t w, std::uint32_t h, ImageFormat fmt)
Definition ComputeGPU.h:381
ImageFormat
Format selector for GaussianSplatGpuContext::BindImage().
Definition ComputeGPU.h:53
ComputeProgramId
Definition ComputeGPU.h:40
constexpr const char * kGsShaderNames[]
Definition ComputeGPU.h:57
Definition PinholeCameraIntrinsic.cpp:16
Per-view GPU resource handles (opaque: GL name or MTLBuffer/MTLTexture).
Definition ComputeGPU.h:87
std::uintptr_t sh_buf
Definition ComputeGPU.h:93
std::uintptr_t projected_composite_buf
Definition ComputeGPU.h:96
std::uint32_t cached_splat_count
Definition ComputeGPU.h:120
std::uintptr_t scales_buf
Definition ComputeGPU.h:90
std::uintptr_t dc_opacity_buf
Definition ComputeGPU.h:92
std::uintptr_t dispatch_args_buf
Definition ComputeGPU.h:102
std::uintptr_t sort_keys_buf[2]
Definition ComputeGPU.h:105
std::uintptr_t composite_depth_tex
GS composite depth output (image binding 1); not the shared scene depth.
Definition ComputeGPU.h:112
std::uintptr_t tile_counts_buf
Definition ComputeGPU.h:99
std::uintptr_t mask_buf
Bit-packed per-splat visibility mask. Bound at binding 15.
Definition ComputeGPU.h:110
std::uintptr_t rotations_buf
Definition ComputeGPU.h:91
std::uint64_t cached_scene_id
Definition ComputeGPU.h:119
std::uintptr_t positions_buf
Definition ComputeGPU.h:89
std::uintptr_t radix_params_buf
Definition ComputeGPU.h:108
std::uint32_t warned_gpu_error_flags
Definition ComputeGPU.h:123
std::uintptr_t merged_depth_u16_tex
Definition ComputeGPU.h:115
std::uintptr_t sort_values_buf[2]
Definition ComputeGPU.h:106
std::uintptr_t view_params_buf
Definition ComputeGPU.h:88
std::uintptr_t counters_buf
GPU error/diagnostic counters (total_entries, error_flags, ...).
Definition ComputeGPU.h:101
std::uintptr_t histogram_buf
Definition ComputeGPU.h:107
int final_sort_src
Definition ComputeGPU.h:118
Definition ComputeGPU.h:77
std::uint32_t g_num_elements
Definition ComputeGPU.h:78
std::uint32_t g_shift
Definition ComputeGPU.h:79
std::uint32_t g_num_workgroups
Definition ComputeGPU.h:80
std::uint32_t g_num_blocks_per_workgroup
Definition ComputeGPU.h:81