From bf7b6fd3fd6d98305d64ee6224ca9f9e7ba48444 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 1 Oct 2015 15:21:57 -0700 Subject: i965/shader: Get rid of the shader, prog, and shader_prog fields Unfortunately, we can't get rid of them entirely. The FS backend still needs gl_program for handling TEXTURE_RECTANGLE. The GS vec4 backend still needs gl_shader_program for handling transfom feedback. However, the VS needs neither and we can substantially reduce the amount they are used. One day we will be free from their tyranny. Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 24 ++++++++++++----------- 1 file changed, 13 insertions(+), 11 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 f57041c..c673ccd 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp @@ -38,13 +38,14 @@ vec4_gs_visitor::vec4_gs_visitor(const struct brw_compiler *compiler, void *log_data, struct brw_gs_compile *c, struct gl_shader_program *prog, + nir_shader *shader, void *mem_ctx, bool no_spills, int shader_time_index) - : vec4_visitor(compiler, log_data, - &c->gp->program.Base, &c->key.tex, - &c->prog_data.base, prog, MESA_SHADER_GEOMETRY, mem_ctx, + : vec4_visitor(compiler, log_data, &c->key.tex, + &c->prog_data.base, shader, mem_ctx, no_spills, shader_time_index), + shader_prog(prog), c(c) { } @@ -621,12 +622,10 @@ brw_gs_emit(struct brw_context *brw, void *mem_ctx, unsigned *final_assembly_size) { - if (unlikely(INTEL_DEBUG & DEBUG_GS)) { - struct brw_shader *shader = - (brw_shader *) prog->_LinkedShaders[MESA_SHADER_GEOMETRY]; + struct gl_shader *shader = prog->_LinkedShaders[MESA_SHADER_GEOMETRY]; - brw_dump_ir("geometry", prog, &shader->base, NULL); - } + if (unlikely(INTEL_DEBUG & DEBUG_GS)) + brw_dump_ir("geometry", prog, shader, NULL); int st_index = -1; if (INTEL_DEBUG & DEBUG_SHADER_TIME) @@ -642,7 +641,8 @@ brw_gs_emit(struct brw_context *brw, c->prog_data.base.dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT; vec4_gs_visitor v(brw->intelScreen->compiler, brw, - c, prog, mem_ctx, true /* no_spills */, st_index); + c, prog, shader->Program->nir, + mem_ctx, true /* no_spills */, st_index); if (v.run()) { return generate_assembly(brw, prog, &c->gp->program.Base, &c->prog_data.base, mem_ctx, v.cfg, @@ -684,11 +684,13 @@ brw_gs_emit(struct brw_context *brw, if (brw->gen >= 7) gs = new vec4_gs_visitor(brw->intelScreen->compiler, brw, - c, prog, mem_ctx, false /* no_spills */, + c, prog, shader->Program->nir, + mem_ctx, false /* no_spills */, st_index); else gs = new gen6_gs_visitor(brw->intelScreen->compiler, brw, - c, prog, mem_ctx, false /* no_spills */, + c, prog, shader->Program->nir, + mem_ctx, false /* no_spills */, st_index); if (!gs->run()) { -- cgit v1.1