Integrating github/staging through commit ab87ed9

This commit is contained in:
alexpete
2021-04-09 11:27:37 -07:00
parent ae62a97894
commit 1044dc3da1
1582 changed files with 29374 additions and 519051 deletions
@@ -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;