From 3bd0039ee97c3180c5b6c70aea3e82b225f56b73 Mon Sep 17 00:00:00 2001 From: bridgewaterrobbie Date: Tue, 6 May 2025 13:22:33 -0400 Subject: [PATCH] Minimal labels implementation for descriptorset layout --- filament/backend/include/backend/DriverEnums.h | 2 ++ filament/src/details/Material.cpp | 17 +++++++++++++++++ libs/filabridge/src/DescriptorSets.cpp | 15 ++++++++++----- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/filament/backend/include/backend/DriverEnums.h b/filament/backend/include/backend/DriverEnums.h index d8b281000c..1ef79fbf9f 100644 --- a/filament/backend/include/backend/DriverEnums.h +++ b/filament/backend/include/backend/DriverEnums.h @@ -39,6 +39,7 @@ #include #include +#include /** * Types and enums used by filament's driver. @@ -1139,6 +1140,7 @@ struct ExternalSamplerDatum { static_assert(sizeof(ExternalSamplerDatum) == 12); struct DescriptorSetLayout { + std::variant label; utils::FixedCapacityVector bindings; // TODO: uncomment when needed diff --git a/filament/src/details/Material.cpp b/filament/src/details/Material.cpp index 421ab9f637..a5aeef915f 100644 --- a/filament/src/details/Material.cpp +++ b/filament/src/details/Material.cpp @@ -1140,6 +1140,7 @@ void FMaterial::precacheDepthVariants(FEngine& engine) { void FMaterial::processDescriptorSets(FEngine& engine, MaterialParser const* const parser) { UTILS_UNUSED_IN_RELEASE bool success; + success = parser->getDescriptorBindings(&mProgramDescriptorBindings); assert_invariant(success); @@ -1147,6 +1148,22 @@ void FMaterial::processDescriptorSets(FEngine& engine, MaterialParser const* con success = parser->getDescriptorSetLayout(&descriptorSetLayout); assert_invariant(success); + // Setup Labels for debugging + utils::CString namestr; + utils::StaticString perViewStr = "_perView"; + utils::StaticString singleStr = "_single"; + + parser->getName(&namestr); + + utils::CString singleLabel(namestr.c_str(), namestr.length() + singleStr.length()); + memccpy(singleLabel.c_str() + namestr.length(), singleStr.c_str(), '\0', singleStr.length()); + + utils::CString perViewLabel(namestr.c_str(), namestr.length() + perViewStr.length()); + memccpy(perViewLabel.c_str() + namestr.length(), perViewStr.c_str(), '\0', perViewStr.length()); + + descriptorSetLayout[0].label = namestr; + descriptorSetLayout[1].label = perViewLabel; + mDescriptorSetLayout = { engine.getDescriptorSetLayoutFactory(), engine.getDriverApi(), std::move(descriptorSetLayout[0]) }; diff --git a/libs/filabridge/src/DescriptorSets.cpp b/libs/filabridge/src/DescriptorSets.cpp index b313fcc056..d593bc76b1 100644 --- a/libs/filabridge/src/DescriptorSets.cpp +++ b/libs/filabridge/src/DescriptorSets.cpp @@ -33,11 +33,13 @@ namespace filament::descriptor_sets { using namespace backend; -static DescriptorSetLayout const postProcessDescriptorSetLayout{{ +static DescriptorSetLayout const postProcessDescriptorSetLayout{ + utils::StaticString("postProcess"),{ { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::FRAME_UNIFORMS }, }}; -static DescriptorSetLayout const depthVariantDescriptorSetLayout{{ +static DescriptorSetLayout const depthVariantDescriptorSetLayout{ + utils::StaticString("depthVariant"),{ { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::FRAME_UNIFORMS }, }}; @@ -46,14 +48,16 @@ static DescriptorSetLayout const depthVariantDescriptorSetLayout{{ // dedicated SSR vertex shader), which uses perViewDescriptorSetLayout. // This means that PerViewBindingPoints::SHADOWS must be in the layout even though it's not used // by the SSR variant. -static DescriptorSetLayout const ssrVariantDescriptorSetLayout{{ +static DescriptorSetLayout const ssrVariantDescriptorSetLayout{ + utils::StaticString("ssrVariant"),{ { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::FRAME_UNIFORMS }, { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::SHADOWS }, { DescriptorType::SAMPLER, ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::STRUCTURE }, { DescriptorType::SAMPLER, ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::SSR }, }}; -static DescriptorSetLayout perViewDescriptorSetLayout = {{ +static DescriptorSetLayout perViewDescriptorSetLayout = { + utils::StaticString("perView"),{ { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::FRAME_UNIFORMS }, { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::SHADOWS }, { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::LIGHTS }, @@ -68,7 +72,8 @@ static DescriptorSetLayout perViewDescriptorSetLayout = {{ { DescriptorType::SAMPLER, ShaderStageFlags::FRAGMENT, +PerViewBindingPoints::FOG }, }}; -static DescriptorSetLayout perRenderableDescriptorSetLayout = {{ +static DescriptorSetLayout perRenderableDescriptorSetLayout = { + utils::StaticString("perRenderable"),{ { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerRenderableBindingPoints::OBJECT_UNIFORMS, DescriptorFlags::DYNAMIC_OFFSET }, { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerRenderableBindingPoints::BONES_UNIFORMS, DescriptorFlags::DYNAMIC_OFFSET }, { DescriptorType::UNIFORM_BUFFER, ShaderStageFlags::VERTEX | ShaderStageFlags::FRAGMENT, +PerRenderableBindingPoints::MORPHING_UNIFORMS },