summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2015-10-01 15:21:57 -0700
committerJason Ekstrand <jason.ekstrand@intel.com>2015-10-02 14:22:54 -0700
commitbf7b6fd3fd6d98305d64ee6224ca9f9e7ba48444 (patch)
tree1fc147943d9e055f07feec578a12a268ec1cfe90 /src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
parent404419ee1a57c79982d93eefe4de099d61ad2eee (diff)
downloadexternal_mesa3d-bf7b6fd3fd6d98305d64ee6224ca9f9e7ba48444.zip
external_mesa3d-bf7b6fd3fd6d98305d64ee6224ca9f9e7ba48444.tar.gz
external_mesa3d-bf7b6fd3fd6d98305d64ee6224ca9f9e7ba48444.tar.bz2
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 <kenneth@whitecape.org>
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.cpp24
1 files changed, 13 insertions, 11 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 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()) {