X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fbrw_ff_gs.c;h=b2c4ee12f4d1844f993df419fd5bcf86bc62d668;hb=bccf2a25a89622c49dcfa488763c245e6584d568;hp=c7129393e5443d055f81801e643726b9110a5576;hpb=40258a13d5bf81303585eaf1859fcb85e373be3e;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/brw_ff_gs.c b/src/mesa/drivers/dri/i965/brw_ff_gs.c index c7129393e54..b2c4ee12f4d 100644 --- a/src/mesa/drivers/dri/i965/brw_ff_gs.c +++ b/src/mesa/drivers/dri/i965/brw_ff_gs.c @@ -37,7 +37,6 @@ #include "brw_defines.h" #include "brw_context.h" -#include "brw_eu.h" #include "brw_util.h" #include "brw_state.h" #include "brw_ff_gs.h" @@ -48,6 +47,7 @@ void brw_codegen_ff_gs_prog(struct brw_context *brw, struct brw_ff_gs_prog_key *key) { + const struct gen_device_info *devinfo = &brw->screen->devinfo; struct brw_ff_gs_compile c; const GLuint *program; void *mem_ctx; @@ -72,7 +72,7 @@ brw_codegen_ff_gs_prog(struct brw_context *brw, */ brw_set_default_mask_control(&c.func, BRW_MASK_DISABLE); - if (brw->gen >= 6) { + if (devinfo->gen >= 6) { unsigned num_verts; bool check_edge_flag; /* On Sandybridge, we use the GS for implementing transform feedback @@ -127,7 +127,7 @@ brw_codegen_ff_gs_prog(struct brw_context *brw, } } - brw_compact_instructions(&c.func, 0, 0, NULL); + brw_compact_instructions(&c.func, 0, NULL); /* get the program */ @@ -162,6 +162,7 @@ static void brw_ff_gs_populate_key(struct brw_context *brw, struct brw_ff_gs_prog_key *key) { + const struct gen_device_info *devinfo = &brw->screen->devinfo; static const unsigned swizzle_for_offset[4] = { BRW_SWIZZLE4(0, 1, 2, 3), BRW_SWIZZLE4(1, 2, 3, 3), @@ -171,6 +172,8 @@ brw_ff_gs_populate_key(struct brw_context *brw, struct gl_context *ctx = &brw->ctx; + assert(devinfo->gen < 7); + memset(key, 0, sizeof(*key)); /* BRW_NEW_VS_PROG_DATA (part of VUE map) */ @@ -188,17 +191,14 @@ brw_ff_gs_populate_key(struct brw_context *brw, key->pv_first = true; } - if (brw->gen >= 7) { - /* On Gen7 and later, we don't use GS (yet). */ - key->need_gs_prog = false; - } else if (brw->gen == 6) { + if (devinfo->gen == 6) { /* On Gen6, GS is used for transform feedback. */ /* BRW_NEW_TRANSFORM_FEEDBACK */ if (_mesa_is_xfb_active_and_unpaused(ctx)) { - const struct gl_shader_program *shaderprog = + const struct gl_program *prog = ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX]; const struct gl_transform_feedback_info *linked_xfb_info = - &shaderprog->LinkedTransformFeedback; + prog->sh.LinkedTransformFeedback; int i; /* Make sure that the VUE slots won't overflow the unsigned chars in @@ -251,15 +251,10 @@ brw_upload_ff_gs_prog(struct brw_context *brw) } if (brw->ff_gs.prog_active) { - if (!brw_search_cache(&brw->cache, BRW_CACHE_FF_GS_PROG, - &key, sizeof(key), - &brw->ff_gs.prog_offset, &brw->ff_gs.prog_data)) { + if (!brw_search_cache(&brw->cache, BRW_CACHE_FF_GS_PROG, &key, + sizeof(key), &brw->ff_gs.prog_offset, + &brw->ff_gs.prog_data, true)) { brw_codegen_ff_gs_prog(brw, &key); } } } - -void gen6_brw_upload_ff_gs_prog(struct brw_context *brw) -{ - brw_upload_ff_gs_prog(brw); -}