glsl: add gl_BoundingBox and associated varying slots
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -1045,6 +1045,18 @@ builtin_variable_generator::generate_tcs_special_vars()
|
|||||||
"gl_TessLevelOuter")->data.patch = 1;
|
"gl_TessLevelOuter")->data.patch = 1;
|
||||||
add_output(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2),
|
add_output(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2),
|
||||||
"gl_TessLevelInner")->data.patch = 1;
|
"gl_TessLevelInner")->data.patch = 1;
|
||||||
|
/* XXX What to do if multiple are flipped on? */
|
||||||
|
int bbox_slot = state->ctx->Const.NoPrimitiveBoundingBoxOutput ? -1 :
|
||||||
|
VARYING_SLOT_BOUNDING_BOX0;
|
||||||
|
if (state->EXT_primitive_bounding_box_enable)
|
||||||
|
add_output(bbox_slot, array(vec4_t, 2), "gl_BoundingBoxEXT")
|
||||||
|
->data.patch = 1;
|
||||||
|
if (state->OES_primitive_bounding_box_enable)
|
||||||
|
add_output(bbox_slot, array(vec4_t, 2), "gl_BoundingBoxOES")
|
||||||
|
->data.patch = 1;
|
||||||
|
if (state->is_version(0, 320) || state->ARB_ES3_2_compatibility_enable)
|
||||||
|
add_output(bbox_slot, array(vec4_t, 2), "gl_BoundingBox")
|
||||||
|
->data.patch = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -99,7 +99,9 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len,
|
|||||||
int idx = var->data.location + offset + i;
|
int idx = var->data.location + offset + i;
|
||||||
bool is_patch_generic = var->data.patch &&
|
bool is_patch_generic = var->data.patch &&
|
||||||
idx != VARYING_SLOT_TESS_LEVEL_INNER &&
|
idx != VARYING_SLOT_TESS_LEVEL_INNER &&
|
||||||
idx != VARYING_SLOT_TESS_LEVEL_OUTER;
|
idx != VARYING_SLOT_TESS_LEVEL_OUTER &&
|
||||||
|
idx != VARYING_SLOT_BOUNDING_BOX0 &&
|
||||||
|
idx != VARYING_SLOT_BOUNDING_BOX1;
|
||||||
GLbitfield64 bitfield;
|
GLbitfield64 bitfield;
|
||||||
|
|
||||||
if (is_patch_generic) {
|
if (is_patch_generic) {
|
||||||
|
@@ -158,6 +158,8 @@ gl_varying_slot_name(gl_varying_slot slot)
|
|||||||
ENUM(VARYING_SLOT_PNTC),
|
ENUM(VARYING_SLOT_PNTC),
|
||||||
ENUM(VARYING_SLOT_TESS_LEVEL_OUTER),
|
ENUM(VARYING_SLOT_TESS_LEVEL_OUTER),
|
||||||
ENUM(VARYING_SLOT_TESS_LEVEL_INNER),
|
ENUM(VARYING_SLOT_TESS_LEVEL_INNER),
|
||||||
|
ENUM(VARYING_SLOT_BOUNDING_BOX0),
|
||||||
|
ENUM(VARYING_SLOT_BOUNDING_BOX1),
|
||||||
ENUM(VARYING_SLOT_VAR0),
|
ENUM(VARYING_SLOT_VAR0),
|
||||||
ENUM(VARYING_SLOT_VAR1),
|
ENUM(VARYING_SLOT_VAR1),
|
||||||
ENUM(VARYING_SLOT_VAR2),
|
ENUM(VARYING_SLOT_VAR2),
|
||||||
|
@@ -214,6 +214,8 @@ typedef enum
|
|||||||
VARYING_SLOT_PNTC, /* FS only */
|
VARYING_SLOT_PNTC, /* FS only */
|
||||||
VARYING_SLOT_TESS_LEVEL_OUTER, /* Only appears as TCS output. */
|
VARYING_SLOT_TESS_LEVEL_OUTER, /* Only appears as TCS output. */
|
||||||
VARYING_SLOT_TESS_LEVEL_INNER, /* Only appears as TCS output. */
|
VARYING_SLOT_TESS_LEVEL_INNER, /* Only appears as TCS output. */
|
||||||
|
VARYING_SLOT_BOUNDING_BOX0, /* Only appears as TCS output. */
|
||||||
|
VARYING_SLOT_BOUNDING_BOX1, /* Only appears as TCS output. */
|
||||||
VARYING_SLOT_VAR0, /* First generic varying slot */
|
VARYING_SLOT_VAR0, /* First generic varying slot */
|
||||||
/* the remaining are simply for the benefit of gl_varying_slot_name()
|
/* the remaining are simply for the benefit of gl_varying_slot_name()
|
||||||
* and not to be construed as an upper bound:
|
* and not to be construed as an upper bound:
|
||||||
@@ -294,6 +296,8 @@ const char *gl_varying_slot_name(gl_varying_slot slot);
|
|||||||
#define VARYING_BIT_PNTC BITFIELD64_BIT(VARYING_SLOT_PNTC)
|
#define VARYING_BIT_PNTC BITFIELD64_BIT(VARYING_SLOT_PNTC)
|
||||||
#define VARYING_BIT_TESS_LEVEL_OUTER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_OUTER)
|
#define VARYING_BIT_TESS_LEVEL_OUTER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_OUTER)
|
||||||
#define VARYING_BIT_TESS_LEVEL_INNER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_INNER)
|
#define VARYING_BIT_TESS_LEVEL_INNER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_INNER)
|
||||||
|
#define VARYING_BIT_BOUNDING_BOX0 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX0)
|
||||||
|
#define VARYING_BIT_BOUNDING_BOX1 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX1)
|
||||||
#define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V))
|
#define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V))
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
@@ -110,6 +110,8 @@ _mesa_varying_slot_in_fs(gl_varying_slot slot)
|
|||||||
case VARYING_SLOT_LAYER:
|
case VARYING_SLOT_LAYER:
|
||||||
case VARYING_SLOT_TESS_LEVEL_OUTER:
|
case VARYING_SLOT_TESS_LEVEL_OUTER:
|
||||||
case VARYING_SLOT_TESS_LEVEL_INNER:
|
case VARYING_SLOT_TESS_LEVEL_INNER:
|
||||||
|
case VARYING_SLOT_BOUNDING_BOX0:
|
||||||
|
case VARYING_SLOT_BOUNDING_BOX1:
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
default:
|
default:
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
@@ -3789,6 +3791,9 @@ struct gl_constants
|
|||||||
bool LowerCsDerivedVariables; /**< Lower gl_GlobalInvocationID and
|
bool LowerCsDerivedVariables; /**< Lower gl_GlobalInvocationID and
|
||||||
* gl_LocalInvocationIndex based on
|
* gl_LocalInvocationIndex based on
|
||||||
* other builtin variables. */
|
* other builtin variables. */
|
||||||
|
|
||||||
|
/** GL_OES_primitive_bounding_box */
|
||||||
|
bool NoPrimitiveBoundingBoxOutput;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -151,6 +151,8 @@ arb_input_attrib_string(GLuint index, GLenum progType)
|
|||||||
"fragment.(twenty-five)", /* VARYING_SLOT_TESS_LEVEL_INNER */
|
"fragment.(twenty-five)", /* VARYING_SLOT_TESS_LEVEL_INNER */
|
||||||
"fragment.(twenty-six)", /* VARYING_SLOT_CULL_DIST0 */
|
"fragment.(twenty-six)", /* VARYING_SLOT_CULL_DIST0 */
|
||||||
"fragment.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
|
"fragment.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
|
||||||
|
"fragment.(twenty-eight)", /* VARYING_SLOT_BOUNDING_BOX0 */
|
||||||
|
"fragment.(twenty-nine)", /* VARYING_SLOT_BOUNDING_BOX1 */
|
||||||
"fragment.varying[0]",
|
"fragment.varying[0]",
|
||||||
"fragment.varying[1]",
|
"fragment.varying[1]",
|
||||||
"fragment.varying[2]",
|
"fragment.varying[2]",
|
||||||
@@ -280,6 +282,8 @@ arb_output_attrib_string(GLuint index, GLenum progType)
|
|||||||
"result.(twenty-five)", /* VARYING_SLOT_TESS_LEVEL_INNER */
|
"result.(twenty-five)", /* VARYING_SLOT_TESS_LEVEL_INNER */
|
||||||
"result.(twenty-six)", /* VARYING_SLOT_CULL_DIST0 */
|
"result.(twenty-six)", /* VARYING_SLOT_CULL_DIST0 */
|
||||||
"result.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
|
"result.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
|
||||||
|
"result.(twenty-eight)", /* VARYING_SLOT_BOUNDING_BOX0 */
|
||||||
|
"result.(twenty-nine)", /* VARYING_SLOT_BOUNDING_BOX1 */
|
||||||
"result.varying[0]",
|
"result.varying[0]",
|
||||||
"result.varying[1]",
|
"result.varying[1]",
|
||||||
"result.varying[2]",
|
"result.varying[2]",
|
||||||
|
Reference in New Issue
Block a user