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]
This commit is contained in:
mihnea balta
2021-09-13 03:28:50 -04:00
parent 0807606e44
commit ff74fc0aed

View File

@@ -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;