From 9eb568d7531eb4715be24d5076353ea6c10c8ceb Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 6 Dec 2012 22:37:34 -0800 Subject: i965: Create a new vec4 backend for Broadwell. This replaces the old vec4_generator backend. v2: Port to use the C-based instruction representation. Also, remove Geometry Shader offset hacks - the visitor will handle those instead of this code. v3: Texturing fixes (including adding textureGather support). v4: Pass brw_context to gen8_instruction functions as required. v5: Add SHADER_OPCODE_TXF_MCS support; port DUAL_INSTANCED gs fixes (caught by Eric). Simplify ADDC/SUBB handling; add comments to gen8_set_dp_message calls (suggested by Matt). Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt Reviewed-by: Matt Turner --- src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 36 +++++++++++++++-------- 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp') diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp index 5d5b169..f33c80d 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp @@ -533,6 +533,25 @@ vec4_gs_visitor::visit(ir_end_primitive *) emit(OR(dst_reg(this->control_data_bits), this->control_data_bits, mask)); } +static const unsigned * +generate_assembly(struct brw_context *brw, + struct gl_shader_program *shader_prog, + struct gl_program *prog, + struct brw_vec4_prog_data *prog_data, + void *mem_ctx, + exec_list *instructions, + unsigned *final_assembly_size) +{ + if (brw->gen >= 8) { + gen8_vec4_generator g(brw, shader_prog, prog, prog_data, mem_ctx, + INTEL_DEBUG & DEBUG_GS); + return g.generate_assembly(instructions, final_assembly_size); + } else { + vec4_generator g(brw, shader_prog, prog, prog_data, mem_ctx, + INTEL_DEBUG & DEBUG_GS); + return g.generate_assembly(instructions, final_assembly_size); + } +} extern "C" const unsigned * brw_gs_emit(struct brw_context *brw, @@ -558,12 +577,9 @@ brw_gs_emit(struct brw_context *brw, vec4_gs_visitor v(brw, c, prog, shader, mem_ctx, true /* no_spills */); if (v.run()) { - vec4_generator g(brw, prog, &c->gp->program.Base, &c->prog_data.base, - mem_ctx, INTEL_DEBUG & DEBUG_GS); - const unsigned *generated = - g.generate_assembly(&v.instructions, final_assembly_size); - - return generated; + return generate_assembly(brw, prog, &c->gp->program.Base, + &c->prog_data.base, mem_ctx, &v.instructions, + final_assembly_size); } } @@ -586,12 +602,8 @@ brw_gs_emit(struct brw_context *brw, return NULL; } - vec4_generator g(brw, prog, &c->gp->program.Base, &c->prog_data.base, - mem_ctx, INTEL_DEBUG & DEBUG_GS); - const unsigned *generated = - g.generate_assembly(&v.instructions, final_assembly_size); - - return generated; + return generate_assembly(brw, prog, &c->gp->program.Base, &c->prog_data.base, + mem_ctx, &v.instructions, final_assembly_size); } -- cgit v1.1