vulkan-3.26.1: Bindings to the Vulkan graphics API.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Vulkan.Extensions.VK_QCOM_ycbcr_degamma

Description

Name

VK_QCOM_ycbcr_degamma - device extension

VK_QCOM_ycbcr_degamma

Name String
VK_QCOM_ycbcr_degamma
Extension Type
Device extension
Registered Extension Number
521
Revision
1
Ratification Status
Not ratified
Extension and Version Dependencies; Contact

Other Extension Metadata

Last Modified Date
2023-07-31
IP Status
No known IP claims.
Interactions and External Dependencies
None
Contributors
  • Jeff Leger, Qualcomm
  • Jonathan Wicks, Qualcomm

Description

This extension allows implementations to expose support for “sRGB EOTF” also known as “sRGB degamma”, used in combination with images using 8-bit Y′CBCR formats. In addition, the degamma can be selectively applied to the Y (luma) or CrCb (chroma).

VK_KHR_sampler_ycbcr_conversion adds support for Y′CBCR conversion, but allows texture sampling in a non-linear space which can cause artifacts. This extension allows implementations to expose sRGB degamma for Y′CBCR formats, which is performed during texture filtering, allowing texture filtering to operate in a linear space.

New Structures

New Enum Constants

Issues

1) Which Y′CBCR formats support the degamma feature?

RESOLVED: For implementations that support the extension, each format that contains 8-bit R, G, and B components and supports either FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT or FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT must support degamma.

Since non-compressed Vulkan sRGB formats are already limited to 8-bit components, and since Adreno supports degamma for all 8bit Y′CBCR formats, this extension does not introduce a new VK_FORMAT_FEATURE* bit for the degamma feature.

2) On which Y′CBCR components is the degamma applied?

RESOLVED: While degamma is expected to be applied to only the Y (luma) component, the extension provides the ability to selectively enable degamma for both the Y (luma) and/or CbCr (chroma) components.

3) Should degamma be enabled for the sampler object or for the image view object?

RESOLVED: Both. This extension extends SamplerYcbcrConversionCreateInfo and the specification already requires that both sampler and view objects must be created with an identical SamplerYcbcrConversionCreateInfo in their pNext chains.

4) Why apply the “sRGB” transfer function directly to Y′CBCR data when it would be more correct to use the “ITU transfer function”, and do so only after the values have been converted into non-linear R’G’B'?

RESOLVED: Y′CBCR is frequently stored according to standards (e.g. BT.601 and BT.709) that specify that the conversion between linear and non-linear should use the ITU Transfer function. The ITU transfer function is mathematically different from the sRGB transfer function and while sRGB and ITU define similar curves, the difference is significant. Performing the “sRGB degamma” prior to range expansion can introduce artifacts if the content uses SAMPLER_YCBCR_RANGE_ITU_NARROW encoding. Nevertheless, using sRGB can make sense for certain use-cases where camera YCbCr images are known to be encoded with sRGB (or a pure gamma 2.2) transfer function and are known to use full-range encoding.

For those use-cases, this extension leverages the GPU ability to enable sRGB degamma at little cost, and can improve quality because texture filtering is able to occur in linear space.

Version History

  • Revision 1, 2023-07-31 (Jeff Leger)

See Also

PhysicalDeviceYcbcrDegammaFeaturesQCOM, SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM

Document Notes

For more information, see the Vulkan Specification

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

Synopsis

Documentation

data PhysicalDeviceYcbcrDegammaFeaturesQCOM Source #

VkPhysicalDeviceYcbcrDegammaFeaturesQCOM - Structure describing Y′CBCR degamma features that can be supported by an implementation

Members

This structure describes the following features:

Description

If the PhysicalDeviceYcbcrDegammaFeaturesQCOM structure is included in the pNext chain of the PhysicalDeviceFeatures2 structure passed to getPhysicalDeviceFeatures2, it is filled in to indicate whether each corresponding feature is supported. PhysicalDeviceYcbcrDegammaFeaturesQCOM can also be used in the pNext chain of DeviceCreateInfo to selectively enable these features.

Valid Usage (Implicit)

See Also

VK_QCOM_ycbcr_degamma, Bool32, StructureType

Constructors

PhysicalDeviceYcbcrDegammaFeaturesQCOM 

Fields

Instances

Instances details
Storable PhysicalDeviceYcbcrDegammaFeaturesQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

Show PhysicalDeviceYcbcrDegammaFeaturesQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

Eq PhysicalDeviceYcbcrDegammaFeaturesQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

FromCStruct PhysicalDeviceYcbcrDegammaFeaturesQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

ToCStruct PhysicalDeviceYcbcrDegammaFeaturesQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

Zero PhysicalDeviceYcbcrDegammaFeaturesQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

data SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM Source #

VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM - Structure specifying Y′CBCR degamma parameters

Valid Usage (Implicit)

See Also

VK_QCOM_ycbcr_degamma, Bool32, StructureType

Constructors

SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM 

Fields

Instances

Instances details
Storable SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

Show SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

Eq SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

FromCStruct SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

ToCStruct SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

Zero SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM Source # 
Instance details

Defined in Vulkan.Extensions.VK_QCOM_ycbcr_degamma

pattern QCOM_YCBCR_DEGAMMA_SPEC_VERSION :: forall a. Integral a => a Source #

type QCOM_YCBCR_DEGAMMA_EXTENSION_NAME = "VK_QCOM_ycbcr_degamma" Source #

pattern QCOM_YCBCR_DEGAMMA_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #