glsl: add builtins for geometry shaders.

v2 (Paul Berry <stereotype441@gmail.com>): Account for rework of
builtin_variables.cpp.  Use INTERP_QUALIFIER_FLAT for gl_PrimitiveID
so that it will obey provoking vertex conventions.  Convert to GLSL
1.50 style geometry shaders.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>

v3 (Paul Berry <stereotype441@gmail.com>): Be less obscure about
setting interpolation field of gl_Primitive variables.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Bryan Cain 2013-02-15 08:53:20 -06:00 committed by Paul Berry
parent ae6eba3e32
commit ff52377183
5 changed files with 28 additions and 4 deletions

View file

@ -686,8 +686,11 @@ builtin_variable_generator::generate_gs_special_vars()
* the specific case of gl_PrimitiveIDIn. So we don't need to treat
* gl_PrimitiveIDIn as an {ARB,EXT}_geometry_shader4-only variable.
*/
add_input(VARYING_SLOT_PRIMITIVE_ID, int_t, "gl_PrimitiveIDIn");
add_output(VARYING_SLOT_PRIMITIVE_ID, int_t, "gl_PrimitiveID");
ir_variable *var;
var = add_input(VARYING_SLOT_PRIMITIVE_ID, int_t, "gl_PrimitiveIDIn");
var->interpolation = INTERP_QUALIFIER_FLAT;
var = add_output(VARYING_SLOT_PRIMITIVE_ID, int_t, "gl_PrimitiveID");
var->interpolation = INTERP_QUALIFIER_FLAT;
}
@ -702,6 +705,12 @@ builtin_variable_generator::generate_fs_special_vars()
if (state->is_version(120, 100))
add_input(VARYING_SLOT_PNTC, vec2_t, "gl_PointCoord");
if (state->is_version(150, 0)) {
ir_variable *var =
add_input(VARYING_SLOT_PRIMITIVE_ID, int_t, "gl_PrimitiveID");
var->interpolation = INTERP_QUALIFIER_FLAT;
}
/* gl_FragColor and gl_FragData were deprecated starting in desktop GLSL
* 1.30, and were relegated to the compatibility profile in GLSL 4.20.
* They were removed from GLSL ES 3.00.

View file

@ -0,0 +1,5 @@
((function EmitVertex
(signature void
(parameters)
((emit-vertex)))
))

View file

@ -0,0 +1,5 @@
((function EndPrimitive
(signature void
(parameters)
((end-primitive)))
))

View file

@ -0,0 +1,3 @@
#version 150
void EmitVertex();
void EndPrimitive();

View file

@ -125,7 +125,7 @@ def write_profiles():
def get_profile_list():
profile_files = []
for extension in ['glsl', 'frag', 'vert']:
for extension in ['glsl', 'frag', 'vert', 'geom']:
path_glob = path.join(
path.join(builtins_dir, 'profiles'), '*.' + extension)
profile_files.extend(glob(path_glob))
@ -279,10 +279,12 @@ _mesa_glsl_initialize_functions(struct _mesa_glsl_parse_state *state)
check = 'state->target == vertex_shader && '
elif profile.endswith('_frag'):
check = 'state->target == fragment_shader && '
elif profile.endswith('_geom'):
check = 'state->target == geometry_shader && '
else:
check = ''
version = re.sub(r'_(glsl|vert|frag)$', '', profile)
version = re.sub(r'_(glsl|vert|frag|geom)$', '', profile)
if version[0].isdigit():
is_es = version.endswith('es')
if is_es: