mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 00:49:04 +02:00
glsl: Add new builtins required by GL_ARB_sample_shading
New builtins added by GL_ARB_sample_shading:
in vec2 gl_SamplePosition
in int gl_SampleID
in int gl_NumSamples
out int gl_SampleMask[]
V2: - Use SWIZZLE_XXXX for STATE_NUM_SAMPLES.
- Use "result.samplemask" in arb_output_attrib_string.
- Add comment to explain the size of gl_SampleMask[] array.
- Make gl_SampleID and gl_SamplePosition system values.
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
0d69e8c813
commit
e849511c78
3 changed files with 28 additions and 1 deletions
|
|
@ -30,6 +30,9 @@
|
|||
#include "program/prog_statevars.h"
|
||||
#include "program/prog_instruction.h"
|
||||
|
||||
static struct gl_builtin_uniform_element gl_NumSamples_elements[] = {
|
||||
{NULL, {STATE_NUM_SAMPLES, 0, 0}, SWIZZLE_XXXX}
|
||||
};
|
||||
|
||||
static struct gl_builtin_uniform_element gl_DepthRange_elements[] = {
|
||||
{"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX},
|
||||
|
|
@ -236,6 +239,7 @@ static struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = {
|
|||
#define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)}
|
||||
|
||||
static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = {
|
||||
STATEVAR(gl_NumSamples),
|
||||
STATEVAR(gl_DepthRange),
|
||||
STATEVAR(gl_ClipPlane),
|
||||
STATEVAR(gl_Point),
|
||||
|
|
@ -662,6 +666,7 @@ builtin_variable_generator::generate_constants()
|
|||
void
|
||||
builtin_variable_generator::generate_uniforms()
|
||||
{
|
||||
add_uniform(int_t, "gl_NumSamples");
|
||||
add_uniform(type("gl_DepthRangeParameters"), "gl_DepthRange");
|
||||
add_uniform(array(vec4_t, VERT_ATTRIB_MAX), "gl_CurrentAttribVertMESA");
|
||||
add_uniform(array(vec4_t, VARYING_SLOT_MAX), "gl_CurrentAttribFragMESA");
|
||||
|
|
@ -838,6 +843,19 @@ builtin_variable_generator::generate_fs_special_vars()
|
|||
if (state->AMD_shader_stencil_export_warn)
|
||||
var->warn_extension = "GL_AMD_shader_stencil_export";
|
||||
}
|
||||
|
||||
if (state->ARB_sample_shading_enable) {
|
||||
add_system_value(SYSTEM_VALUE_SAMPLE_ID, int_t, "gl_SampleID");
|
||||
add_system_value(SYSTEM_VALUE_SAMPLE_POS, vec2_t, "gl_SamplePosition");
|
||||
/* From the ARB_sample_shading specification:
|
||||
* "The number of elements in the array is ceil(<s>/32), where
|
||||
* <s> is the maximum number of color samples supported by the
|
||||
* implementation."
|
||||
* Since no drivers expose more than 32x MSAA, we can simply set
|
||||
* the array size to 1 rather than computing it.
|
||||
*/
|
||||
add_output(FRAG_RESULT_SAMPLE_MASK, array(int_t, 1), "gl_SampleMask");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -274,6 +274,11 @@ typedef enum
|
|||
#define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V))
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
* Bitflags for system values.
|
||||
*/
|
||||
#define SYSTEM_BIT_SAMPLE_ID BITFIELD64_BIT(SYSTEM_VALUE_SAMPLE_ID)
|
||||
#define SYSTEM_BIT_SAMPLE_POS BITFIELD64_BIT(SYSTEM_VALUE_SAMPLE_POS)
|
||||
|
||||
/**
|
||||
* Determine if the given gl_varying_slot appears in the fragment shader.
|
||||
|
|
@ -306,12 +311,13 @@ typedef enum
|
|||
* register is written. No FRAG_RESULT_DATAn will be written.
|
||||
*/
|
||||
FRAG_RESULT_COLOR = 2,
|
||||
FRAG_RESULT_SAMPLE_MASK = 3,
|
||||
|
||||
/* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n]
|
||||
* or ARB_fragment_program fragment.color[n]) color results. If
|
||||
* any are written, FRAG_RESULT_COLOR will not be written.
|
||||
*/
|
||||
FRAG_RESULT_DATA0 = 3,
|
||||
FRAG_RESULT_DATA0 = 4,
|
||||
FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS)
|
||||
} gl_frag_result;
|
||||
|
||||
|
|
@ -1904,6 +1910,8 @@ typedef enum
|
|||
SYSTEM_VALUE_FRONT_FACE, /**< Fragment shader only (not done yet) */
|
||||
SYSTEM_VALUE_VERTEX_ID, /**< Vertex shader only */
|
||||
SYSTEM_VALUE_INSTANCE_ID, /**< Vertex shader only */
|
||||
SYSTEM_VALUE_SAMPLE_ID, /**< Fragment shader only */
|
||||
SYSTEM_VALUE_SAMPLE_POS, /**< Fragment shader only */
|
||||
SYSTEM_VALUE_MAX /**< Number of values */
|
||||
} gl_system_value;
|
||||
|
||||
|
|
|
|||
|
|
@ -311,6 +311,7 @@ arb_output_attrib_string(GLint index, GLenum progType)
|
|||
"result.depth", /* FRAG_RESULT_DEPTH */
|
||||
"result.(one)", /* FRAG_RESULT_STENCIL */
|
||||
"result.color", /* FRAG_RESULT_COLOR */
|
||||
"result.samplemask", /* FRAG_RESULT_SAMPLE_MASK */
|
||||
"result.color[0]", /* FRAG_RESULT_DATA0 (named for GLSL's gl_FragData) */
|
||||
"result.color[1]",
|
||||
"result.color[2]",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue