Integrating github/staging through commit ab87ed9
This commit is contained in:
@@ -22,19 +22,25 @@ namespace AZ
|
||||
if (SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context))
|
||||
{
|
||||
serializeContext->Class<ShaderResourceGroupLayout>()
|
||||
->Version(4)
|
||||
->Version(6)
|
||||
->Field("m_staticSamplers", &ShaderResourceGroupLayout::m_staticSamplers)
|
||||
->Field("m_inputsForBuffers", &ShaderResourceGroupLayout::m_inputsForBuffers)
|
||||
->Field("m_inputsForImages", &ShaderResourceGroupLayout::m_inputsForImages)
|
||||
->Field("m_inputsForBufferUnboundedArrays", &ShaderResourceGroupLayout::m_inputsForBufferUnboundedArrays)
|
||||
->Field("m_inputsForImageUnboundedArrays", &ShaderResourceGroupLayout::m_inputsForImageUnboundedArrays)
|
||||
->Field("m_inputsForSamplers", &ShaderResourceGroupLayout::m_inputsForSamplers)
|
||||
->Field("m_intervalsForBuffers", &ShaderResourceGroupLayout::m_intervalsForBuffers)
|
||||
->Field("m_intervalsForImages", &ShaderResourceGroupLayout::m_intervalsForImages)
|
||||
->Field("m_intervalsForSamplers", &ShaderResourceGroupLayout::m_intervalsForSamplers)
|
||||
->Field("m_groupSizeForBuffers", &ShaderResourceGroupLayout::m_groupSizeForBuffers)
|
||||
->Field("m_groupSizeForImages", &ShaderResourceGroupLayout::m_groupSizeForImages)
|
||||
->Field("m_groupSizeForBufferUnboundedArrays", &ShaderResourceGroupLayout::m_groupSizeForBufferUnboundedArrays)
|
||||
->Field("m_groupSizeForImageUnboundedArrays", &ShaderResourceGroupLayout::m_groupSizeForImageUnboundedArrays)
|
||||
->Field("m_groupSizeForSamplers", &ShaderResourceGroupLayout::m_groupSizeForSamplers)
|
||||
->Field("m_idReflectionForBuffers", &ShaderResourceGroupLayout::m_idReflectionForBuffers)
|
||||
->Field("m_idReflectionForImages", &ShaderResourceGroupLayout::m_idReflectionForImages)
|
||||
->Field("m_idReflectionForBufferUnboundedArrays", &ShaderResourceGroupLayout::m_idReflectionForBufferUnboundedArrays)
|
||||
->Field("m_idReflectionForImageUnboundedArrays", &ShaderResourceGroupLayout::m_idReflectionForImageUnboundedArrays)
|
||||
->Field("m_idReflectionForSamplers", &ShaderResourceGroupLayout::m_idReflectionForSamplers)
|
||||
->Field("m_constantsDataLayout", &ShaderResourceGroupLayout::m_constantsDataLayout)
|
||||
->Field("m_bindingSlot", &ShaderResourceGroupLayout::m_bindingSlot)
|
||||
@@ -46,6 +52,8 @@ namespace AZ
|
||||
|
||||
IdReflectionMapForBuffers::Reflect(context);
|
||||
IdReflectionMapForImages::Reflect(context);
|
||||
IdReflectionMapForBufferUnboundedArrays::Reflect(context);
|
||||
IdReflectionMapForImageUnboundedArrays::Reflect(context);
|
||||
IdReflectionMapForSamplers::Reflect(context);
|
||||
}
|
||||
|
||||
@@ -131,6 +139,16 @@ namespace AZ
|
||||
return ValidateAccess(inputIndex, arrayIndex, m_inputsForSamplers.size(), "Sampler");
|
||||
}
|
||||
|
||||
bool ShaderResourceGroupLayout::ValidateAccess(RHI::ShaderInputBufferUnboundedArrayIndex inputIndex) const
|
||||
{
|
||||
return ValidateAccess(inputIndex, m_inputsForBufferUnboundedArrays.size(), "BufferUnboundedArray");
|
||||
}
|
||||
|
||||
bool ShaderResourceGroupLayout::ValidateAccess(RHI::ShaderInputImageUnboundedArrayIndex inputIndex) const
|
||||
{
|
||||
return ValidateAccess(inputIndex, m_inputsForImageUnboundedArrays.size(), "ImageUnboundedArray");
|
||||
}
|
||||
|
||||
ShaderResourceGroupLayout::ShaderResourceGroupLayout()
|
||||
: m_constantsDataLayout(ConstantsLayout::Create())
|
||||
{
|
||||
@@ -150,6 +168,8 @@ namespace AZ
|
||||
|
||||
m_groupSizeForBuffers = 0;
|
||||
m_groupSizeForImages = 0;
|
||||
m_groupSizeForBufferUnboundedArrays = 0;
|
||||
m_groupSizeForImageUnboundedArrays = 0;
|
||||
m_groupSizeForSamplers = 0;
|
||||
|
||||
m_idReflectionForBuffers.Clear();
|
||||
@@ -198,6 +218,34 @@ namespace AZ
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename NameIdReflectionMapT, typename ShaderInputDescriptorT, typename ShaderInputIndexT>
|
||||
bool ShaderResourceGroupLayout::FinalizeUnboundedArrayShaderInputGroup(
|
||||
const AZStd::vector<ShaderInputDescriptorT>& shaderInputDescriptors,
|
||||
NameIdReflectionMapT& nameIdReflectionMap,
|
||||
uint32_t& groupSize)
|
||||
{
|
||||
nameIdReflectionMap.Reserve(shaderInputDescriptors.size());
|
||||
|
||||
uint32_t currentGroupSize = 0;
|
||||
uint32_t shaderInputIndex = 0;
|
||||
for (const ShaderInputDescriptorT& shaderInput : shaderInputDescriptors)
|
||||
{
|
||||
const ShaderInputIndexT inputIndex(shaderInputIndex);
|
||||
if (!nameIdReflectionMap.Insert(shaderInput.m_name, inputIndex))
|
||||
{
|
||||
Clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
++currentGroupSize;
|
||||
++shaderInputIndex;
|
||||
}
|
||||
|
||||
groupSize = currentGroupSize;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ShaderResourceGroupLayout::Finalize()
|
||||
{
|
||||
if (!ValidateFinalizeState(ValidateFinalizeStateExpect::NotFinalized))
|
||||
@@ -235,6 +283,20 @@ namespace AZ
|
||||
return false;
|
||||
}
|
||||
|
||||
// Build buffer unbounded array group
|
||||
if (!FinalizeUnboundedArrayShaderInputGroup<IdReflectionMapForBufferUnboundedArrays, ShaderInputBufferUnboundedArrayDescriptor, ShaderInputBufferUnboundedArrayIndex>(
|
||||
m_inputsForBufferUnboundedArrays, m_idReflectionForBufferUnboundedArrays, m_groupSizeForBufferUnboundedArrays))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Build image unbounded array group
|
||||
if (!FinalizeUnboundedArrayShaderInputGroup<IdReflectionMapForImageUnboundedArrays, ShaderInputImageUnboundedArrayDescriptor, ShaderInputImageUnboundedArrayIndex>(
|
||||
m_inputsForImageUnboundedArrays, m_idReflectionForImageUnboundedArrays, m_groupSizeForImageUnboundedArrays))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Build sampler group
|
||||
if (!FinalizeShaderInputGroup<IdReflectionMapForSamplers, ShaderInputSamplerDescriptor, ShaderInputSamplerIndex>(
|
||||
m_inputsForSamplers, m_intervalsForSamplers, m_idReflectionForSamplers, m_groupSizeForSamplers))
|
||||
@@ -278,6 +340,16 @@ namespace AZ
|
||||
hash = shaderInputImage.GetHash(hash);
|
||||
}
|
||||
|
||||
for (const ShaderInputBufferUnboundedArrayDescriptor& shaderInputBufferUnboundedArray : m_inputsForBufferUnboundedArrays)
|
||||
{
|
||||
hash = shaderInputBufferUnboundedArray.GetHash(hash);
|
||||
}
|
||||
|
||||
for (const ShaderInputImageUnboundedArrayDescriptor& shaderInputImageUnboundedArray : m_inputsForImageUnboundedArrays)
|
||||
{
|
||||
hash = shaderInputImageUnboundedArray.GetHash(hash);
|
||||
}
|
||||
|
||||
for (const ShaderInputSamplerDescriptor& shaderInputSampler : m_inputsForSamplers)
|
||||
{
|
||||
hash = shaderInputSampler.GetHash(hash);
|
||||
@@ -337,6 +409,16 @@ namespace AZ
|
||||
m_inputsForImages.push_back(image);
|
||||
}
|
||||
|
||||
void ShaderResourceGroupLayout::AddShaderInput(const ShaderInputBufferUnboundedArrayDescriptor& bufferUnboundedArray)
|
||||
{
|
||||
m_inputsForBufferUnboundedArrays.push_back(bufferUnboundedArray);
|
||||
}
|
||||
|
||||
void ShaderResourceGroupLayout::AddShaderInput(const ShaderInputImageUnboundedArrayDescriptor& imageUnboundedArray)
|
||||
{
|
||||
m_inputsForImageUnboundedArrays.push_back(imageUnboundedArray);
|
||||
}
|
||||
|
||||
void ShaderResourceGroupLayout::AddShaderInput(const ShaderInputSamplerDescriptor& sampler)
|
||||
{
|
||||
m_inputsForSamplers.push_back(sampler);
|
||||
@@ -377,6 +459,16 @@ namespace AZ
|
||||
return m_constantsDataLayout->FindShaderInputIndex(name);
|
||||
}
|
||||
|
||||
ShaderInputBufferUnboundedArrayIndex ShaderResourceGroupLayout::FindShaderInputBufferUnboundedArrayIndex(const Name& name) const
|
||||
{
|
||||
return m_idReflectionForBufferUnboundedArrays.Find(name);
|
||||
}
|
||||
|
||||
ShaderInputImageUnboundedArrayIndex ShaderResourceGroupLayout::FindShaderInputImageUnboundedArrayIndex(const Name& name) const
|
||||
{
|
||||
return m_idReflectionForImageUnboundedArrays.Find(name);
|
||||
}
|
||||
|
||||
const ShaderInputBufferDescriptor& ShaderResourceGroupLayout::GetShaderInput(ShaderInputBufferIndex index) const
|
||||
{
|
||||
return m_inputsForBuffers[index.GetIndex()];
|
||||
@@ -387,6 +479,16 @@ namespace AZ
|
||||
return m_inputsForImages[index.GetIndex()];
|
||||
}
|
||||
|
||||
const ShaderInputBufferUnboundedArrayDescriptor& ShaderResourceGroupLayout::GetShaderInput(ShaderInputBufferUnboundedArrayIndex index) const
|
||||
{
|
||||
return m_inputsForBufferUnboundedArrays[index.GetIndex()];
|
||||
}
|
||||
|
||||
const ShaderInputImageUnboundedArrayDescriptor& ShaderResourceGroupLayout::GetShaderInput(ShaderInputImageUnboundedArrayIndex index) const
|
||||
{
|
||||
return m_inputsForImageUnboundedArrays[index.GetIndex()];
|
||||
}
|
||||
|
||||
const ShaderInputSamplerDescriptor& ShaderResourceGroupLayout::GetShaderInput(ShaderInputSamplerIndex index) const
|
||||
{
|
||||
return m_inputsForSamplers[index.GetIndex()];
|
||||
@@ -417,6 +519,16 @@ namespace AZ
|
||||
return m_constantsDataLayout->GetShaderInputList();
|
||||
}
|
||||
|
||||
AZStd::array_view<ShaderInputBufferUnboundedArrayDescriptor> ShaderResourceGroupLayout::GetShaderInputListForBufferUnboundedArrays() const
|
||||
{
|
||||
return m_inputsForBufferUnboundedArrays;
|
||||
}
|
||||
|
||||
AZStd::array_view<ShaderInputImageUnboundedArrayDescriptor> ShaderResourceGroupLayout::GetShaderInputListForImageUnboundedArrays() const
|
||||
{
|
||||
return m_inputsForImageUnboundedArrays;
|
||||
}
|
||||
|
||||
Interval ShaderResourceGroupLayout::GetGroupInterval(ShaderInputBufferIndex inputIndex) const
|
||||
{
|
||||
return m_intervalsForBuffers[inputIndex.GetIndex()];
|
||||
@@ -447,6 +559,16 @@ namespace AZ
|
||||
return m_groupSizeForImages;
|
||||
}
|
||||
|
||||
uint32_t ShaderResourceGroupLayout::GetGroupSizeForBufferUnboundedArrays() const
|
||||
{
|
||||
return m_groupSizeForBufferUnboundedArrays;
|
||||
}
|
||||
|
||||
uint32_t ShaderResourceGroupLayout::GetGroupSizeForImageUnboundedArrays() const
|
||||
{
|
||||
return m_groupSizeForImageUnboundedArrays;
|
||||
}
|
||||
|
||||
uint32_t ShaderResourceGroupLayout::GetGroupSizeForSamplers() const
|
||||
{
|
||||
return m_groupSizeForSamplers;
|
||||
|
||||
Reference in New Issue
Block a user