blob: 921fd993af60498f45ad8b69574897c179d9c5e5 [file] [log] [blame]
Name Strings
Graham Sellers, AMD (graham.sellers 'at'
Last Modified Date: 12/12/2013
Author Revision: 2
OpenGL Extension #444
OpenGL 2.0 or ARB_fragment_shader is required.
The AMD_shader_stencil_export extension affects the definition of this
The AMD_stencil_operation_extended extension is required.
This extension is written against the OpenGL Shading Language (GLSL)
Specification, Version 4.00.7.
OpenGL includes stencil testing functionality that allows an application
specified value (the reference value) to be compared against the content
of a stencil buffer and fragments kept or discarded based on the results
of this test. In addition to updating the stencil buffer with simple
operations such as inversion or incrementation, this reference value may be
written directly into the stencil buffer.
AMD_stencil_operation_extended further extended the number of
operations that may be performed on the stencil buffer to include logical
and arithmetic operations. It also introduced new state, the stencil
operation source value, to allow these new operations to be performed on
the stencil buffer using an application supplied constant value as a source
value, rather than the reference value used in the stencil test.
The AMD_shader_stencil_export extension allowed the reference value
used for the stencil test to be generated and exported from a fragment
shader. This extension provides similar functionality for the stencil
operation source value, allowing it to be generated in and exported from
the fragment shader too.
IP Status
New Procedures and Functions
New Tokens
Modifications to the OpenGL 4.0 (Core Profile) Specification
Modifications to Chapter 3 of the OpenGL Shading Language Specification,
Version 4.00.7
Add new Section 3.3.x, GL_AMD_shader_stencil_value_export Extension, p.15
3.3.x GL_AMD_shader_stencil_value_export
To use the GL_AMD_shader_stencil_value_export extension in a shader it must
be enabled using the #extension directive.
The shading language preprocessor #define GL_AMD_shader_stencil_value_export
will be defined to 1 if the GL_AMD_shader_stencil_value_export extension is
Modifications to Chapter 7 of the OpenGL Shading Language Specification,
Version 4.00.7 (Built-in Variables)
Modify Section 7.1, "Built-in Language Variables":
Add to the list of built-in special variables for the fragment language,
out int gl_FragStencilValueAMD;
Insert the following paragraph, after the paragraph describing
gl_FragStencilRefAMD (as introduced by AMD_shader_stencil_export) on p.89:
Writing to gl_FragStencilValueAMD will establish the stencil operation
source value for the fragment being processed. Only the least significant
STENCIL_BITS bits of the integer gl_FragStencilValueAMD are considered and
higher order bits are discarded. If stencil buffering is enabled and no
shader writes to gl_FragStencilValueAMD, the fixed function value for
stencil operation source will be used as the fragment's stencil operation
source value. If a shader statically assignes a value to
gl_FragStencilValueAMD, and there is an execution path through the shader
that does not set gl_FragStencilValueAMD, then the value of the fragment's
stencil operation source value may be undefined for executions of the
shader that take that path. That is, if the set of linked shaders
statically contain a write to gl_FragStencilValueAMD, then it is
responsible for always writing it.
Modify the paragraph on p.89, describing the 'discard' keyword:
If a shader executes the discard keyword, the fragment is discarded, and
the values of any user-defined fragment outputs, gl_FragDepth,
gl_FragStencilRefAMD, and gl_FragStencilValueAMD become irrelevant.
Additions to the AGL/GLX/WGL Specifications
GLX Protocol
New State
New Implementation Dependent State
Dependencies on AMD_shader_stencil_export
If AMD_shader_stencil_export is not supported, remove all references to
1) What is the behavior of gl_FragStencilValueAMD with respect to masks,
significant bits and so on?
The behavior of the value written to gl_FragStencilValueAMD is the same
as that of the fixed function value set through glStencilOpValueAMD. That
is, the value is not masked until the result of the operation is written
to the stencil buffer. Bits that cannot be represented by the stencil
buffer are simply discarded.
Revision History
Rev. Date Author Changes
---- ---------- -------- -----------------------------------------
2 12/12/2013 gsellers Minor cleanup ready for posting.
1 06/10/2010 gsellers Initial revision