Improve builtin pass binding diagnostics
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine {
|
||||
@@ -244,6 +245,71 @@ inline BuiltinPassResourceSemantic ResolveBuiltinPassResourceSemantic(
|
||||
return BuiltinPassResourceSemantic::Unknown;
|
||||
}
|
||||
|
||||
inline const char* BuiltinPassResourceSemanticToString(BuiltinPassResourceSemantic semantic) {
|
||||
switch (semantic) {
|
||||
case BuiltinPassResourceSemantic::PerObject:
|
||||
return "PerObject";
|
||||
case BuiltinPassResourceSemantic::Material:
|
||||
return "Material";
|
||||
case BuiltinPassResourceSemantic::Lighting:
|
||||
return "Lighting";
|
||||
case BuiltinPassResourceSemantic::ShadowReceiver:
|
||||
return "ShadowReceiver";
|
||||
case BuiltinPassResourceSemantic::BaseColorTexture:
|
||||
return "BaseColorTexture";
|
||||
case BuiltinPassResourceSemantic::ShadowMapTexture:
|
||||
return "ShadowMapTexture";
|
||||
case BuiltinPassResourceSemantic::LinearClampSampler:
|
||||
return "LinearClampSampler";
|
||||
case BuiltinPassResourceSemantic::ShadowMapSampler:
|
||||
return "ShadowMapSampler";
|
||||
case BuiltinPassResourceSemantic::Unknown:
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
inline const char* ShaderResourceTypeToString(Resources::ShaderResourceType type) {
|
||||
switch (type) {
|
||||
case Resources::ShaderResourceType::ConstantBuffer:
|
||||
return "ConstantBuffer";
|
||||
case Resources::ShaderResourceType::Texture2D:
|
||||
return "Texture2D";
|
||||
case Resources::ShaderResourceType::TextureCube:
|
||||
return "TextureCube";
|
||||
case Resources::ShaderResourceType::Sampler:
|
||||
return "Sampler";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
inline Containers::String DescribeShaderResourceBinding(
|
||||
const Resources::ShaderResourceBindingDesc& binding) {
|
||||
const BuiltinPassResourceSemantic resolvedSemantic = ResolveBuiltinPassResourceSemantic(binding);
|
||||
return Containers::String("name=") + binding.name +
|
||||
", semantic=" + binding.semantic +
|
||||
", resolvedSemantic=" + Containers::String(BuiltinPassResourceSemanticToString(resolvedSemantic)) +
|
||||
", type=" + Containers::String(ShaderResourceTypeToString(binding.type)) +
|
||||
", set=" + Containers::String(std::to_string(binding.set).c_str()) +
|
||||
", binding=" + Containers::String(std::to_string(binding.binding).c_str());
|
||||
}
|
||||
|
||||
inline Containers::String DescribeShaderResourceBindings(
|
||||
const Containers::Array<Resources::ShaderResourceBindingDesc>& bindings) {
|
||||
Containers::String description;
|
||||
for (size_t bindingIndex = 0; bindingIndex < bindings.Size(); ++bindingIndex) {
|
||||
if (!description.Empty()) {
|
||||
description += " | ";
|
||||
}
|
||||
|
||||
description += "[" + Containers::String(std::to_string(bindingIndex).c_str()) + "] ";
|
||||
description += DescribeShaderResourceBinding(bindings[bindingIndex]);
|
||||
}
|
||||
|
||||
return description;
|
||||
}
|
||||
|
||||
inline bool IsBuiltinPassResourceTypeCompatible(
|
||||
BuiltinPassResourceSemantic semantic,
|
||||
Resources::ShaderResourceType type) {
|
||||
|
||||
Reference in New Issue
Block a user