From ff74fc0aedd89f2c74ffdc428e3db362bdaafbfc Mon Sep 17 00:00:00 2001 From: mihnea balta Date: Mon, 13 Sep 2021 03:28:50 -0400 Subject: [PATCH] Don't crash if a texture reference is null. There might be valid reasons for this (material being destroyed), so all resource types should behave the same way as 2D textures - use a black default instead of crashing with an assertion failure. #jira FROST-5288 #rnx #preflight 6138b7c12d09b9000158308e #lockdown Michal.Valient #rb Uriel.Doyon, Ben.Ingram #ushell-cherrypick of 17489330 by mihnea.balta #ROBOMERGE-AUTHOR: mihnea.balta #ROBOMERGE-SOURCE: CL 17489559 in //UE5/Main/... #ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530) [CL 17489579 by mihnea balta in ue5-release-engine-test branch] --- .../Private/Materials/MaterialUniformExpressions.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Engine/Source/Runtime/Engine/Private/Materials/MaterialUniformExpressions.cpp b/Engine/Source/Runtime/Engine/Private/Materials/MaterialUniformExpressions.cpp index 0dafb4f43a35..a21729b20d76 100644 --- a/Engine/Source/Runtime/Engine/Private/Materials/MaterialUniformExpressions.cpp +++ b/Engine/Source/Runtime/Engine/Private/Materials/MaterialUniformExpressions.cpp @@ -893,9 +893,8 @@ void FUniformExpressionSet::FillUniformBuffer(const FMaterialRenderContext& Mate BufferCursor = ((uint8*)BufferCursor) + (SHADER_PARAMETER_POINTER_ALIGNMENT * 2); check(BufferCursor <= TempBuffer + TempBufferSize); - if(Value && Value->GetResource() && (Value->GetMaterialType() & MCT_TextureCube) != 0u) + if(Value && Value->GetResource() && Value->TextureReference.TextureReferenceRHI && (Value->GetMaterialType() & MCT_TextureCube) != 0u) { - check(Value->TextureReference.TextureReferenceRHI); *ResourceTableTexturePtr = Value->TextureReference.TextureReferenceRHI; const FSamplerStateRHIRef* SamplerSource = &Value->GetResource()->SamplerStateRHI; @@ -933,9 +932,8 @@ void FUniformExpressionSet::FillUniformBuffer(const FMaterialRenderContext& Mate void** ResourceTableSamplerPtr = (void**)((uint8*)BufferCursor + 1 * SHADER_PARAMETER_POINTER_ALIGNMENT); BufferCursor = ((uint8*)BufferCursor) + (SHADER_PARAMETER_POINTER_ALIGNMENT * 2); - if (Value && Value->GetResource() && (Value->GetMaterialType() & MCT_Texture2DArray) != 0u) + if (Value && Value->GetResource() && Value->TextureReference.TextureReferenceRHI && (Value->GetMaterialType() & MCT_Texture2DArray) != 0u) { - check(Value->TextureReference.TextureReferenceRHI); *ResourceTableTexturePtr = Value->TextureReference.TextureReferenceRHI; const FSamplerStateRHIRef* SamplerSource = &Value->GetResource()->SamplerStateRHI; ESamplerSourceMode SourceMode = Parameter.SamplerSource; @@ -972,9 +970,8 @@ void FUniformExpressionSet::FillUniformBuffer(const FMaterialRenderContext& Mate void** ResourceTableSamplerPtr = (void**)((uint8*)BufferCursor + 1 * SHADER_PARAMETER_POINTER_ALIGNMENT); BufferCursor = ((uint8*)BufferCursor) + (SHADER_PARAMETER_POINTER_ALIGNMENT * 2); - if (Value && Value->GetResource() && (Value->GetMaterialType() & MCT_TextureCubeArray) != 0u) + if (Value && Value->GetResource() && Value->TextureReference.TextureReferenceRHI && (Value->GetMaterialType() & MCT_TextureCubeArray) != 0u) { - check(Value->TextureReference.TextureReferenceRHI); *ResourceTableTexturePtr = Value->TextureReference.TextureReferenceRHI; const FSamplerStateRHIRef* SamplerSource = &Value->GetResource()->SamplerStateRHI; ESamplerSourceMode SourceMode = Parameter.SamplerSource; @@ -1012,9 +1009,8 @@ void FUniformExpressionSet::FillUniformBuffer(const FMaterialRenderContext& Mate BufferCursor = ((uint8*)BufferCursor) + (SHADER_PARAMETER_POINTER_ALIGNMENT * 2); check(BufferCursor <= TempBuffer + TempBufferSize); - if(Value && Value->GetResource() && (Value->GetMaterialType() & MCT_VolumeTexture) != 0u) + if(Value && Value->GetResource() && Value->TextureReference.TextureReferenceRHI && (Value->GetMaterialType() & MCT_VolumeTexture) != 0u) { - check(Value->TextureReference.TextureReferenceRHI); *ResourceTableTexturePtr = Value->TextureReference.TextureReferenceRHI; const FSamplerStateRHIRef* SamplerSource = &Value->GetResource()->SamplerStateRHI;