VK_KHR_fragment_shader_barycentric(3)

# VK_KHR_fragment_shader_barycentric(3) Manual Page

## Name

VK_KHR_fragment_shader_barycentric - device extension

Loading… please wait.

## Registered Extension Number

323

## Revision

1

## Ratification Status

Ratified

## Extension and Version Dependencies

VK_KHR_get_physical_device_properties2

## Contact

- Stu Smith

## Extension Proposal

VK_KHR_fragment_shader_barycentric

## Other Extension Metadata

Last Modified Date

  2022-03-10

IP Status

  No known IP claims.

Interactions and External Dependencies

  - This extension requires `SPV_KHR_fragment_shader_barycentric`

  - This extension provides API support for `GL_EXT_fragment_shader_barycentric`

Contributors

  - Stu Smith, AMD

  - Tobias Hector, AMD

  - Graeme Leese, Broadcom

  - Jan-Harald Fredriksen, Arm

  - Slawek Grajewski, Intel

  - Pat Brown, NVIDIA

  - Hans-Kristian Arntzen, Valve

  - Contributors to the VK_NV_fragment_shader_barycentric specification

## Description

This extension is based on the `VK_NV_fragment_shader_barycentric` extension, and adds support for the following SPIR-V extension in Vulkan:

- `SPV_KHR_fragment_shader_barycentric`

The extension provides access to three additional fragment shader variable decorations in SPIR-V:

- `PerVertexKHR`, which indicates that a fragment shader input will not have interpolated values, but instead must be accessed with an extra array index that identifies one of the vertices of the primitive producing the fragment

- `BaryCoordKHR`, which indicates that the variable is a three-component floating-point vector holding barycentric weights for the fragment produced using perspective interpolation

- `BaryCoordNoPerspKHR`, which indicates that the variable is a three-component floating-point vector holding barycentric weights for the fragment produced using linear interpolation

When using GLSL source-based shader languages, the following variables from `GL_EXT_fragment_shader_barycentric` map to these SPIR-V built-in decorations:

- `in vec3 gl_BaryCoordEXT;` → `BaryCoordKHR`

- `in vec3 gl_BaryCoordNoPerspEXT;` → `BaryCoordNoPerspKHR`

GLSL variables declared using the `pervertexEXT` GLSL qualifier are expected to be decorated with `PerVertexKHR` in SPIR-V.

## New Structures

- Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:

  - VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR

- Extending VkPhysicalDeviceProperties2:

  - VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR

## New Enum Constants

- `VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME`

- `VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION`

- Extending VkStructureType:

  - `VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR`

  - `VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR`

## New Built-In Variables

- `BaryCoordKHR`

- `BaryCoordNoPerspKHR`

## New SPIR-V Decorations

- `PerVertexKHR`

## New SPIR-V Capabilities

- `FragmentBarycentricKHR`

## Issues

1) What are the interactions with MSAA and how are `BaryCoordKHR` and `BaryCoordNoPerspKHR` interpolated?

RESOLVED: The inputs decorated with `BaryCoordKHR` or `BaryCoordNoPerspKHR` may also be decorated with the `Centroid` or `Sample` qualifiers to specify interpolation, like any other fragment shader input. If `shaderSampleRateInterpolationFunctions` is enabled, the extended instructions InterpolateAtCentroid, InterpolateAtOffset, and InterpolateAtSample from the GLSL.std.450 may also be used with inputs decorated with `BaryCoordKHR` or `BaryCoordNoPerspKHR`.

## Version History

- Revision 1, 2022-03-10 (Stu Smith)

  - Initial revision

## See Also

VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR, VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR

## 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.

## Copyright

Copyright 2014-2023 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0