Add GPU sorting for gaussian splat rendering

This commit is contained in:
2026-04-11 06:09:53 +08:00
parent 39632e1a04
commit 5200fca82f
7 changed files with 529 additions and 49 deletions

View File

@@ -211,7 +211,8 @@ private:
enum class PassLayoutUsage : Core::uint8 {
Draw,
PrepareOrder
PrepareOrder,
BitonicSort
};
bool EnsureInitialized(const RenderContext& context);
@@ -224,6 +225,7 @@ private:
const RenderSceneData& sceneData,
const Resources::Material* material) const;
ResolvedShaderPass ResolvePrepareOrderShaderPass(const RenderSceneData& sceneData) const;
ResolvedShaderPass ResolveBitonicSortShaderPass(const RenderSceneData& sceneData) const;
PassResourceLayout* GetOrCreatePassResourceLayout(
const RenderContext& context,
const ResolvedShaderPass& resolvedShaderPass,
@@ -235,7 +237,9 @@ private:
const Resources::Material* material);
RHI::RHIPipelineState* GetOrCreateComputePipelineState(
const RenderContext& context,
const RenderSceneData& sceneData);
const ResolvedShaderPass& resolvedShaderPass,
PassLayoutUsage usage,
const Resources::ShaderKeywordSet& keywordSet);
bool CreateOwnedDescriptorSet(
const BuiltinPassSetLayoutMetadata& setLayout,
OwnedDescriptorSet& descriptorSet);
@@ -259,6 +263,10 @@ private:
const RenderContext& context,
const RenderSceneData& sceneData,
const VisibleGaussianSplatItem& visibleGaussianSplat);
bool SortVisibleGaussianSplat(
const RenderContext& context,
const RenderSceneData& sceneData,
const VisibleGaussianSplatItem& visibleGaussianSplat);
bool DrawVisibleGaussianSplat(
const RenderContext& context,
const RenderSurface& surface,