[ATOM-15472] Shader Build Pipeline: Remove Deprecated Files And Funct… (#1079)

* [ATOM-15472] Shader Build Pipeline: Remove Deprecated Files And Functions That
Predate The Shader Supervariants

These are the essential impactful changes as a result of deprecating the
ShaderResourceGroupAsset.

* Addressed feedback by @moudgils. Better comments in header files.

* More updates related with deprecation of ShaderResourceGroupAsset

* Deleted the temporary version 2 classes.

* Updated version of the shader asset builders.

* Updated version of all the shader related classes impacted
by the Supervariant concept and deprecation of ShaderResourceGroupAsset

* Changes to *.pass and DGI, Reflections and RayTracing.

* changes to material related assets

* changes to core lights

* Changes to auxgeom/dynamic draw.

* changes to decals, lyshine, imguipass

* changes to RPI Pass classes

* Shader for SceneSrg, ViewSrg and ForwardPass Srgs.

* changes to mesh, skinned mesh, Morphtarget.

* Fixes to RayTracingPass.cpp & now allow empty srg in shaders.

* Updated Atom_RPI.Tests

* Simplified InstanceDatabase by removing AddHandler

------------------------------------------------------------------------------------
* Updated DiffuseGI precompiled shaders.
Added RayTracingSceneSrg and RayTracingMaterialSrg shader asset.
Updated ShaderAssetCreator::Clone to handle the supervariant when processing root variants.
Co-authored-by: Doug McDiarmid <dmcdiar@amazon.com>
------------------------------------------------------------------------------------

* Changed semantics for some PassSrg to SRG_PerPass_WithFallback.

AuxGeom/FixedShapeProcessor.cpp requires SRG_PerDraw on ObjectSrg.

Removed names of SceneSrg and ViewSrg from RPISystemDescriptor.cpp

* Moved ShaderLib/Atom/Features/DummyEntryFunctions.azsli
To  Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/DummyEntryFunctions.azsli

Removed redundant checking for finalization in
ShaderResourceGroupLayout.cpp

* Fixed race condition bug for Shader::FindOrCreate.
InstanceDatabase<>::CreateInstance() needs to be atomic
for instance creation and initialization.

Added optional InstanceHandler::CreateFunctionWithParams to accomodate
to the needs of Instances that need more than an asset reference
to be able to be created an initialzed.

Removed ShaderResourceGroup::FindOrCreate() only ::Create is available
now.

* Renamed scene_and_view_srgs.* as SceneAndViewSrgs.*

Changed GetAzslFileOfOrigin for GetUniqueId

* Fixed unit tests.

* Reverted the serialization name of m_uniqueId back to
"m_azslFileOfOrigin" so precompiled shaders don't fail
in layout comparison.

* Fixed AtomCore.Tests
Removed non-applicable test. InstanceDatabase.AddHandler() is not
available anymore.

* The Null rhi is re-enabled for shader compilation.

Signed-off-by: garrieta <garrieta@amazon.com>
This commit is contained in:
galibzon
2021-06-11 07:48:23 -05:00
committed by GitHub
parent 1435982330
commit cc615a8f32
253 changed files with 3389 additions and 65834 deletions
@@ -38,7 +38,7 @@ namespace AZ
void ShaderVariantAsyncLoader::ThreadServiceLoop()
{
AZStd::unordered_set<ShaderVariantAsyncLoader::PairOfShaderAssetAndShaderVariantId> newShaderVariantPendingRequests;
AZStd::unordered_set<ShaderVariantAsyncLoader::TupleShaderAssetAndShaderVariantId> newShaderVariantPendingRequests;
AZStd::unordered_set<Data::AssetId> shaderVariantTreePendingRequests;
AZStd::unordered_set<Data::AssetId> shaderVariantPendingRequests;
while (true)
@@ -70,8 +70,8 @@ namespace AZ
AZStd::for_each(
m_newShaderVariantPendingRequests.begin(), m_newShaderVariantPendingRequests.end(),
[&](const ShaderVariantAsyncLoader::PairOfShaderAssetAndShaderVariantId& pair) {
newShaderVariantPendingRequests.insert(pair);
[&](const ShaderVariantAsyncLoader::TupleShaderAssetAndShaderVariantId& tuple) {
newShaderVariantPendingRequests.insert(tuple);
});
m_newShaderVariantPendingRequests.clear();
@@ -91,36 +91,36 @@ namespace AZ
}
// Time to work hard.
auto pairItor = newShaderVariantPendingRequests.begin();
while (pairItor != newShaderVariantPendingRequests.end())
auto tupleItor = newShaderVariantPendingRequests.begin();
while (tupleItor != newShaderVariantPendingRequests.end())
{
auto shaderVariantTreeAsset = GetShaderVariantTreeAsset(pairItor->m_shaderAsset.GetId());
auto shaderVariantTreeAsset = GetShaderVariantTreeAsset(tupleItor->m_shaderAsset.GetId());
if (shaderVariantTreeAsset)
{
AZ_Assert(shaderVariantTreeAsset.IsReady(), "shaderVariantTreeAsset is not ready!");
// Get the stableId from the variant tree.
auto searchResult = shaderVariantTreeAsset->FindVariantStableId(
pairItor->m_shaderAsset->GetShaderOptionGroupLayout(), pairItor->m_shaderVariantId);
tupleItor->m_shaderAsset->GetShaderOptionGroupLayout(), tupleItor->m_shaderVariantId);
if (searchResult.IsRoot())
{
pairItor = newShaderVariantPendingRequests.erase(pairItor);
tupleItor = newShaderVariantPendingRequests.erase(tupleItor);
continue;
}
// Record the request for metrics.
ShaderMetricsSystem::Get()->RequestShaderVariant(pairItor->m_shaderAsset.Get(), pairItor->m_shaderVariantId, searchResult);
ShaderMetricsSystem::Get()->RequestShaderVariant(tupleItor->m_shaderAsset.Get(), tupleItor->m_shaderVariantId, searchResult);
uint32_t shaderVariantProductSubId =
ShaderVariantAsset::MakeAssetProductSubId(RHI::Factory::Get().GetAPIUniqueIndex(), searchResult.GetStableId());
uint32_t shaderVariantProductSubId = ShaderVariantAsset::MakeAssetProductSubId(
RHI::Factory::Get().GetAPIUniqueIndex(), tupleItor->m_supervariantIndex.GetIndex(), searchResult.GetStableId());
Data::AssetId shaderVariantAssetId(shaderVariantTreeAsset.GetId().m_guid, shaderVariantProductSubId);
shaderVariantPendingRequests.insert(shaderVariantAssetId);
pairItor = newShaderVariantPendingRequests.erase(pairItor);
tupleItor = newShaderVariantPendingRequests.erase(tupleItor);
continue;
}
// If we are here the shaderVariantTreeAsset is not ready, but maybe it is already queued for loading,
// but we try to queue it anyways.
QueueShaderVariantTreeForLoading(*pairItor, shaderVariantTreePendingRequests);
pairItor++;
QueueShaderVariantTreeForLoading(*tupleItor, shaderVariantTreePendingRequests);
tupleItor++;
}
@@ -181,7 +181,7 @@ namespace AZ
///////////////////////////////////////////////////////////////////
// IShaderVariantFinder overrides
bool ShaderVariantAsyncLoader::QueueLoadShaderVariantAssetByVariantId(
Data::Asset<ShaderAsset> shaderAsset, const ShaderVariantId& shaderVariantId)
Data::Asset<ShaderAsset> shaderAsset, const ShaderVariantId& shaderVariantId, SupervariantIndex supervariantIndex)
{
if (m_isServiceShutdown.load())
{
@@ -190,15 +190,15 @@ namespace AZ
{
AZStd::unique_lock<decltype(m_mutex)> lock(m_mutex);
PairOfShaderAssetAndShaderVariantId pair = {shaderAsset, shaderVariantId};
m_newShaderVariantPendingRequests.push_back(pair);
TupleShaderAssetAndShaderVariantId tuple = {shaderAsset, shaderVariantId, supervariantIndex};
m_newShaderVariantPendingRequests.push_back(tuple);
}
m_workCondition.notify_one();
return true;
}
bool ShaderVariantAsyncLoader::QueueLoadShaderVariantAsset(
const Data::AssetId& shaderVariantTreeAssetId, ShaderVariantStableId variantStableId)
const Data::AssetId& shaderVariantTreeAssetId, ShaderVariantStableId variantStableId, SupervariantIndex supervariantIndex)
{
if (m_isServiceShutdown.load())
{
@@ -208,7 +208,7 @@ namespace AZ
AZ_Assert(variantStableId != RootShaderVariantStableId, "Root Variants Are Found inside ShaderAssets");
uint32_t shaderVariantProductSubId =
ShaderVariantAsset::MakeAssetProductSubId(RHI::Factory::Get().GetAPIUniqueIndex(), variantStableId);
ShaderVariantAsset::MakeAssetProductSubId(RHI::Factory::Get().GetAPIUniqueIndex(), supervariantIndex.GetIndex(), variantStableId);
Data::AssetId shaderVariantAssetId(shaderVariantTreeAssetId.m_guid, shaderVariantProductSubId);
{
AZStd::unique_lock<decltype(m_mutex)> lock(m_mutex);
@@ -234,7 +234,7 @@ namespace AZ
}
Data::Asset<ShaderVariantAsset> ShaderVariantAsyncLoader::GetShaderVariantAssetByVariantId(
Data::Asset<ShaderAsset> shaderAsset, const ShaderVariantId& shaderVariantId)
Data::Asset<ShaderAsset> shaderAsset, const ShaderVariantId& shaderVariantId, SupervariantIndex supervariantIndex)
{
Data::Asset<ShaderVariantTreeAsset> shaderVariantTreeAsset = GetShaderVariantTreeAsset(shaderAsset.GetId());
if (!shaderVariantTreeAsset)
@@ -253,11 +253,11 @@ namespace AZ
// Record the request for metrics.
ShaderMetricsSystem::Get()->RequestShaderVariant(shaderAsset.Get(), shaderVariantId, searchResult);
return GetShaderVariantAsset(shaderVariantTreeAsset.GetId(), searchResult.GetStableId());
return GetShaderVariantAsset(shaderVariantTreeAsset.GetId(), searchResult.GetStableId(), supervariantIndex);
}
Data::Asset<ShaderVariantAsset> ShaderVariantAsyncLoader::GetShaderVariantAssetByStableId(
Data::Asset<ShaderAsset> shaderAsset, ShaderVariantStableId shaderVariantStableId)
Data::Asset<ShaderAsset> shaderAsset, ShaderVariantStableId shaderVariantStableId, SupervariantIndex supervariantIndex)
{
AZ_Assert(shaderVariantStableId != RootShaderVariantStableId, "Root Variants Are Found inside ShaderAssets");
@@ -267,7 +267,7 @@ namespace AZ
return {};
}
return GetShaderVariantAsset(shaderVariantTreeAsset.GetId(), shaderVariantStableId);
return GetShaderVariantAsset(shaderVariantTreeAsset.GetId(), shaderVariantStableId, supervariantIndex);
}
Data::Asset<ShaderVariantTreeAsset> ShaderVariantAsyncLoader::GetShaderVariantTreeAsset(const Data::AssetId& shaderAssetId)
@@ -292,11 +292,13 @@ namespace AZ
return {};
}
Data::Asset<ShaderVariantAsset> ShaderVariantAsyncLoader::GetShaderVariantAsset(const Data::AssetId& shaderVariantTreeAssetId, ShaderVariantStableId variantStableId)
Data::Asset<ShaderVariantAsset> ShaderVariantAsyncLoader::GetShaderVariantAsset(
const Data::AssetId& shaderVariantTreeAssetId, ShaderVariantStableId variantStableId, SupervariantIndex supervariantIndex)
{
AZ_Assert(variantStableId != RootShaderVariantStableId, "Root Variants Are Found inside ShaderAssets");
uint32_t shaderVariantProductSubId = ShaderVariantAsset::MakeAssetProductSubId(RHI::Factory::Get().GetAPIUniqueIndex(), variantStableId);
uint32_t shaderVariantProductSubId =
ShaderVariantAsset::MakeAssetProductSubId(RHI::Factory::Get().GetAPIUniqueIndex(), supervariantIndex.GetIndex(), variantStableId);
Data::AssetId shaderVariantAssetId(shaderVariantTreeAssetId.m_guid, shaderVariantProductSubId);
AZStd::unique_lock<decltype(m_mutex)> lock(m_mutex);
@@ -502,11 +504,11 @@ namespace AZ
void ShaderVariantAsyncLoader::QueueShaderVariantTreeForLoading(
const PairOfShaderAssetAndShaderVariantId& shaderAndVariantPair,
const TupleShaderAssetAndShaderVariantId& shaderAndVariantTuple,
AZStd::unordered_set<Data::AssetId>& shaderVariantTreePendingRequests)
{
auto shaderAssetId = shaderAndVariantPair.m_shaderAsset.GetId();
if (shaderVariantTreePendingRequests.count(shaderAndVariantPair.m_shaderAsset.GetId()))
auto shaderAssetId = shaderAndVariantTuple.m_shaderAsset.GetId();
if (shaderVariantTreePendingRequests.count(shaderAndVariantTuple.m_shaderAsset.GetId()))
{
// Already queued.
return;