LGTM, thanks for catching this! -- Edward O'Callaghan edward.ocallag...@koparo.com
On Tue, Sep 8, 2015, at 09:32 AM, Dave Airlie wrote: > From: Dave Airlie <airl...@redhat.com> > > Since 7a32652231f96eac14c4bfce02afe77b4132fb77 > r600: Turn 'r600_shader_key' struct into union > > we were accessing key fields that might be aliased in the union > with other fields, so we should check what shader type we are > compiling for before using key values from it. > > v1.1: make it compile > v2: have caffiene, make it work - we don't set type > until later, so don't reference it until we've set it. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/gallium/drivers/r600/r600_shader.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) > > diff --git a/src/gallium/drivers/r600/r600_shader.c > b/src/gallium/drivers/r600/r600_shader.c > index 78904da..f2c9e16 100644 > --- a/src/gallium/drivers/r600/r600_shader.c > +++ b/src/gallium/drivers/r600/r600_shader.c > @@ -143,7 +143,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx, > bool dump = r600_can_dump_shader(&rctx->screen->b, sel->tokens); > unsigned use_sb = !(rctx->screen->b.debug_flags & DBG_NO_SB); > unsigned sb_disasm = use_sb || (rctx->screen->b.debug_flags & > DBG_SB_DISASM); > - unsigned export_shader = key.vs.as_es; > + unsigned export_shader; > > shader->shader.bc.isa = rctx->isa; > > @@ -224,6 +224,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx, > } > break; > case TGSI_PROCESSOR_VERTEX: > + export_shader = key.vs.as_es; > if (rctx->b.chip_class >= EVERGREEN) { > if (export_shader) > evergreen_update_es_state(ctx, shader); > @@ -1901,8 +1902,6 @@ static int r600_shader_from_tgsi(struct > r600_context *rctx, > ctx.shader = shader; > ctx.native_integers = true; > > - shader->vs_as_gs_a = key.vs.as_gs_a; > - shader->vs_as_es = key.vs.as_es; > > r600_bytecode_init(ctx.bc, rscreen->b.chip_class, rscreen->b.family, > rscreen->has_compressed_msaa_texturing); > @@ -1918,9 +1917,14 @@ static int r600_shader_from_tgsi(struct > r600_context *rctx, > shader->processor_type = ctx.type; > ctx.bc->type = shader->processor_type; > > - ring_outputs = key.vs.as_es || (ctx.type == > TGSI_PROCESSOR_GEOMETRY); > + if (ctx.type == TGSI_PROCESSOR_VERTEX) { > + shader->vs_as_gs_a = key.vs.as_gs_a; > + shader->vs_as_es = key.vs.as_es; > + } > + > + ring_outputs = shader->vs_as_es || ctx.type == > TGSI_PROCESSOR_GEOMETRY; > > - if (key.vs.as_es) { > + if (shader->vs_as_es) { > ctx.gs_for_vs = &rctx->gs_shader->current->shader; > } else { > ctx.gs_for_vs = NULL; > @@ -1941,7 +1945,8 @@ static int r600_shader_from_tgsi(struct > r600_context *rctx, > shader->nr_ps_color_exports = 0; > shader->nr_ps_max_color_exports = 0; > > - shader->two_side = key.ps.color_two_side; > + if (ctx.type == TGSI_PROCESSOR_FRAGMENT) > + shader->two_side = key.ps.color_two_side; > > /* register allocations */ > /* Values [0,127] correspond to GPR[0..127]. > @@ -2327,7 +2332,7 @@ static int r600_shader_from_tgsi(struct > r600_context *rctx, > convert_edgeflag_to_int(&ctx); > > if (ring_outputs) { > - if (key.vs.as_es) { > + if (shader->vs_as_es) { > ctx.gs_export_gpr_tregs[0] = r600_get_temp(&ctx); > ctx.gs_export_gpr_tregs[1] = -1; > ctx.gs_export_gpr_tregs[2] = -1; > -- > 2.4.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev