Merge branch 'development' into Atom/dmcdiar/ATOM-5702
This commit is contained in:
@@ -382,6 +382,16 @@ namespace AZ
|
||||
m_useViewport = false;
|
||||
}
|
||||
|
||||
void DynamicDrawContext::SetStencilReference(uint8_t stencilRef)
|
||||
{
|
||||
m_stencilRef = stencilRef;
|
||||
}
|
||||
|
||||
uint8_t DynamicDrawContext::GetStencilReference() const
|
||||
{
|
||||
return m_stencilRef;
|
||||
}
|
||||
|
||||
void DynamicDrawContext::SetShaderVariant(ShaderVariantId shaderVariantId)
|
||||
{
|
||||
AZ_Assert( m_initialized && m_supportShaderVariants, "DynamicDrawContext is not initialized or unable to support shader variants. "
|
||||
@@ -475,6 +485,9 @@ namespace AZ
|
||||
drawItem.m_viewports = &m_viewport;
|
||||
}
|
||||
|
||||
// Set stencil reference. Used when stencil is enabled.
|
||||
drawItem.m_stencilRef = m_stencilRef;
|
||||
|
||||
drawItemInfo.m_sortKey = m_sortKey++;
|
||||
m_cachedDrawItems.emplace_back(drawItemInfo);
|
||||
}
|
||||
|
||||
@@ -97,6 +97,7 @@ namespace AZ
|
||||
ShaderReloadNotificationBus::MultiHandler::BusDisconnect();
|
||||
for (auto& shaderItem : m_shaderCollection)
|
||||
{
|
||||
ShaderReloadDebugTracker::Printf("(Material has ShaderAsset %p)", shaderItem.GetShaderAsset().Get());
|
||||
ShaderReloadNotificationBus::MultiHandler::BusConnect(shaderItem.GetShaderAsset().GetId());
|
||||
}
|
||||
|
||||
@@ -226,7 +227,7 @@ namespace AZ
|
||||
// AssetBus overrides...
|
||||
void Material::OnAssetReloaded(Data::Asset<Data::AssetData> asset)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("Material::OnAssetReloaded %s", asset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->Material::OnAssetReloaded %s", this, asset.GetHint().c_str());
|
||||
|
||||
Data::Asset<MaterialAsset> newMaterialAsset = { asset.GetAs<MaterialAsset>(), AZ::Data::AssetLoadBehavior::PreLoad };
|
||||
|
||||
@@ -241,7 +242,7 @@ namespace AZ
|
||||
// MaterialReloadNotificationBus overrides...
|
||||
void Material::OnMaterialAssetReinitialized(const Data::Asset<MaterialAsset>& materialAsset)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("Material::OnMaterialAssetReinitialized %s", materialAsset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->Material::OnMaterialAssetReinitialized %s", this, materialAsset.GetHint().c_str());
|
||||
OnAssetReloaded(materialAsset);
|
||||
}
|
||||
|
||||
@@ -249,7 +250,7 @@ namespace AZ
|
||||
// ShaderReloadNotificationBus overrides...
|
||||
void Material::OnShaderReinitialized([[maybe_unused]] const Shader& shader)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("Material::OnShaderReinitialized %s", shader.GetAsset().GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->Material::OnShaderReinitialized %s", this, shader.GetAsset().GetHint().c_str());
|
||||
// Note that it might not be strictly necessary to reinitialize the entire material, we might be able to get away with
|
||||
// just bumping the m_currentChangeId or some other minor updates. But it's pretty hard to know what exactly needs to be
|
||||
// updated to correctly handle the reload, so it's safer to just reinitialize the whole material.
|
||||
@@ -260,7 +261,7 @@ namespace AZ
|
||||
{
|
||||
// TODO: I think we should make Shader handle OnShaderAssetReinitialized and treat it just like the shader reloaded.
|
||||
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("Material::OnShaderAssetReinitialized %s", shaderAsset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->Material::OnShaderAssetReinitialized %s", this, shaderAsset.GetHint().c_str());
|
||||
// Note that it might not be strictly necessary to reinitialize the entire material, we might be able to get away with
|
||||
// just bumping the m_currentChangeId or some other minor updates. But it's pretty hard to know what exactly needs to be
|
||||
// updated to correctly handle the reload, so it's safer to just reinitialize the whole material.
|
||||
@@ -269,7 +270,7 @@ namespace AZ
|
||||
|
||||
void Material::OnShaderVariantReinitialized(const Shader& shader, const ShaderVariantId& /*shaderVariantId*/, ShaderVariantStableId shaderVariantStableId)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("Material::OnShaderVariantReinitialized %s variant %u", shader.GetAsset().GetHint().c_str(), shaderVariantStableId.GetIndex());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->Material::OnShaderVariantReinitialized %s variant %u", this, shader.GetAsset().GetHint().c_str(), shaderVariantStableId.GetIndex());
|
||||
|
||||
// Note that it would be better to check the shaderVariantId to see if that variant is relevant to this particular material before reinitializing it.
|
||||
// There could be hundreds or even thousands of variants for a shader, but only one of those variants will be used by any given material. So we could
|
||||
|
||||
@@ -62,8 +62,6 @@ namespace AZ
|
||||
{
|
||||
AZ_PROFILE_FUNCTION(Debug::ProfileCategory::AzRender);
|
||||
|
||||
m_aabb = modelAsset.GetAabb();
|
||||
|
||||
m_lods.resize(modelAsset.GetLodAssets().size());
|
||||
|
||||
for (size_t lodIndex = 0; lodIndex < m_lods.size(); ++lodIndex)
|
||||
@@ -127,11 +125,6 @@ namespace AZ
|
||||
return m_isUploadPending;
|
||||
}
|
||||
|
||||
const AZ::Aabb& Model::GetAabb() const
|
||||
{
|
||||
return m_aabb;
|
||||
}
|
||||
|
||||
const Data::Asset<ModelAsset>& Model::GetModelAsset() const
|
||||
{
|
||||
return m_modelAsset;
|
||||
@@ -140,9 +133,16 @@ namespace AZ
|
||||
bool Model::LocalRayIntersection(const AZ::Vector3& rayStart, const AZ::Vector3& rayDir, float& distanceNormalized, AZ::Vector3& normal) const
|
||||
{
|
||||
AZ_PROFILE_FUNCTION(Debug::ProfileCategory::AzRender);
|
||||
|
||||
if (!GetModelAsset())
|
||||
{
|
||||
AZ_Assert(false, "Invalid Model - not created from a ModelAsset?");
|
||||
return false;
|
||||
}
|
||||
|
||||
float start;
|
||||
float end;
|
||||
const int result = Intersect::IntersectRayAABB2(rayStart, rayDir.GetReciprocal(), m_aabb, start, end);
|
||||
const int result = Intersect::IntersectRayAABB2(rayStart, rayDir.GetReciprocal(), GetModelAsset()->GetAabb(), start, end);
|
||||
if (Intersect::ISECT_RAY_AABB_NONE != result)
|
||||
{
|
||||
if (ModelAsset* modelAssetPtr = m_modelAsset.Get())
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace AZ
|
||||
|
||||
With that percentage we can determine which Lod we want to use.
|
||||
*/
|
||||
Aabb modelAabb = model.GetAabb();
|
||||
Aabb modelAabb = model.GetModelAsset()->GetAabb();
|
||||
modelAabb.Translate(position);
|
||||
|
||||
Vector3 center;
|
||||
|
||||
@@ -1036,6 +1036,26 @@ namespace AZ
|
||||
}
|
||||
}
|
||||
|
||||
void Pass::UpdateConnectedInputBindings()
|
||||
{
|
||||
for (uint8_t idx : m_inputBindingIndices)
|
||||
{
|
||||
UpdateConnectedBinding(m_attachmentBindings[idx]);
|
||||
}
|
||||
for (uint8_t idx : m_inputOutputBindingIndices)
|
||||
{
|
||||
UpdateConnectedBinding(m_attachmentBindings[idx]);
|
||||
}
|
||||
}
|
||||
|
||||
void Pass::UpdateConnectedOutputBindings()
|
||||
{
|
||||
for (uint8_t idx : m_outputBindingIndices)
|
||||
{
|
||||
UpdateConnectedBinding(m_attachmentBindings[idx]);
|
||||
}
|
||||
}
|
||||
|
||||
// --- Queuing functions with PassSystem ---
|
||||
|
||||
void Pass::QueueForBuildAndInitialization()
|
||||
@@ -1264,7 +1284,7 @@ namespace AZ
|
||||
AZ_Assert(m_state == PassState::Idle, "Pass::FrameBegin - Pass [%s] is attempting to render, but is not in the Idle state.", m_path.GetCStr());
|
||||
m_state = PassState::Rendering;
|
||||
|
||||
UpdateConnectedBindings();
|
||||
UpdateConnectedInputBindings();
|
||||
UpdateOwnedAttachments();
|
||||
|
||||
CreateTransientAttachments(params.m_frameGraphBuilder->GetAttachmentDatabase());
|
||||
@@ -1273,6 +1293,8 @@ namespace AZ
|
||||
// FrameBeginInternal needs to be the last function be called in FrameBegin because its implementation expects
|
||||
// all the attachments are imported to database (for example, ImageAttachmentPreview)
|
||||
FrameBeginInternal(params);
|
||||
|
||||
UpdateConnectedOutputBindings();
|
||||
}
|
||||
|
||||
void Pass::FrameEnd()
|
||||
|
||||
@@ -159,7 +159,7 @@ namespace AZ
|
||||
// AssetBus overrides
|
||||
void Shader::OnAssetReloaded(Data::Asset<Data::AssetData> asset)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("Shader::OnAssetReloaded %s", asset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->Shader::OnAssetReloaded %s", this, asset.GetHint().c_str());
|
||||
|
||||
if (asset->GetId() == m_asset->GetId())
|
||||
{
|
||||
|
||||
@@ -139,7 +139,7 @@ namespace AZ
|
||||
|
||||
void MaterialAsset::OnAssetReloaded(Data::Asset<Data::AssetData> asset)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("MaterialAsset::OnAssetReloaded %s", asset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->MaterialAsset::OnAssetReloaded %s", this, asset.GetHint().c_str());
|
||||
|
||||
Data::Asset<MaterialTypeAsset> newMaterialTypeAsset = { asset.GetAs<MaterialTypeAsset>(), AZ::Data::AssetLoadBehavior::PreLoad };
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ namespace AZ
|
||||
|
||||
void MaterialTypeAsset::OnAssetReloaded(Data::Asset<Data::AssetData> asset)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("MaterialTypeAsset::OnAssetReloaded %s", asset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->MaterialTypeAsset::OnAssetReloaded %s", this, asset.GetHint().c_str());
|
||||
|
||||
// The order of asset reloads is non-deterministic. If the MaterialTypeAsset reloads before these
|
||||
// dependency assets, this will make sure the MaterialTypeAsset gets the latest ones when they reload.
|
||||
|
||||
@@ -581,7 +581,7 @@ namespace AZ
|
||||
// AssetBus overrides...
|
||||
void ShaderAsset::OnAssetReloaded(Data::Asset<Data::AssetData> asset)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("ShaderAsset::OnAssetReloaded %s", asset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->ShaderAsset::OnAssetReloaded %s", this, asset.GetHint().c_str());
|
||||
|
||||
Data::Asset<ShaderVariantAsset> shaderVariantAsset = { asset.GetAs<ShaderVariantAsset>(), AZ::Data::AssetLoadBehavior::PreLoad };
|
||||
AZ_Assert(shaderVariantAsset->GetStableId() == RootShaderVariantStableId,
|
||||
@@ -597,7 +597,7 @@ namespace AZ
|
||||
/// ShaderVariantFinderNotificationBus overrides
|
||||
void ShaderAsset::OnShaderVariantTreeAssetReady(Data::Asset<ShaderVariantTreeAsset> shaderVariantTreeAsset, bool isError)
|
||||
{
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("ShaderAsset::OnShaderVariantTreeAssetReady %s", shaderVariantTreeAsset.GetHint().c_str());
|
||||
ShaderReloadDebugTracker::ScopedSection reloadSection("{%p}->ShaderAsset::OnShaderVariantTreeAssetReady %s", this, shaderVariantTreeAsset.GetHint().c_str());
|
||||
|
||||
AZStd::unique_lock<decltype(m_variantTreeMutex)> lock(m_variantTreeMutex);
|
||||
if (isError)
|
||||
|
||||
Reference in New Issue
Block a user