Only tangentially related, but just making sure you're aware of GL_ARB_compute_variable_group_size - this allows the local size to be specified at dispatch time rather than at shader compile time. I believe your proposed scheme would allow this to be handled as well.
-ilia On Thu, Mar 24, 2016 at 9:43 PM, Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> wrote: > This avoids shader variants for radeonsi, or if we go with > shader variants, it lets us compile an initial variant. > > Signed-off-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> > --- > src/gallium/drivers/trace/tr_dump_state.c | 4 ++++ > src/gallium/include/pipe/p_state.h | 6 ++++++ > src/gallium/tests/trivial/compute.c | 1 + > src/mesa/state_tracker/st_program.c | 2 ++ > 4 files changed, 13 insertions(+) > > diff --git a/src/gallium/drivers/trace/tr_dump_state.c > b/src/gallium/drivers/trace/tr_dump_state.c > index 394cdaa..4f89af9 100644 > --- a/src/gallium/drivers/trace/tr_dump_state.c > +++ b/src/gallium/drivers/trace/tr_dump_state.c > @@ -333,6 +333,10 @@ void trace_dump_compute_state(const struct > pipe_compute_state *state) > trace_dump_member(uint, state, req_private_mem); > trace_dump_member(uint, state, req_input_mem); > > + trace_dump_member_begin("fixed_block"); > + trace_dump_array(uint, state->fixed_block, Elements(state->fixed_block)); > + trace_dump_member_end(); > + > trace_dump_struct_end(); > } > > diff --git a/src/gallium/include/pipe/p_state.h > b/src/gallium/include/pipe/p_state.h > index 8e7a10b..fff90e7 100644 > --- a/src/gallium/include/pipe/p_state.h > +++ b/src/gallium/include/pipe/p_state.h > @@ -732,6 +732,12 @@ struct pipe_compute_state > unsigned req_local_mem; /**< Required size of the LOCAL resource. */ > unsigned req_private_mem; /**< Required size of the PRIVATE resource. */ > unsigned req_input_mem; /**< Required size of the INPUT resource. */ > + > + /** > + * Block layout if known, or all zeroes if the block layout is either not > + * known yet or dynamic. > + */ > + unsigned fixed_block[3]; > }; > > /** > diff --git a/src/gallium/tests/trivial/compute.c > b/src/gallium/tests/trivial/compute.c > index 2ddfc42..af3e3aa 100644 > --- a/src/gallium/tests/trivial/compute.c > +++ b/src/gallium/tests/trivial/compute.c > @@ -149,6 +149,7 @@ static void init_prog(struct context *ctx, unsigned > local_sz, > .req_local_mem = local_sz, > .req_private_mem = private_sz, > .req_input_mem = input_sz > + .fixed_block = {0} > }; > char *psrc = preprocess_prog(ctx, src, defs); > int ret; > diff --git a/src/mesa/state_tracker/st_program.c > b/src/mesa/state_tracker/st_program.c > index 5e282d9..5777e76 100644 > --- a/src/mesa/state_tracker/st_program.c > +++ b/src/mesa/state_tracker/st_program.c > @@ -1440,6 +1440,8 @@ st_translate_compute_program(struct st_context *st, > stcp->tgsi.req_local_mem = stcp->Base.SharedSize; > stcp->tgsi.req_private_mem = 0; > stcp->tgsi.req_input_mem = 0; > + memcpy(stcp->tgsi.fixed_block, stcp->Base.LocalSize, > + sizeof(stcp->Base.LocalSize)); > > free_glsl_to_tgsi_visitor(stcp->glsl_to_tgsi); > stcp->glsl_to_tgsi = NULL; > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev