| // Copyright 2014-2021 The Khronos Group, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_KHR_sampler_mirror_clamp_to_edge.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2019-08-17 |
| *Interactions and External Dependencies*:: |
| - Promoted to Vulkan 1.2 Core |
| *Contributors*:: |
| - Tobias Hector, Imagination Technologies |
| - Jon Leech, Khronos |
| |
| === Description |
| |
| `VK_KHR_sampler_mirror_clamp_to_edge` extends the set of sampler address |
| modes to include an additional mode |
| (ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE) that effectively uses a |
| texture map twice as large as the original image in which the additional |
| half of the new image is a mirror image of the original image. |
| |
| This new mode relaxes the need to generate images whose opposite edges match |
| by using the original image to generate a matching "`mirror image`". |
| This mode allows the texture to be mirrored only once in the negative s, t, |
| and r directions. |
| |
| === Promotion to Vulkan 1.2 |
| |
| All functionality in this extension is included in core Vulkan 1.2. |
| However, if Vulkan 1.2 is supported and this extension is not, the |
| elink:VkSamplerAddressMode |
| ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional. |
| Since the original extension did not use an author suffix on the enum |
| ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, it is used by both core |
| and extension implementations. |
| |
| include::{generated}/interfaces/VK_KHR_sampler_mirror_clamp_to_edge.txt[] |
| |
| === Example |
| |
| Creating a sampler with the new address mode in each dimension |
| |
| |
| [source,c++] |
| ---------------------------------------- |
| VkSamplerCreateInfo createInfo = |
| { |
| VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO // sType |
| // Other members set to application-desired values |
| }; |
| |
| createInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; |
| createInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; |
| createInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; |
| |
| VkSampler sampler; |
| VkResult result = vkCreateSampler( |
| device, |
| &createInfo, |
| &sampler); |
| ---------------------------------------- |
| |
| === Issues |
| |
| 1) Why are both KHR and core versions of the |
| ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE token present? |
| |
| *RESOLVED*: This functionality was intended to be required in Vulkan 1.0. |
| We realized shortly before public release that not all implementations could |
| support it, and moved the functionality into an optional extension, but did |
| not apply the KHR extension suffix. |
| Adding a KHR-suffixed alias of the non-suffixed enum has been done to comply |
| with our own naming rules. |
| |
| In a related change, before spec revision 1.1.121 this extension was |
| hardwiring into the spec Makefile so it was always included with the |
| Specification, even in the core-only versions. |
| This has now been reverted, and it is treated as any other extension. |
| |
| === Version History |
| |
| * Revision 1, 2016-02-16 (Tobias Hector) |
| - Initial draft |
| * Revision 2, 2019-08-14 (Jon Leech) |
| - Add KHR-suffixed alias of non-suffixed enum. |
| * Revision 3, 2019-08-17 (Jon Leech) |
| - Add an issue explaining the reason for the extension API not being |
| suffixed with KHR. |