[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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user