UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DXGIUtilities.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "HAL/Platform.h"
6
7#if PLATFORM_MICROSOFT
8
9#ifndef RHICORE_PLATFORM_DXGI_H
10 #error "Platform needs to define RHICORE_PLATFORM_DXGI_H"
11#endif
12
13#include "PixelFormat.h"
14#include "RHIDefinitions.h"
16
19#include RHICORE_PLATFORM_DXGI_H
22
23struct FD3DMemoryStats;
24
25namespace UE::DXGIUtilities
26{
27 RHICORE_API const TCHAR* GetFormatString(DXGI_FORMAT Format);
29
31 {
32 if (bSRGB)
33 {
34 switch (InFormat)
35 {
43 };
44 }
45 else
46 {
47 switch (InFormat)
48 {
56 };
57 }
58
59 switch (InFormat)
60 {
69
75
77 }
78
79 return InFormat;
80 }
81
84 {
85 if (bSRGB)
86 {
87 switch (InFormat)
88 {
95 };
96 }
97 else
98 {
99 switch (InFormat)
100 {
107 };
108 }
109 switch (InFormat)
110 {
115 }
116 return InFormat;
117 }
118
120 {
121 switch (InFormat)
122 {
125 }
126
127 return InFormat;
128 }
129
131 {
132 // Find valid shared texture format
134 {
136 }
138 {
140 }
141
142 return InFormat;
143 }
144
146 {
148 }
149
152 {
153 switch (InFormat)
154 {
158 }
159 return InFormat;
160 }
161
164 {
165 switch (InFormat)
166 {
171 };
172 return InFormat;
173 }
174
177 {
178 switch (InFormat)
179 {
182
185
188 };
189 return InFormat;
190 }
191
197 {
198 switch (InFormat)
199 {
202 return true;
203 };
204 return false;
205 }
206
208 {
209 // Returns true if BC1, BC2, BC3, BC4, BC5, BC6, BC7
212 }
213
215 {
216 // Currently, the only planar resources used are depth-stencil formats
218 {
220 switch (ViewFormat)
221 {
224 }
225 break;
226
228 switch (ViewFormat)
229 {
232 }
233 break;
234
235 case DXGI_FORMAT_NV12:
236 switch (ViewFormat)
237 {
238 case DXGI_FORMAT_R8_UNORM: return 0;
239 case DXGI_FORMAT_R8G8_UNORM: return 1;
240 }
241 break;
242
243 case DXGI_FORMAT_P010:
244 switch (ViewFormat)
245 {
246 case DXGI_FORMAT_R16_UNORM: return 0;
247 case DXGI_FORMAT_R16G16_UNORM: return 1;
248 }
249 break;
250 }
251
252 return 0;
253 }
254
255 inline uint8 GetPlaneCount(DXGI_FORMAT Format)
256 {
257 // Currently, the only planar resources used are depth-stencil formats
259 {
262 return 2;
263 default:
264 return 1;
265 }
266 }
267
269 {
270 switch (Format)
271 {
272 case DXGI_FORMAT_R8G8_B8G8_UNORM: return 2;
273 case DXGI_FORMAT_G8R8_G8B8_UNORM: return 2;
274 case DXGI_FORMAT_NV12: return 2;
275 case DXGI_FORMAT_P010: return 2;
276 case DXGI_FORMAT_P016: return 2;
277 case DXGI_FORMAT_420_OPAQUE: return 2;
278 case DXGI_FORMAT_YUY2: return 2;
279 case DXGI_FORMAT_Y210: return 2;
280 case DXGI_FORMAT_Y216: return 2;
281 case DXGI_FORMAT_BC1_TYPELESS: return 4;
282 case DXGI_FORMAT_BC1_UNORM: return 4;
283 case DXGI_FORMAT_BC1_UNORM_SRGB: return 4;
284 case DXGI_FORMAT_BC2_TYPELESS: return 4;
285 case DXGI_FORMAT_BC2_UNORM: return 4;
286 case DXGI_FORMAT_BC2_UNORM_SRGB: return 4;
287 case DXGI_FORMAT_BC3_TYPELESS: return 4;
288 case DXGI_FORMAT_BC3_UNORM: return 4;
289 case DXGI_FORMAT_BC3_UNORM_SRGB: return 4;
290 case DXGI_FORMAT_BC4_TYPELESS: return 4;
291 case DXGI_FORMAT_BC4_UNORM: return 4;
292 case DXGI_FORMAT_BC4_SNORM: return 4;
293 case DXGI_FORMAT_BC5_TYPELESS: return 4;
294 case DXGI_FORMAT_BC5_UNORM: return 4;
295 case DXGI_FORMAT_BC5_SNORM: return 4;
296 case DXGI_FORMAT_BC6H_TYPELESS: return 4;
297 case DXGI_FORMAT_BC6H_UF16: return 4;
298 case DXGI_FORMAT_BC6H_SF16: return 4;
299 case DXGI_FORMAT_BC7_TYPELESS: return 4;
300 case DXGI_FORMAT_BC7_UNORM: return 4;
301 case DXGI_FORMAT_BC7_UNORM_SRGB: return 4;
302 case DXGI_FORMAT_NV11: return 4;
303 case DXGI_FORMAT_R1_UNORM: return 8;
304 default: return 1;
305 }
306 }
307
309 {
310 switch (Format)
311 {
312 case DXGI_FORMAT_NV12: return 2;
313 case DXGI_FORMAT_P010: return 2;
314 case DXGI_FORMAT_P016: return 2;
315 case DXGI_FORMAT_420_OPAQUE: return 2;
316 case DXGI_FORMAT_BC1_TYPELESS: return 4;
317 case DXGI_FORMAT_BC1_UNORM: return 4;
318 case DXGI_FORMAT_BC1_UNORM_SRGB: return 4;
319 case DXGI_FORMAT_BC2_TYPELESS: return 4;
320 case DXGI_FORMAT_BC2_UNORM: return 4;
321 case DXGI_FORMAT_BC2_UNORM_SRGB: return 4;
322 case DXGI_FORMAT_BC3_TYPELESS: return 4;
323 case DXGI_FORMAT_BC3_UNORM: return 4;
324 case DXGI_FORMAT_BC3_UNORM_SRGB: return 4;
325 case DXGI_FORMAT_BC4_TYPELESS: return 4;
326 case DXGI_FORMAT_BC4_UNORM: return 4;
327 case DXGI_FORMAT_BC4_SNORM: return 4;
328 case DXGI_FORMAT_BC5_TYPELESS: return 4;
329 case DXGI_FORMAT_BC5_UNORM: return 4;
330 case DXGI_FORMAT_BC5_SNORM: return 4;
331 case DXGI_FORMAT_BC6H_TYPELESS: return 4;
332 case DXGI_FORMAT_BC6H_UF16: return 4;
333 case DXGI_FORMAT_BC6H_SF16: return 4;
334 case DXGI_FORMAT_BC7_TYPELESS: return 4;
335 case DXGI_FORMAT_BC7_UNORM: return 4;
336 case DXGI_FORMAT_BC7_UNORM_SRGB: return 4;
337 default: return 1;
338 }
339 }
340
342 {
343 switch (Format)
344 {
345 default: checkNoEntry(); [[fallthrough]];
347 return 0;
348
368 return 128;
369
374 return 96;
375
396 case DXGI_FORMAT_Y416:
397 case DXGI_FORMAT_Y210:
398 case DXGI_FORMAT_Y216:
399 return 64;
400
436 case DXGI_FORMAT_AYUV:
437 case DXGI_FORMAT_Y410:
438 case DXGI_FORMAT_P010:
439 case DXGI_FORMAT_P016:
440 case DXGI_FORMAT_YUY2:
441 return 32;
442
458 case DXGI_FORMAT_NV12:
459 case DXGI_FORMAT_NV11:
460 return 16;
461
468 return 8;
469
471 return 1;
472 }
473 }
474
476 {
477 return GetFormatSizeInBits(Format) / 8;
478 }
479
481 {
482 DXGI_FORMAT DXFormat = static_cast<DXGI_FORMAT>(GPixelFormats[PixelFormat].PlatformFormat);
483 switch (DXFormat)
484 {
491 default: return DXFormat;
492 }
493 }
494} // UE::DXGIUtilities
495
496#endif // PLATFORM_MICROSOFT
#define checkNoEntry()
Definition AssertionMacros.h:316
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define THIRD_PARTY_INCLUDES_START
Definition GenericPlatformCompilerPreSetup.h:63
FPixelFormatInfo GPixelFormats[PF_MAX]
Definition PixelFormat.cpp:31
bool IsBlockCompressedFormat(EPixelFormat Format)
Definition PixelFormat.h:312
EPixelFormat
Definition PixelFormat.h:16
ETextureCreateFlags
Definition RHIDefinitions.h:1091
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Voronoi.cpp:10
uint32 PlatformFormat
Definition PixelFormat.h:477