summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2012-12-06 22:37:34 -0800
committerKenneth Graunke <kenneth@whitecape.org>2014-01-18 21:56:02 -0800
commit9eb568d7531eb4715be24d5076353ea6c10c8ceb (patch)
tree852a18ddafeef9779f304be2a2e94adf3a5df229 /src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
parentf8035ba0363a8726fcd95ae761fbd31b3d5b41d4 (diff)
downloadexternal_mesa3d-9eb568d7531eb4715be24d5076353ea6c10c8ceb.zip
external_mesa3d-9eb568d7531eb4715be24d5076353ea6c10c8ceb.tar.gz
external_mesa3d-9eb568d7531eb4715be24d5076353ea6c10c8ceb.tar.bz2
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 <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Matt Turner <mattst88@gmail.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp')
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp36
1 files changed, 24 insertions, 12 deletions
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);
}