org.lwjgl.vulkan.NVXMultiviewPerViewAttributes Maven / Gradle / Ivy
Show all versions of lwjgl-vulkan Show documentation
/*
* Copyright LWJGL. All rights reserved.
* License terms: https://www.lwjgl.org/license
* MACHINE GENERATED FILE, DO NOT EDIT
*/
package org.lwjgl.vulkan;
/**
* This extension adds a new way to write shaders to be used with multiview subpasses, where the attributes for all views are written out by a single invocation of the vertex processing stages. Related SPIR-V and GLSL extensions {@code SPV_NVX_multiview_per_view_attributes} and {@code GL_NVX_multiview_per_view_attributes} introduce per-view position and viewport mask attributes arrays, and this extension defines how those per-view attribute arrays are interpreted by Vulkan. Pipelines using per-view attributes may only execute the vertex processing stages once for all views rather than once per-view, which reduces redundant shading work.
*
* A subpass creation flag controls whether the subpass uses this extension. A subpass must either exclusively use this extension or not use it at all.
*
* Some Vulkan implementations only support the position attribute varying between views in the X component. A subpass can declare via a second creation flag whether all pipelines compiled for this subpass will obey this restriction.
*
* Shaders that use the new per-view outputs (e.g. {@code gl_PositionPerViewNV}) must also write the non-per-view output ({@code gl_Position}), and the values written must be such that {@code gl_Position = gl_PositionPerViewNV[gl_ViewIndex]} for all views in the subpass. Implementations are free to either use the per-view outputs or the non-per-view outputs, whichever would be more efficient.
*
* If {@link NVViewportArray2 VK_NV_viewport_array2} is not also supported and enabled, the per-view viewport mask must not be used.
*
* Examples
*
*
* #version 450 core
*
* #extension GL_KHX_multiview : enable
* #extension GL_NVX_multiview_per_view_attributes : enable
*
* layout(location = 0) in vec4 position;
* layout(set = 0, binding = 0) uniform Block { mat4 mvpPerView[2]; } buf;
*
* void main()
* {
* // Output both per-view positions and gl_Position as a function
* // of gl_ViewIndex
* gl_PositionPerViewNV[0] = buf.mvpPerView[0] * position;
* gl_PositionPerViewNV[1] = buf.mvpPerView[1] * position;
* gl_Position = buf.mvpPerView[gl_ViewIndex] * position;
* }
*
*
* - Name String
* - {@code VK_NVX_multiview_per_view_attributes}
* - Extension Type
* - Device extension
* - Registered Extension Number
* - 98
* - Revision
* - 1
* - Extension and Version Dependencies
*
* - Requires Vulkan 1.0
* - Requires {@link KHXMultiview VK_KHX_multiview}
*
* - Contact
*
* - Jeff Bolz @jbolz
*
* - Last Modified Date
* - 2017-01-13
* - IP Status
* - No known IP claims.
* - Interactions and External Dependencies
*
* - This extension requires the SPV_NVX_multiview_per_view_attributes SPIR-V extension.
* - This extension requires the GL_NVX_multiview_per_view_attributes extension for GLSL source languages.
* - This extension interacts with {@link NVViewportArray2 VK_NV_viewport_array2}.
*
* - Contributors
*
* - Jeff Bolz, NVIDIA
* - Daniel Koch, NVIDIA
*
*
*/
public final class NVXMultiviewPerViewAttributes {
/** The extension specification version. */
public static final int VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION = 1;
/** The extension name. */
public static final String VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME = "VK_NVX_multiview_per_view_attributes";
/** Extends {@code VkStructureType}. */
public static final int VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000;
/**
* Extends {@code VkSubpassDescriptionFlagBits}.
*
* Enum values:
*
*
* - {@link #VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX}
* - {@link #VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX}
*
*/
public static final int
VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x1,
VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x2;
private NVXMultiviewPerViewAttributes() {}
}