Class NVGeometryShaderPassthrough
- java.lang.Object
-
- org.lwjgl.vulkan.NVGeometryShaderPassthrough
-
public final class NVGeometryShaderPassthrough extends java.lang.ObjectThis extension adds support for the following SPIR-V extension in Vulkan:SPV_NV_geometry_shader_passthrough
Geometry shaders provide the ability for applications to process each primitive sent through the graphics pipeline using a programmable shader. However, one common use case treats them largely as a "
passthrough". In this use case, the bulk of the geometry shader code simply copies inputs from each vertex of the input primitive to corresponding outputs in the vertices of the output primitive. Such shaders might also compute values for additional built-in or user-defined per-primitive attributes (e.g.,Layer) to be assigned to all the vertices of the output primitive.This extension provides access to the
PassthroughNVdecoration under theGeometryShaderPassthroughNVcapability. Adding this to a geometry shader input variable specifies that the values of this input are copied to the corresponding vertex of the output primitive.When using GLSL source-based shading languages, the
passthroughlayout qualifier fromGL_NV_geometry_shader_passthroughmaps to thePassthroughNVdecoration. To use thepassthroughlayout, in GLSL theGL_NV_geometry_shader_passthroughextension must be enabled. Behaviour is described in theGL_NV_geometry_shader_passthroughextension specification.Sample Code
Consider the following simple geometry shader in unextended GLSL:
layout(triangles) in; layout(triangle_strip) out; layout(max_vertices=3) out; in Inputs { vec2 texcoord; vec4 baseColor; } v_in[]; out Outputs { vec2 texcoord; vec4 baseColor; }; void main() { int layer = compute_layer(); for (int i = 0; i < 3; i++) { gl_Position = gl_in[i].gl_Position; texcoord = v_in[i].texcoord; baseColor = v_in[i].baseColor; gl_Layer = layer; EmitVertex(); } }In this shader, the inputs
gl_Position,Inputs.texcoord, andInputs.baseColorare simply copied from the input vertex to the corresponding output vertex. The only "interesting" work done by the geometry shader is computing and emitting agl_Layervalue for the primitive.The following geometry shader, using this extension, is equivalent:
#extension GL_NV_geometry_shader_passthrough : require layout(triangles) in; // No output primitive layout qualifiers required. // Redeclare gl_PerVertex to pass through "gl_Position". layout(passthrough) in gl_PerVertex { vec4 gl_Position; } gl_in[]; // Declare "Inputs" with "passthrough" to automatically copy members. layout(passthrough) in Inputs { vec2 texcoord; vec4 baseColor; } v_in[]; // No output block declaration required. void main() { // The shader simply computes and writes gl_Layer. We don't // loop over three vertices or call EmitVertex(). gl_Layer = compute_layer(); }- Name String
VK_NV_geometry_shader_passthrough- Extension Type
- Device extension
- Registered Extension Number
- 96
- Revision
- 1
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Contact
- Daniel Koch dgkoch
- Last Modified Date
- 2017-02-15
- Interactions and External Dependencies
- This extension requires the
SPV_NV_geometry_shader_passthroughSPIR-V extension. - This extension requires the
GL_NV_geometry_shader_passthroughextension for GLSL source languages. - This extension requires the
geometryShaderfeature.
- This extension requires the
- Contributors
- Piers Daniell, NVIDIA
- Jeff Bolz, NVIDIA
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringVK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAMEThe extension name.static intVK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSIONThe extension specification version.
-
-
-
Field Detail
-
VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION
public static final int VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION
The extension specification version.- See Also:
- Constant Field Values
-
VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME
public static final java.lang.String VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME
The extension name.- See Also:
- Constant Field Values
-
-