[ATOM-15276] Shader Build Pipeline: Add Shader Supervariant System (#749)

* [ATOM-15276] Shader Build Pipeline: Add Shader Supervariant System.

Added ShaderAssetBuilder2 & ShaderVariantAssetBuilder2.

Added ShaderAsset2, ShaderVariantAsset2.

Eventually they will be the only builders. AzslBuilder &
SrgLayoutBuilder will be removed.
ShaderResourceGroupAsset will be removed. ShaderAssetBuilder &
ShaderVariantAssetBuilder will be replaced.

Signed-off-by: garrieta <garrieta@amazon.com>
This commit is contained in:
galibzon
2021-05-20 04:53:16 -05:00
committed by GitHub
parent af22a0f44e
commit 256df54575
63 changed files with 6191 additions and 603 deletions
@@ -12,15 +12,18 @@
#include <Atom/RPI.Public/Shader/ShaderSystem.h>
#include <Atom/RPI.Public/Shader/Shader.h>
#include <Atom/RPI.Public/Shader/Shader2.h>
#include <Atom/RPI.Public/Shader/ShaderResourceGroup.h>
#include <Atom/RPI.Public/Shader/ShaderResourceGroupPool.h>
#include <Atom/RPI.Reflect/Asset/AssetHandler.h>
#include <Atom/RPI.Reflect/Asset/AssetUtils.h>
#include <Atom/RPI.Reflect/Shader/ShaderAsset.h>
#include <Atom/RPI.Reflect/Shader/ShaderAsset2.h>
#include <Atom/RPI.Reflect/Shader/ShaderOptionGroup.h>
#include <Atom/RPI.Reflect/Shader/ShaderResourceGroupAsset.h>
#include <Atom/RPI.Reflect/Shader/ShaderVariantAsset.h>
#include <Atom/RPI.Reflect/Shader/ShaderVariantAsset2.h>
#include <Atom/RPI.Reflect/Shader/ShaderVariantTreeAsset.h>
#include <Atom/RPI.Reflect/Shader/PrecompiledShaderAssetSourceData.h>
@@ -42,9 +45,11 @@ namespace AZ
ShaderVariantId::Reflect(context);
ShaderVariantStableId::Reflect(context);
ShaderAsset::Reflect(context);
ShaderAsset2::Reflect(context);
ShaderInputContract::Reflect(context);
ShaderOutputContract::Reflect(context);
ShaderVariantAsset::Reflect(context);
ShaderVariantAsset2::Reflect(context);
ShaderVariantTreeAsset::Reflect(context);
ReflectShaderStageType(context);
PrecompiledShaderAssetSourceData::Reflect(context);
@@ -58,8 +63,10 @@ namespace AZ
void ShaderSystem::GetAssetHandlers(AssetHandlerPtrList& assetHandlers)
{
assetHandlers.emplace_back(MakeAssetHandler<ShaderAssetHandler>());
assetHandlers.emplace_back(MakeAssetHandler<ShaderAssetHandler2>());
assetHandlers.emplace_back(MakeAssetHandler<ShaderResourceGroupAssetHandler>());
assetHandlers.emplace_back(MakeAssetHandler<ShaderVariantAssetHandler>());
assetHandlers.emplace_back(MakeAssetHandler<ShaderVariantAssetHandler2>());
assetHandlers.emplace_back(MakeAssetHandler<ShaderVariantTreeAssetHandler>());
}
@@ -78,6 +85,14 @@ namespace AZ
Data::InstanceDatabase<Shader>::Create(azrtti_typeid<ShaderAsset>(), handler);
}
{
Data::InstanceHandler<Shader2> handler;
handler.m_createFunction = [](Data::AssetData* shaderAsset) {
return Shader2::CreateInternal(*(azrtti_cast<ShaderAsset2*>(shaderAsset)));
};
Data::InstanceDatabase<Shader2>::Create(azrtti_typeid<ShaderAsset2>(), handler);
}
{
Data::InstanceHandler<ShaderResourceGroup> handler;
handler.m_createFunction = [](Data::AssetData* srgAsset)
@@ -100,6 +115,7 @@ namespace AZ
void ShaderSystem::Shutdown()
{
Data::InstanceDatabase<Shader>::Destroy();
Data::InstanceDatabase<Shader2>::Destroy();
Data::InstanceDatabase<ShaderResourceGroup>::Destroy();
Data::InstanceDatabase<ShaderResourceGroupPool>::Destroy();
Interface<ShaderSystemInterface>::Unregister(this);