mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-02-20 01:58:06 +00:00
* Update release number to 84. Public Issues: * Fix code sample in the `<<VK_EXT_debug_utils>>` extension (public issue 751). * Fix misleading comment in `vk.xml` for slink:VkDescriptorBufferInfo::pname:buffer (public pull request 762). * Fix formatting of deprecation attributes in schema doc (public pull request 767). * Change `can` to `may` in the description of elink:VkSparseImageFormatFlagBits, which are return values from queries (public pull request 768). * Prettify generated contact list in extension appendices, adding logos and a New Issue link (public pull request 770). * Enable sRGB conversion based on the image view format, not the image format, in the <<textures-format-conversion, Format Conversion>> section (public pull request 773). * Fix typo in equation in the <<primsrast-lines-basic, Basic Line Segment Rasterization>> section (public pull request 780). * Fix special characters in GitHub contacts links (public pull request 783). * Make clean_pdf target remove pdf folder (public pull request 784). * Fix styleguide bad markup of block continuation (public pull request 792). Other Issues: * Allow a zero vertex attribute divisor in the `<<VK_EXT_vertex_attribute_divisor>>` extension, exposed via the slink:VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT feature. * Add missing `structextends="VkDeviceCreateInfo"` to slink:VkPhysicalDeviceShaderDrawParameterFeatures and slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT. New Extensions: * `VK_KHR_memory_model` * `VK_EXT_astc_decode_mode` * `VK_EXT_inline_uniform_block`
114 lines
3.5 KiB
Plaintext
114 lines
3.5 KiB
Plaintext
// Copyright (c) 2018 Khronos Group. This work is licensed under a
|
|
// Creative Commons Attribution 4.0 International License; see
|
|
// http://creativecommons.org/licenses/by/4.0/
|
|
|
|
include::meta/VK_EXT_astc_decode_mode.txt[]
|
|
|
|
Last Modified Date::
|
|
2018-08-07
|
|
Contributors::
|
|
- Jan-Harald Fredriksen, Arm
|
|
|
|
The existing specification requires that low dynamic range (LDR) ASTC
|
|
textures are decompressed to FP16 values per component.
|
|
In many cases, decompressing LDR textures to a lower precision intermediate
|
|
result gives acceptable image quality.
|
|
Source material for LDR textures is typically authored as 8-bit UNORM
|
|
values, so decoding to FP16 values adds little value.
|
|
On the other hand, reducing precision of the decoded result reduces the size
|
|
of the decompressed data, potentially improving texture cache performance
|
|
and saving power.
|
|
|
|
The goal of this extension is to enable this efficiency gain on existing
|
|
ASTC texture data.
|
|
This is achieved by giving the application the ability to select the
|
|
intermediate decoding precision.
|
|
|
|
Three decoding options are provided:
|
|
|
|
* Decode to elink:VK_FORMAT_R16G16B16A16_SFLOAT precision: This is the
|
|
default, and matches the required behavior in the core API.
|
|
* Decode to elink:VK_FORMAT_R8G8B8A8_UNORM precision: This is provided as
|
|
an option in LDR mode.
|
|
* Decode to elink:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 precision: This is
|
|
provided as an option in both LDR and HDR mode.
|
|
In this mode, negative values cannot be represented and are clamped to
|
|
zero.
|
|
The alpha component is ignored, and the results are as if alpha was 1.0.
|
|
This decode mode is optional and support can be queried via the physical
|
|
device properties.
|
|
|
|
=== New Enum Constants
|
|
|
|
* Extending elink:VkStructureType:
|
|
** ename:VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT
|
|
|
|
=== New Enums
|
|
|
|
None.
|
|
|
|
=== New Structures
|
|
|
|
* slink:VkImageViewASTCDecodeModeEXT
|
|
* slink:VkPhysicalDeviceASTCDecodeFeaturesEXT
|
|
|
|
=== New Functions
|
|
|
|
None.
|
|
|
|
=== Issues
|
|
|
|
1) Are implementations allowed to decode at a higher precision than what is
|
|
requested?
|
|
|
|
RESOLUTION: No.
|
|
If we allow this, then this extension could be exposed on all
|
|
implementations that support ASTC.
|
|
But developers would have no way of knowing what precision was actually
|
|
used, and thus whether the image quality is sufficient at reduced
|
|
precision.
|
|
|
|
2) Should the decode mode be image view state and/or sampler state?
|
|
|
|
RESOLUTION: Image view state only.
|
|
Some implementations treat the different decode modes as different
|
|
texture formats.
|
|
|
|
=== Example
|
|
|
|
Create an image view that decodes to VK_FORMAT_R8G8B8A8_UNORM precision:
|
|
|
|
[source,c++]
|
|
----------------------------------------
|
|
|
|
VkImageViewASTCDecodeModeEXT decodeMode =
|
|
{
|
|
VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, // sType
|
|
NULL, // pNext
|
|
VK_FORMAT_R8G8B8A8_UNORM // decode mode
|
|
};
|
|
|
|
VkImageViewCreateInfo createInfo =
|
|
{
|
|
VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // sType
|
|
&decodeMode, // pNext
|
|
// flags, image, viewType set to application-desired values
|
|
VK_FORMAT_ASTC_8x8_UNORM_BLOCK, // format
|
|
// components, subresourceRange set to application-desired values
|
|
};
|
|
|
|
VkImageView imageView;
|
|
VkResult result = vkCreateImageView(
|
|
device,
|
|
&createInfo,
|
|
NULL,
|
|
&imageView);
|
|
----------------------------------------
|
|
|
|
=== Version History
|
|
|
|
* Revision 1, 2018-08-07 (Jan-Harald Fredriksen)
|
|
- Initial revision
|
|
|