vk: prototype dds/pf_bc* loading support
known issues: - doesn't handle mips properly yet.
This commit is contained in:
parent
0a5f061ba3
commit
7cbd34ebdb
|
@ -51,6 +51,9 @@ void initTextures( void ) {
|
||||||
memset( vk_texturesHashTable, 0, sizeof( vk_texturesHashTable ));
|
memset( vk_texturesHashTable, 0, sizeof( vk_texturesHashTable ));
|
||||||
vk_numTextures = 0;
|
vk_numTextures = 0;
|
||||||
|
|
||||||
|
// TODO really check device caps for this
|
||||||
|
gEngine.Image_AddCmdFlags( IL_DDS_HARDWARE );
|
||||||
|
|
||||||
tglob.default_sampler_fixme = pickSamplerForFlags(0);
|
tglob.default_sampler_fixme = pickSamplerForFlags(0);
|
||||||
ASSERT(tglob.default_sampler_fixme != VK_NULL_HANDLE);
|
ASSERT(tglob.default_sampler_fixme != VK_NULL_HANDLE);
|
||||||
|
|
||||||
|
@ -447,6 +450,10 @@ static VkFormat VK_GetFormat(pixformat_t format, colorspace_hint_e colorspace_hi
|
||||||
return (colorspace_hint == kColorspaceLinear)
|
return (colorspace_hint == kColorspaceLinear)
|
||||||
? VK_FORMAT_R8G8B8A8_UNORM
|
? VK_FORMAT_R8G8B8A8_UNORM
|
||||||
: VK_FORMAT_R8G8B8A8_SRGB;
|
: VK_FORMAT_R8G8B8A8_SRGB;
|
||||||
|
case PF_BC7:
|
||||||
|
return (colorspace_hint == kColorspaceLinear)
|
||||||
|
? VK_FORMAT_BC7_UNORM_BLOCK
|
||||||
|
: VK_FORMAT_BC7_SRGB_BLOCK;
|
||||||
default:
|
default:
|
||||||
WARN("FIXME unsupported pixformat_t %d", format);
|
WARN("FIXME unsupported pixformat_t %d", format);
|
||||||
return VK_FORMAT_UNDEFINED;
|
return VK_FORMAT_UNDEFINED;
|
||||||
|
@ -477,11 +484,14 @@ static size_t CalcImageSize( pixformat_t format, int width, int height, int dept
|
||||||
break;
|
break;
|
||||||
case PF_DXT3:
|
case PF_DXT3:
|
||||||
case PF_DXT5:
|
case PF_DXT5:
|
||||||
|
case PF_BC6H_SIGNED:
|
||||||
|
case PF_BC6H_UNSIGNED:
|
||||||
|
case PF_BC7:
|
||||||
case PF_ATI2:
|
case PF_ATI2:
|
||||||
size = (((width + 3) >> 2) * ((height + 3) >> 2) * 16) * depth;
|
size = (((width + 3) >> 2) * ((height + 3) >> 2) * 16) * depth;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ERR("unsupported pixformat_t %d", format);
|
ERR("%s: unsupported pixformat_t %d", __FUNCTION__, format);
|
||||||
ASSERT(!"Unsupported format encountered");
|
ASSERT(!"Unsupported format encountered");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -740,13 +750,17 @@ static qboolean uploadTexture(vk_texture_t *tex, rgbdata_t *const *const layers,
|
||||||
int mipCount = 0;
|
int mipCount = 0;
|
||||||
|
|
||||||
// TODO non-rbga textures
|
// TODO non-rbga textures
|
||||||
|
if (format == VK_FORMAT_UNDEFINED) {
|
||||||
|
ERR("Unsupported PF format %d", layers[0]->type);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!validatePicLayers(tex, layers, num_layers))
|
if (!validatePicLayers(tex, layers, num_layers))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
tex->width = layers[0]->width;
|
tex->width = layers[0]->width;
|
||||||
tex->height = layers[0]->height;
|
tex->height = layers[0]->height;
|
||||||
mipCount = CalcMipmapCount( tex, true);
|
mipCount = CalcMipmapCount( tex, true );
|
||||||
|
|
||||||
DEBUG("Uploading texture[%d] %s, mips=%d, layers=%d", (int)(tex-vk_textures), tex->name, mipCount, num_layers);
|
DEBUG("Uploading texture[%d] %s, mips=%d, layers=%d", (int)(tex-vk_textures), tex->name, mipCount, num_layers);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue