Files
UnrealEngine/Engine/Source/Runtime/RHI/Private/RHITextureReference.cpp
2025-05-18 13:04:45 +08:00

90 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "RHITextureReference.h"
#include "RHI.h"
#include "RHICommandList.h"
#include "RHIShaderPlatform.h"
FRHITextureReference::FRHITextureReference(FRHITexture* InReferencedTexture)
: FRHITexture(RRT_TextureReference)
, ReferencedTexture(InReferencedTexture ? InReferencedTexture : DefaultTexture.GetReference())
#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
, BindlessHandle(FRHIDescriptorHandle())
#endif
{
check(DefaultTexture);
}
#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
FRHITextureReference::FRHITextureReference(FRHITexture* InReferencedTexture, FRHIDescriptorHandle InBindlessHandle)
: FRHITexture(RRT_TextureReference)
, ReferencedTexture(InReferencedTexture ? InReferencedTexture : DefaultTexture.GetReference())
, BindlessHandle(InBindlessHandle)
{
check(DefaultTexture);
}
#endif // PLATFORM_SUPPORTS_BINDLESS_RENDERING
FRHITextureReference::~FRHITextureReference() = default;
FRHITextureReference* FRHITextureReference::GetTextureReference()
{
return this;
}
FRHIDescriptorHandle FRHITextureReference::GetDefaultBindlessHandle() const
{
#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
if (BindlessHandle.IsValid())
{
return BindlessHandle;
}
#endif // PLATFORM_SUPPORTS_BINDLESS_RENDERING
check(ReferencedTexture);
return ReferencedTexture->GetDefaultBindlessHandle();
}
void* FRHITextureReference::GetNativeResource() const
{
check(ReferencedTexture);
return ReferencedTexture->GetNativeResource();
}
void* FRHITextureReference::GetNativeShaderResourceView() const
{
check(ReferencedTexture);
return ReferencedTexture->GetNativeShaderResourceView();
}
void* FRHITextureReference::GetTextureBaseRHI()
{
check(ReferencedTexture);
return ReferencedTexture->GetTextureBaseRHI();
}
void FRHITextureReference::GetWriteMaskProperties(void*& OutData, uint32& OutSize)
{
check(ReferencedTexture);
return ReferencedTexture->GetWriteMaskProperties(OutData, OutSize);
}
#if ENABLE_RHI_VALIDATION
RHIValidation::FResource* FRHITextureReference::GetTrackerResource()
{
check(ReferencedTexture);
return ReferencedTexture->GetTrackerResource();
}
#endif
const FRHITextureDesc& FRHITextureReference::GetDesc() const
{
check(ReferencedTexture);
return ReferencedTexture->GetDesc();
}
void FRHITextureReference::SetTrackedAccessFromContext(FRHITrackedAccess InTrackedAccess)
{
check(ReferencedTexture);
ReferencedTexture->SetTrackedAccessFromContext(InTrackedAccess);
}