Formalize material schema and constant layout contract
This commit is contained in:
@@ -888,7 +888,7 @@ BuiltinForwardPipeline::CachedDescriptorSet* BuiltinForwardPipeline::GetOrCreate
|
||||
Core::uint32 setIndex,
|
||||
Core::uint64 objectId,
|
||||
const Resources::Material* material,
|
||||
const PerMaterialConstants& materialConstants,
|
||||
const MaterialConstantPayloadView& materialConstants,
|
||||
RHI::RHIResourceView* textureView) {
|
||||
DynamicDescriptorSetKey key = {};
|
||||
key.passLayout = passLayoutKey;
|
||||
@@ -911,10 +911,13 @@ BuiltinForwardPipeline::CachedDescriptorSet* BuiltinForwardPipeline::GetOrCreate
|
||||
if (!passLayout.material.IsValid() || passLayout.material.set != setIndex) {
|
||||
return nullptr;
|
||||
}
|
||||
if (!materialConstants.IsValid()) {
|
||||
return nullptr;
|
||||
}
|
||||
cachedDescriptorSet.descriptorSet.set->WriteConstant(
|
||||
passLayout.material.binding,
|
||||
&materialConstants,
|
||||
sizeof(materialConstants));
|
||||
materialConstants.data,
|
||||
materialConstants.size);
|
||||
}
|
||||
|
||||
if (setLayout.usesTexture) {
|
||||
@@ -1046,10 +1049,26 @@ bool BuiltinForwardPipeline::DrawVisibleItem(
|
||||
return false;
|
||||
}
|
||||
|
||||
const BuiltinForwardMaterialData materialData = BuildBuiltinForwardMaterialData(material);
|
||||
const PerMaterialConstants materialConstants = {
|
||||
materialData.baseColorFactor
|
||||
};
|
||||
MaterialConstantPayloadView materialConstants = ResolveSchemaMaterialConstantPayload(material);
|
||||
FallbackPerMaterialConstants fallbackMaterialConstants = {};
|
||||
if (!materialConstants.IsValid()) {
|
||||
const BuiltinForwardMaterialData materialData = BuildBuiltinForwardMaterialData(material);
|
||||
fallbackMaterialConstants.baseColorFactor = materialData.baseColorFactor;
|
||||
static const Resources::MaterialConstantFieldDesc kFallbackMaterialConstantField = {
|
||||
Containers::String("baseColorFactor"),
|
||||
Resources::MaterialPropertyType::Float4,
|
||||
0,
|
||||
sizeof(FallbackPerMaterialConstants),
|
||||
sizeof(FallbackPerMaterialConstants)
|
||||
};
|
||||
materialConstants.data = &fallbackMaterialConstants;
|
||||
materialConstants.size = sizeof(fallbackMaterialConstants);
|
||||
materialConstants.layout = {
|
||||
&kFallbackMaterialConstantField,
|
||||
1,
|
||||
sizeof(fallbackMaterialConstants)
|
||||
};
|
||||
}
|
||||
|
||||
if (passLayout->descriptorSetCount > 0) {
|
||||
std::vector<RHI::RHIDescriptorSet*> descriptorSets(passLayout->descriptorSetCount, nullptr);
|
||||
|
||||
Reference in New Issue
Block a user