From d2fe804d1890774828a5481f5873743d71d37c2a Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 9 May 2017 12:34:10 -0700 Subject: [PATCH] i965/vec4: Set VERT_BIT_EDGEFLAG based on the VUE map We also add a nice little comment to make it more clear exactly what happens with the edge flag copy. Reviewed-by: Kenneth Graunke --- src/intel/compiler/brw_vec4.cpp | 11 +++++++++++ src/mesa/drivers/dri/i965/brw_vs.c | 4 ---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/intel/compiler/brw_vec4.cpp b/src/intel/compiler/brw_vec4.cpp index 9366b89..7b17c64 100644 --- a/src/intel/compiler/brw_vec4.cpp +++ b/src/intel/compiler/brw_vec4.cpp @@ -2778,6 +2778,17 @@ brw_compile_vs(const struct brw_compiler *compiler, void *log_data, const unsigned *assembly = NULL; + if (prog_data->base.vue_map.varying_to_slot[VARYING_SLOT_EDGE] != -1) { + /* If the output VUE map contains VARYING_SLOT_EDGE then we need to copy + * the edge flag from VERT_ATTRIB_EDGEFLAG. This will be done + * automatically by brw_vec4_visitor::emit_urb_slot but we need to + * ensure that prog_data->inputs_read is accurate. + */ + assert(!is_scalar); + assert(key->copy_edgeflag); + prog_data->inputs_read |= VERT_BIT_EDGEFLAG; + } + prog_data->base.clip_distance_mask = ((1 << shader->info.clip_distance_array_size) - 1); prog_data->base.cull_distance_mask = diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c index b1ea01a..b823a4d 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.c +++ b/src/mesa/drivers/dri/i965/brw_vs.c @@ -213,10 +213,6 @@ brw_codegen_vs_prog(struct brw_context *brw, prog_data.inputs_read = vp->program.info.inputs_read; prog_data.double_inputs_read = vp->program.info.double_inputs_read; - if (key->copy_edgeflag) { - prog_data.inputs_read |= VERT_BIT_EDGEFLAG; - } - brw_compute_vue_map(devinfo, &prog_data.base.vue_map, outputs_written, vp->program.nir->info.separate_shader); -- 2.7.4