Add better error handling for failed loading of the LyShine shader (#6761)
Signed-off-by: abrmich <abrmich@amazon.com>
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user