VK_EXT_texture_compression_astc_3d.proposal

This document proposes adding support for ASTC 3D formats.

Problem Statement

The Adaptive Scalable Texture Compression (ASTC) format supports compression modes of 3D blocks. These formats have been exposed in other APIs, like OpenGL ES via the GL_OES_texture_compression_astc extension, but have not been exposed in Vulkan.

This proposal aims to provide this functionality.

Solution Space

The ASTC 3D formats need to be exposed as a new set of formats.

Similar to other extensions that only add new formats, there is a feature bit that indicates support for all the added formats. Implementations can report support for a subset of the added formats through the format enumeration queries such as vkGetPhysicalDeviceImageFormatProperties2.

Proposal

API Features

The following features are exposed by this extension:

typedef struct VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT {
    VkStructureType    sType;
    void*              pNext;
    VkBool32           textureCompressionASTC_3D;
} VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT;

textureCompressionASTC_3D is the core feature enabling this extension’s functionality.

New format enumerations are added:

typedef enum VkFormat {
    ...
    VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT = ...,
    VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT = ...,
    ...
} VkFormat;

Issues

No known issues.