i965/vec4: Make a function for setting up vec4 program key clip info.

This functionality will need to be reused by geometry shaders.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Paul Berry 2013-06-11 14:23:12 -07:00
parent 5b5d10bcd3
commit 06918f84c2
2 changed files with 24 additions and 6 deletions

View file

@ -125,6 +125,7 @@ extern "C" {
struct brw_context;
struct brw_instruction;
struct brw_vs_prog_key;
struct brw_vec4_prog_key;
struct brw_wm_prog_key;
struct brw_wm_prog_data;
@ -1586,6 +1587,11 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw,
extern const GLuint prim_to_hw_prim[GL_POLYGON+1];
void
brw_setup_vec4_key_clip_info(struct brw_context *brw,
struct brw_vec4_prog_key *key,
bool program_uses_clip_distance);
#ifdef __cplusplus
}
#endif

View file

@ -381,6 +381,23 @@ brw_vs_debug_recompile(struct brw_context *brw,
}
}
void
brw_setup_vec4_key_clip_info(struct brw_context *brw,
struct brw_vec4_prog_key *key,
bool program_uses_clip_distance)
{
struct gl_context *ctx = &brw->ctx;
key->userclip_active = (ctx->Transform.ClipPlanesEnabled != 0);
key->uses_clip_distance = program_uses_clip_distance;
if (key->userclip_active && !key->uses_clip_distance) {
key->nr_userclip_plane_consts
= _mesa_logbase2(ctx->Transform.ClipPlanesEnabled) + 1;
}
}
static void brw_upload_vs_prog(struct brw_context *brw)
{
struct gl_context *ctx = &brw->ctx;
@ -397,12 +414,7 @@ static void brw_upload_vs_prog(struct brw_context *brw)
* the inputs it asks for, whether they are varying or not.
*/
key.base.program_string_id = vp->id;
key.base.userclip_active = (ctx->Transform.ClipPlanesEnabled != 0);
key.base.uses_clip_distance = vp->program.UsesClipDistance;
if (key.base.userclip_active && !key.base.uses_clip_distance) {
key.base.nr_userclip_plane_consts
= _mesa_logbase2(ctx->Transform.ClipPlanesEnabled) + 1;
}
brw_setup_vec4_key_clip_info(brw, &key.base, vp->program.UsesClipDistance);
/* _NEW_POLYGON */
if (brw->gen < 6) {