UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RHICoreTextureInitializer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "RHICore.h"
8#include "RHICommandList.h"
10#include "RHITextureUtils.h"
11
12namespace UE::RHICore
13{
35
36 // Texture initializer that just returns the texture on finalize.
49
73
74 // Texture Initializer that uses Lock/Unlock to upload initial data
76 {
80 {
82
83 const FRHITextureDesc& TextureDesc = Texture->GetDesc();
84 const uint32 FaceCount = TextureDesc.IsTextureCube() ? 6 : 1;
85
86 for (uint32 FaceIndex = 0; FaceIndex < FaceCount; FaceIndex++)
87 {
88 for (uint32 ArrayIndex = 0; ArrayIndex < TextureDesc.ArraySize; ArrayIndex++)
89 {
90 for (uint32 MipIndex = 0; MipIndex < TextureDesc.NumMips; MipIndex++)
91 {
94 const uint64 Offset = UE::RHITextureUtils::CalculateSubresourceOffset(TextureDesc, FaceIndex, ArrayIndex, MipIndex, SubresourceStride, SubresourceSize);
95
97
98 FRHILockTextureResult LockResult = RHICmdList.LockTexture(LockArgs);
99 check(LockResult.ByteCount <= SubresourceSize);
101
102 FMemory::Memcpy(LockResult.Data, reinterpret_cast<uint8*>(WritableMemory.Pointer) + Offset, SubresourceSize);
103
104 RHICmdList.UnlockTexture(LockArgs);
105 }
106 }
107 }
108
109 return MoveTemp(Texture);
110 })
111 {
112 }
113 };
114
115 static FLockTextureInitializer CreateLockTextureInitializer(FRHICommandListBase& RHICmdList, FRHITexture* Texture, const FRHITextureCreateDesc& CreateDesc)
116 {
117 const uint64 WritableMemorySize = UE::RHITextureUtils::CalculateTextureSize(CreateDesc);
118 void* WritableMemory = FMemory::Malloc(WritableMemorySize, 16);
119
120 return FLockTextureInitializer(RHICmdList, Texture, WritableMemory, WritableMemorySize);
121 }
122
123 static FRHITextureInitializer HandleUnknownTextureInitializerInitAction(FRHICommandListBase& RHICmdList, const FRHITextureCreateDesc& CreateDesc)
124 {
125 UE_LOG(LogRHICore, Fatal, TEXT("Unknown or unhandled ERHITextureInitAction: %d"), static_cast<uint32>(CreateDesc.InitAction));
126
127 FRHITexture* Texture = nullptr;
129 }
130}
#define check(expr)
Definition AssertionMacros.h:314
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
@ RLM_WriteOnly
Definition RHIDefinitions.h:787
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHICommandList.h:455
FRHICommandListImmediate & GetAsImmediate()
Definition RHICommandList.inl:21
Definition RHICommandList.h:4626
Definition RHIResources.h:2153
virtual const FRHITextureDesc & GetDesc() const
Definition RHIResources.h:2170
Definition RefCounting.h:454
Definition RHIResources.h:819
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition DynamicRHI.h:149
static FRHILockTextureArgs LockCubeFace(FRHITexture *InTexture, uint32 InFaceIndex, uint32 InArrayIndex, uint32 InMipIndex, EResourceLockMode InLockMode, bool bInLockWithinMiptail)
Definition DynamicRHI.h:174
Definition DynamicRHI.h:198
Definition RHIResources.h:1938
ERHITextureInitAction InitAction
Definition RHIResources.h:2137
Definition RHIResources.h:1689
bool IsTextureCube() const
Definition RHIResources.h:1800
uint16 ArraySize
Definition RHIResources.h:1862
uint8 NumMips
Definition RHIResources.h:1865
Definition RHITextureInitializer.h:77
Definition RHITextureInitializer.h:50
FRHITexture * Texture
Definition RHITextureInitializer.h:179
uint64 WritableSize
Definition RHITextureInitializer.h:185
void * WritableData
Definition RHITextureInitializer.h:182
Definition RHITextureInitializer.h:29
Definition RHICoreTextureInitializer.h:15
FBaseTextureInitializerImplementation(FRHICommandListBase &RHICmdList, FRHITexture *Texture, FFinalizeCallback &&InFinalizeCallback)
Definition RHICoreTextureInitializer.h:20
uint64 GetWritableSize() const
Definition RHICoreTextureInitializer.h:30
FBaseTextureInitializerImplementation(FRHICommandListBase &RHICmdList, FRHITexture *InTexture, void *InWritableData, uint64 InWritableSize, FFinalizeCallback &&InFinalizeCallback, FGetSubresourceCallback &&InGetSubresourceCallback)
Definition RHICoreTextureInitializer.h:16
void * GetWritableData() const
Definition RHICoreTextureInitializer.h:25
Definition RHICoreTextureInitializer.h:51
FDefaultLayoutTextureInitializer(FRHICommandListBase &RHICmdList, FRHITexture *InTexture, void *InMemory, uint64 InMemorySize, FFinalizeCallback &&FinalizeFunc)
Definition RHICoreTextureInitializer.h:52
Definition RHICoreTextureInitializer.h:38
FDefaultTextureInitializer(FRHICommandListBase &RHICmdList, FRHITexture *Texture)
Definition RHICoreTextureInitializer.h:39
Definition RHICoreInitializerCommon.h:12
Definition RHICoreTextureInitializer.h:76
FLockTextureInitializer(FRHICommandListBase &RHICmdList, FRHITexture *InTexture, void *InMemory, uint64 InMemorySize)
Definition RHICoreTextureInitializer.h:77