Add Unity-style buffer shader resource support
This commit is contained in:
@@ -369,7 +369,12 @@ inline RHI::DescriptorType ToBuiltinPassDescriptorType(Resources::ShaderResource
|
||||
return RHI::DescriptorType::CBV;
|
||||
case Resources::ShaderResourceType::Texture2D:
|
||||
case Resources::ShaderResourceType::TextureCube:
|
||||
case Resources::ShaderResourceType::StructuredBuffer:
|
||||
case Resources::ShaderResourceType::RawBuffer:
|
||||
return RHI::DescriptorType::SRV;
|
||||
case Resources::ShaderResourceType::RWStructuredBuffer:
|
||||
case Resources::ShaderResourceType::RWRawBuffer:
|
||||
return RHI::DescriptorType::UAV;
|
||||
case Resources::ShaderResourceType::Sampler:
|
||||
return RHI::DescriptorType::Sampler;
|
||||
default:
|
||||
@@ -377,6 +382,23 @@ inline RHI::DescriptorType ToBuiltinPassDescriptorType(Resources::ShaderResource
|
||||
}
|
||||
}
|
||||
|
||||
inline RHI::ResourceViewDimension ToBuiltinPassResourceDimension(Resources::ShaderResourceType type) {
|
||||
switch (type) {
|
||||
case Resources::ShaderResourceType::Texture2D:
|
||||
return RHI::ResourceViewDimension::Texture2D;
|
||||
case Resources::ShaderResourceType::TextureCube:
|
||||
return RHI::ResourceViewDimension::TextureCube;
|
||||
case Resources::ShaderResourceType::StructuredBuffer:
|
||||
case Resources::ShaderResourceType::RWStructuredBuffer:
|
||||
return RHI::ResourceViewDimension::StructuredBuffer;
|
||||
case Resources::ShaderResourceType::RawBuffer:
|
||||
case Resources::ShaderResourceType::RWRawBuffer:
|
||||
return RHI::ResourceViewDimension::RawBuffer;
|
||||
default:
|
||||
return RHI::ResourceViewDimension::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
inline RHI::DescriptorHeapType ResolveBuiltinPassDescriptorHeapType(Resources::ShaderResourceType type) {
|
||||
return type == Resources::ShaderResourceType::Sampler
|
||||
? RHI::DescriptorHeapType::Sampler
|
||||
@@ -480,6 +502,7 @@ inline bool TryBuildBuiltinPassSetLayouts(
|
||||
layoutBinding.binding = binding.location.binding;
|
||||
layoutBinding.type = static_cast<Core::uint32>(descriptorType);
|
||||
layoutBinding.count = 1;
|
||||
layoutBinding.resourceDimension = ToBuiltinPassResourceDimension(binding.resourceType);
|
||||
setLayout.bindings.push_back(layoutBinding);
|
||||
|
||||
switch (binding.semantic) {
|
||||
|
||||
@@ -210,6 +210,14 @@ inline const char* ShaderResourceTypeToString(Resources::ShaderResourceType type
|
||||
return "TextureCube";
|
||||
case Resources::ShaderResourceType::Sampler:
|
||||
return "Sampler";
|
||||
case Resources::ShaderResourceType::StructuredBuffer:
|
||||
return "StructuredBuffer";
|
||||
case Resources::ShaderResourceType::RawBuffer:
|
||||
return "RawBuffer";
|
||||
case Resources::ShaderResourceType::RWStructuredBuffer:
|
||||
return "RWStructuredBuffer";
|
||||
case Resources::ShaderResourceType::RWRawBuffer:
|
||||
return "RWRawBuffer";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
@@ -45,7 +45,11 @@ enum class ShaderResourceType : Core::uint8 {
|
||||
ConstantBuffer = 0,
|
||||
Texture2D,
|
||||
TextureCube,
|
||||
Sampler
|
||||
Sampler,
|
||||
StructuredBuffer,
|
||||
RawBuffer,
|
||||
RWStructuredBuffer,
|
||||
RWRawBuffer
|
||||
};
|
||||
|
||||
struct ShaderUniform {
|
||||
|
||||
Reference in New Issue
Block a user