From: Ilia Mirkin Date: Mon, 30 May 2016 15:50:07 +0000 (-0400) Subject: glsl: add gl_BoundingBox and associated varying slots X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=891d7e3c9eb71ba42a7aea20dc45bdb3d624fc82;p=mesa.git glsl: add gl_BoundingBox and associated varying slots Signed-off-by: Ilia Mirkin Reviewed-by: Ian Romanick --- diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp index f4ddeb99cde..90278d635c6 100644 --- a/src/compiler/glsl/builtin_variables.cpp +++ b/src/compiler/glsl/builtin_variables.cpp @@ -1045,6 +1045,18 @@ builtin_variable_generator::generate_tcs_special_vars() "gl_TessLevelOuter")->data.patch = 1; add_output(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2), "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; } diff --git a/src/compiler/glsl/ir_set_program_inouts.cpp b/src/compiler/glsl/ir_set_program_inouts.cpp index 4f6c886b6b3..48ed3c5c9e2 100644 --- a/src/compiler/glsl/ir_set_program_inouts.cpp +++ b/src/compiler/glsl/ir_set_program_inouts.cpp @@ -99,7 +99,9 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len, int idx = var->data.location + offset + i; bool is_patch_generic = var->data.patch && 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; if (is_patch_generic) { diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index 00261d1988c..729a3583b1b 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -158,6 +158,8 @@ gl_varying_slot_name(gl_varying_slot slot) ENUM(VARYING_SLOT_PNTC), ENUM(VARYING_SLOT_TESS_LEVEL_OUTER), ENUM(VARYING_SLOT_TESS_LEVEL_INNER), + ENUM(VARYING_SLOT_BOUNDING_BOX0), + ENUM(VARYING_SLOT_BOUNDING_BOX1), ENUM(VARYING_SLOT_VAR0), ENUM(VARYING_SLOT_VAR1), ENUM(VARYING_SLOT_VAR2), diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index e128b172c20..c3a62e09dbe 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -214,6 +214,8 @@ typedef enum VARYING_SLOT_PNTC, /* FS only */ VARYING_SLOT_TESS_LEVEL_OUTER, /* 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 */ /* the remaining are simply for the benefit of gl_varying_slot_name() * 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_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_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)) /*@}*/ diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index d2bc0b5fa90..df934469d05 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -110,6 +110,8 @@ _mesa_varying_slot_in_fs(gl_varying_slot slot) case VARYING_SLOT_LAYER: case VARYING_SLOT_TESS_LEVEL_OUTER: case VARYING_SLOT_TESS_LEVEL_INNER: + case VARYING_SLOT_BOUNDING_BOX0: + case VARYING_SLOT_BOUNDING_BOX1: return GL_FALSE; default: return GL_TRUE; @@ -3789,6 +3791,9 @@ struct gl_constants bool LowerCsDerivedVariables; /**< Lower gl_GlobalInvocationID and * gl_LocalInvocationIndex based on * other builtin variables. */ + + /** GL_OES_primitive_bounding_box */ + bool NoPrimitiveBoundingBoxOutput; }; diff --git a/src/mesa/program/prog_print.c b/src/mesa/program/prog_print.c index b8d7cca2f3b..7a7d2745460 100644 --- a/src/mesa/program/prog_print.c +++ b/src/mesa/program/prog_print.c @@ -151,6 +151,8 @@ arb_input_attrib_string(GLuint index, GLenum progType) "fragment.(twenty-five)", /* VARYING_SLOT_TESS_LEVEL_INNER */ "fragment.(twenty-six)", /* VARYING_SLOT_CULL_DIST0 */ "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[1]", "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-six)", /* VARYING_SLOT_CULL_DIST0 */ "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[1]", "result.varying[2]",