Add better error handling for failed loading of the LyShine shader (#6761)

Signed-off-by: abrmich <abrmich@amazon.com>
This commit is contained in:
michabr
2022-01-10 12:11:15 -08:00
committed by GitHub
parent 73a023b0c3
commit df7a2fbd9d
3 changed files with 34 additions and 23 deletions
@@ -141,6 +141,7 @@ namespace AZ
void DynamicDrawContext::InitVertexFormat(const AZStd::vector<VertexChannel>& vertexChannels) void DynamicDrawContext::InitVertexFormat(const AZStd::vector<VertexChannel>& vertexChannels)
{ {
AZ_Assert(!m_initialized, "Can't call InitVertexFormat after context was initialized (EndInit was called)"); AZ_Assert(!m_initialized, "Can't call InitVertexFormat after context was initialized (EndInit was called)");
AZ_Assert(m_pipelineState, "Can't call InitVertexFormat before InitShader is called with a valid shader");
m_perVertexDataSize = 0; m_perVertexDataSize = 0;
RHI::InputStreamLayoutBuilder layoutBuilder; RHI::InputStreamLayoutBuilder layoutBuilder;
@@ -150,7 +151,10 @@ namespace AZ
bufferBuilder->Channel(channel.m_channel, channel.m_format); bufferBuilder->Channel(channel.m_channel, channel.m_format);
m_perVertexDataSize += RHI::GetFormatSize(channel.m_format); m_perVertexDataSize += RHI::GetFormatSize(channel.m_format);
} }
m_pipelineState->InputStreamLayout() = layoutBuilder.End(); if (m_pipelineState)
{
m_pipelineState->InputStreamLayout() = layoutBuilder.End();
}
} }
void DynamicDrawContext::InitDrawListTag(RHI::DrawListTag drawListTag) void DynamicDrawContext::InitDrawListTag(RHI::DrawListTag drawListTag)
+27 -20
View File
@@ -122,27 +122,34 @@ void CDraw2d::OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene)
} }
m_dynamicDraw->EndInit(); m_dynamicDraw->EndInit();
// Cache draw srg input indices for later use // Check that the dynamic draw context has been initialized appropriately
static const char textureIndexName[] = "m_texture"; if (m_dynamicDraw->IsReady())
static const char worldToProjIndexName[] = "m_worldToProj"; {
AZ::Data::Instance<AZ::RPI::ShaderResourceGroup> drawSrg = m_dynamicDraw->NewDrawSrg(); // Cache draw srg input indices for later use
const AZ::RHI::ShaderResourceGroupLayout* layout = drawSrg->GetLayout(); static const char textureIndexName[] = "m_texture";
m_shaderData.m_imageInputIndex = layout->FindShaderInputImageIndex(AZ::Name(textureIndexName)); static const char worldToProjIndexName[] = "m_worldToProj";
AZ_Error("Draw2d", m_shaderData.m_imageInputIndex.IsValid(), "Failed to find shader input constant %s.", AZ::Data::Instance<AZ::RPI::ShaderResourceGroup> drawSrg = m_dynamicDraw->NewDrawSrg();
textureIndexName); if (drawSrg)
m_shaderData.m_viewProjInputIndex = layout->FindShaderInputConstantIndex(AZ::Name(worldToProjIndexName)); {
AZ_Error("Draw2d", m_shaderData.m_viewProjInputIndex.IsValid(), "Failed to find shader input constant %s.", const AZ::RHI::ShaderResourceGroupLayout* layout = drawSrg->GetLayout();
worldToProjIndexName); m_shaderData.m_imageInputIndex = layout->FindShaderInputImageIndex(AZ::Name(textureIndexName));
AZ_Error("Draw2d", m_shaderData.m_imageInputIndex.IsValid(), "Failed to find shader input constant %s.",
textureIndexName);
m_shaderData.m_viewProjInputIndex = layout->FindShaderInputConstantIndex(AZ::Name(worldToProjIndexName));
AZ_Error("Draw2d", m_shaderData.m_viewProjInputIndex.IsValid(), "Failed to find shader input constant %s.",
worldToProjIndexName);
}
// Cache shader variants that will be used // Cache shader variants that will be used
AZ::RPI::ShaderOptionList shaderOptionsClamp; AZ::RPI::ShaderOptionList shaderOptionsClamp;
shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("true"))); shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("true")));
shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true"))); shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true")));
m_shaderData.m_shaderOptionsClamp = m_dynamicDraw->UseShaderVariant(shaderOptionsClamp); m_shaderData.m_shaderOptionsClamp = m_dynamicDraw->UseShaderVariant(shaderOptionsClamp);
AZ::RPI::ShaderOptionList shaderOptionsWrap; AZ::RPI::ShaderOptionList shaderOptionsWrap;
shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("false"))); shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("false")));
shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true"))); shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true")));
m_shaderData.m_shaderOptionsWrap = m_dynamicDraw->UseShaderVariant(shaderOptionsWrap); m_shaderData.m_shaderOptionsWrap = m_dynamicDraw->UseShaderVariant(shaderOptionsWrap);
}
} }
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
+2 -2
View File
@@ -76,7 +76,7 @@ void UiRenderer::OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene)
// Create a dynamic draw context for UI Canvas drawing for the scene // Create a dynamic draw context for UI Canvas drawing for the scene
m_dynamicDraw = CreateDynamicDrawContext(uiShader); m_dynamicDraw = CreateDynamicDrawContext(uiShader);
if (m_dynamicDraw) if (m_dynamicDraw && m_dynamicDraw->IsReady())
{ {
// Cache shader data such as input indices for later use // Cache shader data such as input indices for later use
CacheShaderData(m_dynamicDraw); CacheShaderData(m_dynamicDraw);
@@ -85,7 +85,7 @@ void UiRenderer::OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene)
} }
else else
{ {
AZ_Error(LogName, false, "Failed to create a dynamic draw context for LyShine. \ AZ_Error(LogName, false, "Failed to create or initialize a dynamic draw context for LyShine. \
This can happen if the LyShine pass hasn't been added to the main render pipeline."); This can happen if the LyShine pass hasn't been added to the main render pipeline.");
} }
} }