[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
@@ -14,6 +14,7 @@
#include <Common/RPITestFixture.h>
#include <Common/JsonTestUtils.h>
#include <Common/ErrorMessageFinder.h>
#include <Common/ShaderAssetTestUtils.h>
#include <AzCore/Script/ScriptAsset.h>
#include <Atom/RPI.Edit/Material/LuaMaterialFunctorSourceData.h>
#include <Atom/RPI.Reflect/Material/LuaMaterialFunctor.h>
@@ -125,7 +126,7 @@ namespace UnitTest
// Setup for a single material property and a specific shader constant input
void Setup(
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset,
RHI::Ptr<RHI::ShaderResourceGroupLayout> materialSrgLayout,
MaterialPropertyDataType dataType,
const char* materialPropertyName,
const char* shaderInputName,
@@ -133,7 +134,7 @@ namespace UnitTest
{
MaterialTypeAssetCreator materialTypeCreator;
materialTypeCreator.Begin(Uuid::CreateRandom());
materialTypeCreator.AddShader(CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgAsset));
materialTypeCreator.AddShader(CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout));
materialTypeCreator.BeginMaterialProperty(Name{materialPropertyName}, dataType);
materialTypeCreator.EndMaterialProperty();
LuaMaterialFunctorTests::AddLuaFunctor(materialTypeCreator, luaFunctorScript);
@@ -238,18 +239,19 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Bool, "general.TestBool", "m_bool", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Bool, "general.TestBool", "m_bool", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{true});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(true, testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<bool>(testData.GetSrgConstantIndex()));
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{false});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(false, testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<bool>(testData.GetSrgConstantIndex()));
}
@@ -270,13 +272,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Float, "general.TestFloat", "m_float", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Float, "general.TestFloat", "m_float", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{1.25f});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_FLOAT_EQ(2.5f, testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<float>(testData.GetSrgConstantIndex()));
}
@@ -297,13 +300,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Int, "general.TestInt", "m_int", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Int, "general.TestInt", "m_int", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{2});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(-2, testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<int32_t>(testData.GetSrgConstantIndex()));
}
@@ -324,13 +328,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::UInt, "general.TestUInt", "m_uint", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::UInt, "general.TestUInt", "m_uint", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{2u});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(7, testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<uint32_t>(testData.GetSrgConstantIndex()));
}
@@ -354,13 +359,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Vector2, "general.TestVector2", "m_float2", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Vector2, "general.TestVector2", "m_float2", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{Vector2(1.0f, 2.0f)});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(Vector2(2.0f, 1.0f), testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<Vector2>(testData.GetSrgConstantIndex()));
}
@@ -382,13 +388,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Vector3, "general.TestVector3", "m_float3", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Vector3, "general.TestVector3", "m_float3", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{Vector3(5.0f, 4.0f, 3.0f)});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(Vector3(5.0f, 4.0f, 3.0f).GetNormalized(), testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<Vector3>(testData.GetSrgConstantIndex()));
}
@@ -410,13 +417,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Vector4, "general.TestVector4", "m_float4", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Vector4, "general.TestVector4", "m_float4", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{Vector4(1.0f, 2.0f, 3.0f, 4.0f)});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(Vector4(1.0f, 2.0f, 3.0f, 4.0f) / 4.0f, testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<Vector4>(testData.GetSrgConstantIndex()));
}
@@ -444,13 +452,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Color, "general.TestColor", "m_color", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Color, "general.TestColor", "m_color", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{Color(1.0f, 0.5f, 0.4f, 0.5f)});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(Color(0.5f, 0.25f, 0.2f, 0.5f), testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<Color>(testData.GetSrgConstantIndex()));
}
@@ -472,13 +481,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Float, "general.Scale", "m_float3x3", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Float, "general.Scale", "m_float3x3", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{0.5f});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(Matrix3x3::CreateScale(Vector3(0.5f, 0.5f, 1.0f)), testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<Matrix3x3>(testData.GetSrgConstantIndex()));
}
@@ -500,13 +510,14 @@ namespace UnitTest
end
)";
Data::Asset<ShaderResourceGroupAsset> materialSrgAsset = CreateCommonTestMaterialSrgAsset();
auto materialSrgLayout = CreateCommonTestMaterialSrgLayout();
auto shaderAsset = CreateTestShaderAsset(Uuid::CreateRandom(), materialSrgLayout);
TestMaterialData testData;
testData.Setup(materialSrgAsset, MaterialPropertyDataType::Vector3, "general.Offset", "m_float4x4", functorScript);
testData.Setup(materialSrgLayout, MaterialPropertyDataType::Vector3, "general.Offset", "m_float4x4", functorScript);
testData.GetMaterial()->SetPropertyValue(testData.GetMaterialPropertyIndex(), MaterialPropertyValue{Vector3(1.0f, 2.0f, 3.0f)});
ProcessQueuedSrgCompilations(materialSrgAsset);
ProcessQueuedSrgCompilations(shaderAsset, materialSrgLayout->GetName());
EXPECT_TRUE(testData.GetMaterial()->Compile());
EXPECT_EQ(Matrix4x4::CreateTranslation(Vector3(1.0f, 2.0f, 3.0f)), testData.GetMaterial()->GetRHIShaderResourceGroup()->GetData().GetConstant<Matrix4x4>(testData.GetSrgConstantIndex()));
}