imagelib: check flags for DDS and KTX2 support

- Checks for `IL_DDS_HARDWARE` support for compressed formats in KTX2
- Checks for `IL_KTX2_RAW` before providing raw KTX2 data
This commit is contained in:
Ivan Avdeev 2023-10-16 12:17:35 -04:00
parent ee81a7228d
commit 1834f388b8
3 changed files with 10 additions and 1 deletions

View File

@ -69,6 +69,7 @@ typedef enum
IL_LOAD_DECAL = BIT(5), // special mode for load gradient decals
IL_OVERVIEW = BIT(6), // overview required some unque operations
IL_LOAD_PLAYER_DECAL = BIT(7), // special mode for player decals
IL_KTX2_RAW = BIT(8), // renderer can consume raw KTX2 files (e.g. ref_vk)
} ilFlags_t;
// goes into rgbdata_t->encode

View File

@ -114,6 +114,11 @@ static qboolean Image_KTX2Parse( const ktx2_header_t *header, const byte *buffer
return false;
}
if( !Image_CheckFlag( IL_DDS_HARDWARE ) && ImageCompressed( image.type )) {
Con_DPrintf(S_WARN "%s: has compressed format, but support is not advertized\n", __FUNCTION__);
return false;
}
if (header->pixelDepth > 1) {
Con_DPrintf(S_ERROR "%s: unsupported KTX2 pixelDepth %d\n", __FUNCTION__, header->pixelDepth);
return false;
@ -197,6 +202,9 @@ qboolean Image_LoadKTX2( const char *name, const byte *buffer, fs_offset_t files
image.num_mips = 1;
if (!Image_KTX2Parse(&header, buffer, filesize)) {
if (!Image_CheckFlag( IL_KTX2_RAW ))
return false;
// If KTX2 to imagelib conversion failed, try passing the file as raw data.
// This is useful for ref_vk which can directly support hundreds of formats which we don't convert to pixformat_t here

View File

@ -52,7 +52,7 @@ void initTextures( void ) {
vk_numTextures = 0;
// TODO really check device caps for this
gEngine.Image_AddCmdFlags( IL_DDS_HARDWARE );
gEngine.Image_AddCmdFlags( IL_DDS_HARDWARE | IL_KTX2_RAW );
tglob.default_sampler_fixme = pickSamplerForFlags(0);
ASSERT(tglob.default_sampler_fixme != VK_NULL_HANDLE);