Add SH shading to gaussian splat renderer
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -135,7 +135,7 @@ private:
|
||||
TEST(BuiltinForwardPipeline_Test, UsesFloat3PositionInputLayoutForStaticMeshVertices) {
|
||||
const InputLayoutDesc inputLayout = BuiltinForwardPipeline::BuildInputLayout();
|
||||
|
||||
ASSERT_EQ(inputLayout.elements.size(), 3u);
|
||||
ASSERT_EQ(inputLayout.elements.size(), 5u);
|
||||
|
||||
const InputElementDesc& position = inputLayout.elements[0];
|
||||
EXPECT_EQ(position.semanticName, "POSITION");
|
||||
@@ -157,6 +157,20 @@ TEST(BuiltinForwardPipeline_Test, UsesFloat3PositionInputLayoutForStaticMeshVert
|
||||
EXPECT_EQ(texcoord.format, static_cast<uint32_t>(Format::R32G32_Float));
|
||||
EXPECT_EQ(texcoord.inputSlot, 0u);
|
||||
EXPECT_EQ(texcoord.alignedByteOffset, static_cast<uint32_t>(offsetof(StaticMeshVertex, uv0)));
|
||||
|
||||
const InputElementDesc& tangent = inputLayout.elements[3];
|
||||
EXPECT_EQ(tangent.semanticName, "TEXCOORD");
|
||||
EXPECT_EQ(tangent.semanticIndex, 1u);
|
||||
EXPECT_EQ(tangent.format, static_cast<uint32_t>(Format::R32G32B32_Float));
|
||||
EXPECT_EQ(tangent.inputSlot, 0u);
|
||||
EXPECT_EQ(tangent.alignedByteOffset, static_cast<uint32_t>(offsetof(StaticMeshVertex, tangent)));
|
||||
|
||||
const InputElementDesc& bitangent = inputLayout.elements[4];
|
||||
EXPECT_EQ(bitangent.semanticName, "TEXCOORD");
|
||||
EXPECT_EQ(bitangent.semanticIndex, 2u);
|
||||
EXPECT_EQ(bitangent.format, static_cast<uint32_t>(Format::R32G32B32_Float));
|
||||
EXPECT_EQ(bitangent.inputSlot, 0u);
|
||||
EXPECT_EQ(bitangent.alignedByteOffset, static_cast<uint32_t>(offsetof(StaticMeshVertex, bitangent)));
|
||||
}
|
||||
|
||||
TEST(RenderSurfacePipelineUtils_Test, ResolvesContiguousSurfaceAttachmentFormatsIntoPipelineDesc) {
|
||||
@@ -1081,7 +1095,7 @@ TEST(BuiltinForwardPipeline_Test, BuiltinGaussianSplatUtilitiesShaderUsesCompute
|
||||
|
||||
const ShaderPass* pass = shader->FindPass("GaussianSplatPrepareOrder");
|
||||
ASSERT_NE(pass, nullptr);
|
||||
EXPECT_EQ(pass->resources.Size(), 7u);
|
||||
EXPECT_EQ(pass->resources.Size(), 8u);
|
||||
|
||||
const ShaderResourceBindingDesc* perObject =
|
||||
shader->FindPassResourceBinding("GaussianSplatPrepareOrder", "PerObjectConstants");
|
||||
@@ -1123,6 +1137,16 @@ TEST(BuiltinForwardPipeline_Test, BuiltinGaussianSplatUtilitiesShaderUsesCompute
|
||||
ResolveBuiltinPassResourceSemantic(*color),
|
||||
BuiltinPassResourceSemantic::GaussianSplatColorBuffer);
|
||||
|
||||
const ShaderResourceBindingDesc* sh =
|
||||
shader->FindPassResourceBinding("GaussianSplatPrepareOrder", "GaussianSplatSH");
|
||||
ASSERT_NE(sh, nullptr);
|
||||
EXPECT_EQ(sh->type, ShaderResourceType::StructuredBuffer);
|
||||
EXPECT_EQ(sh->set, 2u);
|
||||
EXPECT_EQ(sh->binding, 3u);
|
||||
EXPECT_EQ(
|
||||
ResolveBuiltinPassResourceSemantic(*sh),
|
||||
BuiltinPassResourceSemantic::GaussianSplatSHBuffer);
|
||||
|
||||
const ShaderResourceBindingDesc* sortDistances =
|
||||
shader->FindPassResourceBinding("GaussianSplatPrepareOrder", "GaussianSplatSortDistances");
|
||||
ASSERT_NE(sortDistances, nullptr);
|
||||
@@ -1231,11 +1255,12 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLoaded
|
||||
BuiltinPassResourceBindingPlan plan = {};
|
||||
String error;
|
||||
EXPECT_TRUE(TryBuildBuiltinPassResourceBindingPlan(*pass, plan, &error)) << error.CStr();
|
||||
ASSERT_EQ(plan.bindings.Size(), 7u);
|
||||
ASSERT_EQ(plan.bindings.Size(), 8u);
|
||||
EXPECT_TRUE(plan.perObject.IsValid());
|
||||
EXPECT_TRUE(plan.gaussianSplatPositionBuffer.IsValid());
|
||||
EXPECT_TRUE(plan.gaussianSplatOtherBuffer.IsValid());
|
||||
EXPECT_TRUE(plan.gaussianSplatColorBuffer.IsValid());
|
||||
EXPECT_TRUE(plan.gaussianSplatSHBuffer.IsValid());
|
||||
EXPECT_TRUE(plan.gaussianSplatSortDistanceBuffer.IsValid());
|
||||
EXPECT_TRUE(plan.gaussianSplatOrderBuffer.IsValid());
|
||||
EXPECT_TRUE(plan.gaussianSplatViewDataBuffer.IsValid());
|
||||
@@ -1245,6 +1270,8 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLoaded
|
||||
EXPECT_EQ(plan.gaussianSplatOtherBuffer.binding, 1u);
|
||||
EXPECT_EQ(plan.gaussianSplatColorBuffer.set, 2u);
|
||||
EXPECT_EQ(plan.gaussianSplatColorBuffer.binding, 2u);
|
||||
EXPECT_EQ(plan.gaussianSplatSHBuffer.set, 2u);
|
||||
EXPECT_EQ(plan.gaussianSplatSHBuffer.binding, 3u);
|
||||
EXPECT_EQ(plan.gaussianSplatSortDistanceBuffer.set, 4u);
|
||||
EXPECT_EQ(plan.gaussianSplatSortDistanceBuffer.binding, 0u);
|
||||
EXPECT_EQ(plan.gaussianSplatOrderBuffer.set, 4u);
|
||||
@@ -1261,10 +1288,11 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLoaded
|
||||
EXPECT_TRUE(setLayouts[2].usesGaussianSplatPositionBuffer);
|
||||
EXPECT_TRUE(setLayouts[2].usesGaussianSplatOtherBuffer);
|
||||
EXPECT_TRUE(setLayouts[2].usesGaussianSplatColorBuffer);
|
||||
EXPECT_TRUE(setLayouts[2].usesGaussianSplatSHBuffer);
|
||||
EXPECT_TRUE(setLayouts[4].usesGaussianSplatSortDistanceBuffer);
|
||||
EXPECT_TRUE(setLayouts[4].usesGaussianSplatOrderBuffer);
|
||||
EXPECT_TRUE(setLayouts[4].usesGaussianSplatViewDataBuffer);
|
||||
ASSERT_EQ(setLayouts[2].bindings.size(), 3u);
|
||||
ASSERT_EQ(setLayouts[2].bindings.size(), 4u);
|
||||
ASSERT_EQ(setLayouts[4].bindings.size(), 3u);
|
||||
EXPECT_EQ(
|
||||
static_cast<DescriptorType>(setLayouts[2].bindings[0].type),
|
||||
@@ -1275,6 +1303,9 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLoaded
|
||||
EXPECT_EQ(
|
||||
static_cast<DescriptorType>(setLayouts[2].bindings[2].type),
|
||||
DescriptorType::SRV);
|
||||
EXPECT_EQ(
|
||||
static_cast<DescriptorType>(setLayouts[2].bindings[3].type),
|
||||
DescriptorType::SRV);
|
||||
EXPECT_EQ(
|
||||
static_cast<DescriptorType>(setLayouts[4].bindings[0].type),
|
||||
DescriptorType::UAV);
|
||||
@@ -1293,6 +1324,9 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLoaded
|
||||
EXPECT_EQ(
|
||||
setLayouts[2].bindings[2].resourceDimension,
|
||||
ResourceViewDimension::StructuredBuffer);
|
||||
EXPECT_EQ(
|
||||
setLayouts[2].bindings[3].resourceDimension,
|
||||
ResourceViewDimension::StructuredBuffer);
|
||||
EXPECT_EQ(
|
||||
setLayouts[4].bindings[0].resourceDimension,
|
||||
ResourceViewDimension::StructuredBuffer);
|
||||
@@ -1389,9 +1423,10 @@ TEST(BuiltinForwardPipeline_Test, OpenGLPipelineLayoutUsesUnifiedStorageBufferBi
|
||||
EXPECT_EQ(pipelineLayout.GetShaderResourceBindingPoint(2u, 0u), 0u);
|
||||
EXPECT_EQ(pipelineLayout.GetShaderResourceBindingPoint(2u, 1u), 1u);
|
||||
EXPECT_EQ(pipelineLayout.GetShaderResourceBindingPoint(2u, 2u), 2u);
|
||||
EXPECT_EQ(pipelineLayout.GetUnorderedAccessBindingPoint(4u, 0u), 3u);
|
||||
EXPECT_EQ(pipelineLayout.GetUnorderedAccessBindingPoint(4u, 1u), 4u);
|
||||
EXPECT_EQ(pipelineLayout.GetUnorderedAccessBindingPoint(4u, 2u), 5u);
|
||||
EXPECT_EQ(pipelineLayout.GetShaderResourceBindingPoint(2u, 3u), 3u);
|
||||
EXPECT_EQ(pipelineLayout.GetUnorderedAccessBindingPoint(4u, 0u), 4u);
|
||||
EXPECT_EQ(pipelineLayout.GetUnorderedAccessBindingPoint(4u, 1u), 5u);
|
||||
EXPECT_EQ(pipelineLayout.GetUnorderedAccessBindingPoint(4u, 2u), 6u);
|
||||
|
||||
pipelineLayout.Shutdown();
|
||||
delete shader;
|
||||
@@ -1440,6 +1475,10 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesGaussianSplatU
|
||||
d3d12Source,
|
||||
"StructuredBuffer<float4> GaussianSplatColor",
|
||||
"register(t2)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"StructuredBuffer<GaussianSplatSHData> GaussianSplatSH",
|
||||
"register(t3)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"RWStructuredBuffer<uint> GaussianSplatSortDistances",
|
||||
@@ -1484,6 +1523,10 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesGaussianSplatU
|
||||
vulkanSource,
|
||||
"StructuredBuffer<float4> GaussianSplatColor",
|
||||
"register(t2, space2)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"StructuredBuffer<GaussianSplatSHData> GaussianSplatSH",
|
||||
"register(t3, space2)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"RWStructuredBuffer<uint> GaussianSplatSortDistances",
|
||||
@@ -1550,13 +1593,16 @@ TEST(BuiltinForwardPipeline_Test, OpenGLRuntimeTranspilesGaussianSplatUtilitiesC
|
||||
glslSource.find("layout(binding = 2, std430) readonly buffer GaussianSplatColor"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
glslSource.find("layout(binding = 3, std430) buffer type_RWStructuredBuffer_uint"),
|
||||
glslSource.find("layout(binding = 3, std430) readonly buffer type_StructuredBuffer_GaussianSplatSHData"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
glslSource.find("layout(binding = 4, std430) buffer GaussianSplatOrderBuffer"),
|
||||
glslSource.find("layout(binding = 4, std430) buffer type_RWStructuredBuffer_uint"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
glslSource.find("layout(binding = 5, std430) buffer type_RWStructuredBuffer_GaussianSplatViewData"),
|
||||
glslSource.find("layout(binding = 5, std430) buffer GaussianSplatOrderBuffer"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
glslSource.find("layout(binding = 6, std430) buffer type_RWStructuredBuffer_GaussianSplatViewData"),
|
||||
std::string::npos);
|
||||
|
||||
delete shader;
|
||||
|
||||
Reference in New Issue
Block a user