Normalize builtin forward shader bindings
This commit is contained in:
@@ -59,37 +59,37 @@ TEST(BuiltinForwardPipeline_Test, BuiltinForwardShaderDeclaresExplicitForwardRes
|
||||
|
||||
EXPECT_EQ(pass->resources[0].semantic, "PerObject");
|
||||
EXPECT_EQ(pass->resources[0].type, ShaderResourceType::ConstantBuffer);
|
||||
EXPECT_EQ(pass->resources[0].set, 1u);
|
||||
EXPECT_EQ(pass->resources[0].set, 0u);
|
||||
EXPECT_EQ(pass->resources[0].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[1].semantic, "Material");
|
||||
EXPECT_EQ(pass->resources[1].type, ShaderResourceType::ConstantBuffer);
|
||||
EXPECT_EQ(pass->resources[1].set, 2u);
|
||||
EXPECT_EQ(pass->resources[1].set, 1u);
|
||||
EXPECT_EQ(pass->resources[1].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[2].semantic, "BaseColorTexture");
|
||||
EXPECT_EQ(pass->resources[2].type, ShaderResourceType::Texture2D);
|
||||
EXPECT_EQ(pass->resources[2].set, 3u);
|
||||
EXPECT_EQ(pass->resources[2].set, 2u);
|
||||
EXPECT_EQ(pass->resources[2].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[3].semantic, "LinearClampSampler");
|
||||
EXPECT_EQ(pass->resources[3].type, ShaderResourceType::Sampler);
|
||||
EXPECT_EQ(pass->resources[3].set, 4u);
|
||||
EXPECT_EQ(pass->resources[3].set, 3u);
|
||||
EXPECT_EQ(pass->resources[3].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[4].semantic, "ShadowReceiver");
|
||||
EXPECT_EQ(pass->resources[4].type, ShaderResourceType::ConstantBuffer);
|
||||
EXPECT_EQ(pass->resources[4].set, 5u);
|
||||
EXPECT_EQ(pass->resources[4].set, 4u);
|
||||
EXPECT_EQ(pass->resources[4].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[5].semantic, "ShadowMapTexture");
|
||||
EXPECT_EQ(pass->resources[5].type, ShaderResourceType::Texture2D);
|
||||
EXPECT_EQ(pass->resources[5].set, 6u);
|
||||
EXPECT_EQ(pass->resources[5].set, 5u);
|
||||
EXPECT_EQ(pass->resources[5].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[6].semantic, "ShadowMapSampler");
|
||||
EXPECT_EQ(pass->resources[6].type, ShaderResourceType::Sampler);
|
||||
EXPECT_EQ(pass->resources[6].set, 7u);
|
||||
EXPECT_EQ(pass->resources[6].set, 6u);
|
||||
EXPECT_EQ(pass->resources[6].binding, 0u);
|
||||
|
||||
delete shader;
|
||||
@@ -110,22 +110,22 @@ TEST(BuiltinForwardPipeline_Test, BuiltinUnlitShaderDeclaresExplicitSurfaceResou
|
||||
|
||||
EXPECT_EQ(pass->resources[0].semantic, "PerObject");
|
||||
EXPECT_EQ(pass->resources[0].type, ShaderResourceType::ConstantBuffer);
|
||||
EXPECT_EQ(pass->resources[0].set, 1u);
|
||||
EXPECT_EQ(pass->resources[0].set, 0u);
|
||||
EXPECT_EQ(pass->resources[0].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[1].semantic, "Material");
|
||||
EXPECT_EQ(pass->resources[1].type, ShaderResourceType::ConstantBuffer);
|
||||
EXPECT_EQ(pass->resources[1].set, 2u);
|
||||
EXPECT_EQ(pass->resources[1].set, 1u);
|
||||
EXPECT_EQ(pass->resources[1].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[2].semantic, "BaseColorTexture");
|
||||
EXPECT_EQ(pass->resources[2].type, ShaderResourceType::Texture2D);
|
||||
EXPECT_EQ(pass->resources[2].set, 3u);
|
||||
EXPECT_EQ(pass->resources[2].set, 2u);
|
||||
EXPECT_EQ(pass->resources[2].binding, 0u);
|
||||
|
||||
EXPECT_EQ(pass->resources[3].semantic, "LinearClampSampler");
|
||||
EXPECT_EQ(pass->resources[3].type, ShaderResourceType::Sampler);
|
||||
EXPECT_EQ(pass->resources[3].set, 4u);
|
||||
EXPECT_EQ(pass->resources[3].set, 3u);
|
||||
EXPECT_EQ(pass->resources[3].binding, 0u);
|
||||
|
||||
delete shader;
|
||||
@@ -153,7 +153,7 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromExplic
|
||||
EXPECT_TRUE(plan.linearClampSampler.IsValid());
|
||||
EXPECT_TRUE(plan.shadowMapTexture.IsValid());
|
||||
EXPECT_TRUE(plan.shadowMapSampler.IsValid());
|
||||
EXPECT_EQ(plan.firstDescriptorSet, 1u);
|
||||
EXPECT_EQ(plan.firstDescriptorSet, 0u);
|
||||
EXPECT_EQ(plan.descriptorSetCount, 7u);
|
||||
EXPECT_TRUE(plan.usesConstantBuffers);
|
||||
EXPECT_TRUE(plan.usesTextures);
|
||||
@@ -181,7 +181,7 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromExplic
|
||||
EXPECT_TRUE(plan.material.IsValid());
|
||||
EXPECT_TRUE(plan.baseColorTexture.IsValid());
|
||||
EXPECT_TRUE(plan.linearClampSampler.IsValid());
|
||||
EXPECT_EQ(plan.firstDescriptorSet, 1u);
|
||||
EXPECT_EQ(plan.firstDescriptorSet, 0u);
|
||||
EXPECT_EQ(plan.descriptorSetCount, 4u);
|
||||
EXPECT_TRUE(plan.usesConstantBuffers);
|
||||
EXPECT_TRUE(plan.usesTextures);
|
||||
@@ -190,51 +190,88 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromExplic
|
||||
delete shader;
|
||||
}
|
||||
|
||||
TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLegacyFallbackResources) {
|
||||
const Array<ShaderResourceBindingDesc> bindings = BuildLegacyBuiltinForwardPassResourceBindings();
|
||||
ASSERT_EQ(bindings.Size(), 4u);
|
||||
TEST(BuiltinForwardPipeline_Test, UsesNormalizedExplicitSetIndicesForSurfaceResources) {
|
||||
ShaderLoader loader;
|
||||
LoadResult result = loader.Load(GetBuiltinForwardLitShaderPath());
|
||||
ASSERT_TRUE(result);
|
||||
ASSERT_NE(result.resource, nullptr);
|
||||
|
||||
Shader* shader = static_cast<Shader*>(result.resource);
|
||||
ASSERT_NE(shader, nullptr);
|
||||
|
||||
const ShaderPass* pass = shader->FindPass("ForwardLit");
|
||||
ASSERT_NE(pass, nullptr);
|
||||
ASSERT_EQ(pass->resources.Size(), 7u);
|
||||
|
||||
BuiltinPassResourceBindingPlan plan = {};
|
||||
String error;
|
||||
EXPECT_TRUE(TryBuildBuiltinPassResourceBindingPlan(bindings, plan, &error)) << error.CStr();
|
||||
ASSERT_EQ(plan.bindings.Size(), 4u);
|
||||
EXPECT_EQ(plan.perObject.set, 1u);
|
||||
EXPECT_EQ(plan.material.set, 2u);
|
||||
EXPECT_EQ(plan.baseColorTexture.set, 3u);
|
||||
EXPECT_EQ(plan.linearClampSampler.set, 4u);
|
||||
EXPECT_TRUE(TryBuildBuiltinPassResourceBindingPlan(pass->resources, plan, &error)) << error.CStr();
|
||||
ASSERT_EQ(plan.bindings.Size(), 7u);
|
||||
EXPECT_EQ(plan.perObject.set, 0u);
|
||||
EXPECT_EQ(plan.material.set, 1u);
|
||||
EXPECT_EQ(plan.baseColorTexture.set, 2u);
|
||||
EXPECT_EQ(plan.linearClampSampler.set, 3u);
|
||||
EXPECT_EQ(plan.shadowReceiver.set, 4u);
|
||||
EXPECT_EQ(plan.shadowMapTexture.set, 5u);
|
||||
EXPECT_EQ(plan.shadowMapSampler.set, 6u);
|
||||
|
||||
delete shader;
|
||||
}
|
||||
|
||||
TEST(BuiltinPassLayout_Test, BuildsSharedSetLayoutsFromLegacyForwardResources) {
|
||||
const Array<ShaderResourceBindingDesc> bindings = BuildLegacyBuiltinForwardPassResourceBindings();
|
||||
TEST(BuiltinPassLayout_Test, BuildsSharedSetLayoutsFromExplicitForwardResources) {
|
||||
ShaderLoader loader;
|
||||
LoadResult result = loader.Load(GetBuiltinForwardLitShaderPath());
|
||||
ASSERT_TRUE(result);
|
||||
ASSERT_NE(result.resource, nullptr);
|
||||
|
||||
Shader* shader = static_cast<Shader*>(result.resource);
|
||||
ASSERT_NE(shader, nullptr);
|
||||
|
||||
const ShaderPass* pass = shader->FindPass("ForwardLit");
|
||||
ASSERT_NE(pass, nullptr);
|
||||
ASSERT_EQ(pass->resources.Size(), 7u);
|
||||
|
||||
BuiltinPassResourceBindingPlan plan = {};
|
||||
String error;
|
||||
ASSERT_TRUE(TryBuildBuiltinPassResourceBindingPlan(bindings, plan, &error)) << error.CStr();
|
||||
ASSERT_TRUE(TryBuildBuiltinPassResourceBindingPlan(pass->resources, plan, &error)) << error.CStr();
|
||||
|
||||
std::vector<BuiltinPassSetLayoutMetadata> setLayouts;
|
||||
ASSERT_TRUE(TryBuildBuiltinPassSetLayouts(plan, setLayouts, &error)) << error.CStr();
|
||||
ASSERT_EQ(setLayouts.size(), 5u);
|
||||
ASSERT_EQ(setLayouts.size(), 7u);
|
||||
|
||||
EXPECT_EQ(setLayouts[0].layout.bindingCount, 0u);
|
||||
EXPECT_EQ(setLayouts[0].layout.bindingCount, 1u);
|
||||
EXPECT_FALSE(setLayouts[0].shaderVisible);
|
||||
EXPECT_TRUE(setLayouts[0].usesPerObject);
|
||||
EXPECT_FALSE(setLayouts[0].usesMaterial);
|
||||
|
||||
EXPECT_EQ(setLayouts[1].layout.bindingCount, 1u);
|
||||
EXPECT_TRUE(setLayouts[1].usesMaterial);
|
||||
EXPECT_FALSE(setLayouts[1].shaderVisible);
|
||||
EXPECT_TRUE(setLayouts[1].usesPerObject);
|
||||
EXPECT_FALSE(setLayouts[1].usesMaterial);
|
||||
|
||||
EXPECT_EQ(setLayouts[2].layout.bindingCount, 1u);
|
||||
EXPECT_TRUE(setLayouts[2].usesMaterial);
|
||||
EXPECT_FALSE(setLayouts[2].shaderVisible);
|
||||
EXPECT_TRUE(setLayouts[2].usesTexture);
|
||||
EXPECT_TRUE(setLayouts[2].shaderVisible);
|
||||
EXPECT_EQ(setLayouts[2].heapType, DescriptorHeapType::CBV_SRV_UAV);
|
||||
|
||||
EXPECT_EQ(setLayouts[3].layout.bindingCount, 1u);
|
||||
EXPECT_TRUE(setLayouts[3].usesTexture);
|
||||
EXPECT_TRUE(setLayouts[3].usesSampler);
|
||||
EXPECT_TRUE(setLayouts[3].shaderVisible);
|
||||
EXPECT_EQ(setLayouts[3].heapType, DescriptorHeapType::CBV_SRV_UAV);
|
||||
EXPECT_EQ(setLayouts[3].heapType, DescriptorHeapType::Sampler);
|
||||
|
||||
EXPECT_EQ(setLayouts[4].layout.bindingCount, 1u);
|
||||
EXPECT_TRUE(setLayouts[4].usesSampler);
|
||||
EXPECT_TRUE(setLayouts[4].shaderVisible);
|
||||
EXPECT_EQ(setLayouts[4].heapType, DescriptorHeapType::Sampler);
|
||||
EXPECT_TRUE(setLayouts[4].usesShadowReceiver);
|
||||
EXPECT_FALSE(setLayouts[4].shaderVisible);
|
||||
|
||||
EXPECT_EQ(setLayouts[5].layout.bindingCount, 1u);
|
||||
EXPECT_TRUE(setLayouts[5].usesTexture);
|
||||
EXPECT_TRUE(setLayouts[5].shaderVisible);
|
||||
|
||||
EXPECT_EQ(setLayouts[6].layout.bindingCount, 1u);
|
||||
EXPECT_TRUE(setLayouts[6].usesSampler);
|
||||
EXPECT_TRUE(setLayouts[6].shaderVisible);
|
||||
EXPECT_EQ(setLayouts[6].heapType, DescriptorHeapType::Sampler);
|
||||
|
||||
delete shader;
|
||||
}
|
||||
|
||||
TEST(BuiltinDepthStylePass_Test, BuiltinDepthOnlyShaderDeclaresExplicitPerObjectResourceContract) {
|
||||
|
||||
Reference in New Issue
Block a user