Skip to content

Commit c1849f7

Browse files
committed
Add dkImageFormatGetFlags (format introspection)
1 parent bcf946e commit c1849f7

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

include/deko3d.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,10 @@ enum
379379
DkImageFlags_UsagePresent = 1U << 10, // Specifies that the image will be used with a DkSwapchain.
380380
DkImageFlags_Usage2DEngine = 1U << 11, // Specifies that the image will be used with the 2D Engine (e.g. for transfers between images)
381381
DkImageFlags_UsageVideo = 1U << 12, // Specifies that the image will be used with hardware video encoding/decoding engines
382+
383+
// Informational flags only (for dkImageFormatGetFlags)
384+
DkImageFormatFlags_IsInt = 1U << 16, // Specifies that the image format is pure integer
385+
DkImageFormatFlags_IsDepth = 1U << 17, // Specifies that the image format is for depth/stencil
382386
};
383387

384388
typedef enum DkImageFormat
@@ -498,7 +502,7 @@ typedef enum DkImageFormat
498502
DkImageFormat_BGR565_Unorm,
499503
DkImageFormat_BGR5_Unorm,
500504
DkImageFormat_BGR5A1_Unorm,
501-
DkImageFormat_A5BGR5_Unorm,
505+
DkImageFormat_A1BGR5_Unorm,
502506
DkImageFormat_BGRX8_Unorm,
503507
DkImageFormat_BGRA8_Unorm,
504508
DkImageFormat_BGRX8_Unorm_sRGB,
@@ -1338,6 +1342,8 @@ void dkShaderInitialize(DkShader* obj, DkShaderMaker const* maker);
13381342
bool dkShaderIsValid(DkShader const* obj);
13391343
DkStage dkShaderGetStage(DkShader const* obj);
13401344

1345+
uint32_t dkImageFormatGetFlags(DkImageFormat format);
1346+
13411347
void dkImageLayoutInitialize(DkImageLayout* obj, DkImageLayoutMaker const* maker);
13421348
uint64_t dkImageLayoutGetSize(DkImageLayout const* obj);
13431349
uint32_t dkImageLayoutGetAlignment(DkImageLayout const* obj);

source/maxwell/image_formats.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,41 @@ unsigned maxwell::pickImageMemoryKind(FormatTraits const& traits, uint32_t msMod
131131
// Otherwise just return Generic
132132
return NvKind_Generic_16BX2;
133133
}
134+
135+
uint32_t dkImageFormatGetFlags(DkImageFormat format)
136+
{
137+
if (format < 0 || format >= DkImageFormat_Count)
138+
return 0;
139+
140+
FormatTraits const& traits = formatTraits[format];
141+
uint32_t flags = 0;
142+
143+
if (traits.flags & FormatTraitFlags_CanRender)
144+
flags |= DkImageFlags_UsageRender;
145+
if (traits.flags & FormatTraitFlags_CanLoadStore)
146+
flags |= DkImageFlags_UsageLoadStore;
147+
if (traits.flags & FormatTraitFlags_CanUse2DEngine)
148+
flags |= DkImageFlags_Usage2DEngine;
149+
150+
if (traits.flags & FormatTraitFlags_IsRawInt)
151+
flags |= DkImageFormatFlags_IsInt;
152+
if (traits.depthBits || traits.stencilBits)
153+
flags |= DkImageFormatFlags_IsDepth;
154+
155+
switch (format)
156+
{
157+
default: break;
158+
159+
case DkImageFormat_RGBA8_Unorm:
160+
case DkImageFormat_RGBX8_Unorm_sRGB:
161+
case DkImageFormat_RGBA8_Unorm_sRGB:
162+
case DkImageFormat_RGBX8_Unorm:
163+
case DkImageFormat_BGR565_Unorm:
164+
case DkImageFormat_BGRA8_Unorm:
165+
case DkImageFormat_BGRA8_Unorm_sRGB:
166+
flags |= DkImageFlags_UsagePresent;
167+
break;
168+
}
169+
170+
return flags;
171+
}

0 commit comments

Comments
 (0)