Can you explain the motivation behind this change? I'm adding a ->set_window_rectangles thing which also takes multiple parameters. What's the advantage of stuffing things into a struct first?
-ilia On Tue, Jun 14, 2016 at 11:57 AM, Rob Clark <[email protected]> wrote: > From: Rob Clark <[email protected]> > > The reset of the state APIs take state structs, rather than inline > parameters (with the exception of a couple which just amount to a single > uint). > > This makes the API more regular and simplifies autogeneration of the > gallium state related APIs. > > Signed-off-by: Rob Clark <[email protected]> > --- > src/gallium/drivers/ddebug/dd_context.c | 9 ++++----- > src/gallium/drivers/nouveau/nvc0/nvc0_state.c | 7 +++---- > src/gallium/drivers/r600/evergreen_state.c | 7 +++---- > src/gallium/drivers/radeonsi/si_state.c | 7 +++---- > src/gallium/drivers/trace/tr_context.c | 9 ++++----- > src/gallium/include/pipe/p_context.h | 4 ++-- > src/gallium/include/pipe/p_state.h | 8 ++++++++ > src/mesa/state_tracker/st_atom_tess.c | 13 ++++++++++--- > 8 files changed, 37 insertions(+), 27 deletions(-) > > diff --git a/src/gallium/drivers/ddebug/dd_context.c > b/src/gallium/drivers/ddebug/dd_context.c > index 0f8ef18..06b7c91 100644 > --- a/src/gallium/drivers/ddebug/dd_context.c > +++ b/src/gallium/drivers/ddebug/dd_context.c > @@ -380,15 +380,14 @@ dd_context_set_viewport_states(struct pipe_context > *_pipe, > } > > static void dd_context_set_tess_state(struct pipe_context *_pipe, > - const float default_outer_level[4], > - const float default_inner_level[2]) > + const struct pipe_tess_state *state) > { > struct dd_context *dctx = dd_context(_pipe); > struct pipe_context *pipe = dctx->pipe; > > - memcpy(dctx->tess_default_levels, default_outer_level, sizeof(float) * 4); > - memcpy(dctx->tess_default_levels+4, default_inner_level, sizeof(float) * > 2); > - pipe->set_tess_state(pipe, default_outer_level, default_inner_level); > + memcpy(dctx->tess_default_levels, state->default_outer_level, > sizeof(float) * 4); > + memcpy(dctx->tess_default_levels+4, state->default_inner_level, > sizeof(float) * 2); > + pipe->set_tess_state(pipe, state); > } > > > diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c > b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c > index 92161ec..a9c1830 100644 > --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c > +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c > @@ -1001,13 +1001,12 @@ nvc0_set_viewport_states(struct pipe_context *pipe, > > static void > nvc0_set_tess_state(struct pipe_context *pipe, > - const float default_tess_outer[4], > - const float default_tess_inner[2]) > + const struct pipe_tess_state *state) > { > struct nvc0_context *nvc0 = nvc0_context(pipe); > > - memcpy(nvc0->default_tess_outer, default_tess_outer, 4 * sizeof(float)); > - memcpy(nvc0->default_tess_inner, default_tess_inner, 2 * sizeof(float)); > + memcpy(nvc0->default_tess_outer, state->default_tess_outer, 4 * > sizeof(float)); > + memcpy(nvc0->default_tess_inner, state->default_tess_inner, 2 * > sizeof(float)); > nvc0->dirty_3d |= NVC0_NEW_3D_TESSFACTOR; > } > > diff --git a/src/gallium/drivers/r600/evergreen_state.c > b/src/gallium/drivers/r600/evergreen_state.c > index 1ac8914..2a424f5 100644 > --- a/src/gallium/drivers/r600/evergreen_state.c > +++ b/src/gallium/drivers/r600/evergreen_state.c > @@ -3569,13 +3569,12 @@ fallback: > } > > static void evergreen_set_tess_state(struct pipe_context *ctx, > - const float default_outer_level[4], > - const float default_inner_level[2]) > + const struct pipe_tess_state *state) > { > struct r600_context *rctx = (struct r600_context *)ctx; > > - memcpy(rctx->tess_state, default_outer_level, sizeof(float) * 4); > - memcpy(rctx->tess_state+4, default_inner_level, sizeof(float) * 2); > + memcpy(rctx->tess_state, state->default_outer_level, sizeof(float) * > 4); > + memcpy(rctx->tess_state+4, state->default_inner_level, sizeof(float) > * 2); > rctx->tess_state_dirty = true; > } > > diff --git a/src/gallium/drivers/radeonsi/si_state.c > b/src/gallium/drivers/radeonsi/si_state.c > index 0c52eee..6ef3fe5 100644 > --- a/src/gallium/drivers/radeonsi/si_state.c > +++ b/src/gallium/drivers/radeonsi/si_state.c > @@ -3238,15 +3238,14 @@ static void si_set_index_buffer(struct pipe_context > *ctx, > */ > > static void si_set_tess_state(struct pipe_context *ctx, > - const float default_outer_level[4], > - const float default_inner_level[2]) > + const struct pipe_tess_state *state) > { > struct si_context *sctx = (struct si_context *)ctx; > struct pipe_constant_buffer cb; > float array[8]; > > - memcpy(array, default_outer_level, sizeof(float) * 4); > - memcpy(array+4, default_inner_level, sizeof(float) * 2); > + memcpy(array, state->default_outer_level, sizeof(float) * 4); > + memcpy(array+4, state->default_inner_level, sizeof(float) * 2); > > cb.buffer = NULL; > cb.user_buffer = NULL; > diff --git a/src/gallium/drivers/trace/tr_context.c > b/src/gallium/drivers/trace/tr_context.c > index 18c5c43..0dd07e9 100644 > --- a/src/gallium/drivers/trace/tr_context.c > +++ b/src/gallium/drivers/trace/tr_context.c > @@ -1652,19 +1652,18 @@ trace_context_memory_barrier(struct pipe_context > *_context, > > static void > trace_context_set_tess_state(struct pipe_context *_context, > - const float default_outer_level[4], > - const float default_inner_level[2]) > + const struct pipe_tess_state *state) > { > struct trace_context *tr_context = trace_context(_context); > struct pipe_context *context = tr_context->pipe; > > trace_dump_call_begin("pipe_context", "set_tess_state"); > trace_dump_arg(ptr, context); > - trace_dump_arg_array(float, default_outer_level, 4); > - trace_dump_arg_array(float, default_inner_level, 2); > + trace_dump_arg_array(float, state->default_outer_level, 4); > + trace_dump_arg_array(float, state->default_inner_level, 2); > trace_dump_call_end(); > > - context->set_tess_state(context, default_outer_level, > default_inner_level); > + context->set_tess_state(context, state); > } > > > diff --git a/src/gallium/include/pipe/p_context.h > b/src/gallium/include/pipe/p_context.h > index 9d7a8eb..9eb4a87 100644 > --- a/src/gallium/include/pipe/p_context.h > +++ b/src/gallium/include/pipe/p_context.h > @@ -60,6 +60,7 @@ struct pipe_resolve_info; > struct pipe_resource; > struct pipe_sampler_state; > struct pipe_sampler_view; > +struct pipe_tess_state; > struct pipe_scissor_state; > struct pipe_shader_buffer; > struct pipe_shader_state; > @@ -284,8 +285,7 @@ struct pipe_context { > struct pipe_sampler_view **); > > void (*set_tess_state)(struct pipe_context *, > - const float default_outer_level[4], > - const float default_inner_level[2]); > + const struct pipe_tess_state *); > > /** > * Sets the debug callback. If the pointer is null, then no callback is > diff --git a/src/gallium/include/pipe/p_state.h > b/src/gallium/include/pipe/p_state.h > index 396f563..f2ebc53 100644 > --- a/src/gallium/include/pipe/p_state.h > +++ b/src/gallium/include/pipe/p_state.h > @@ -453,6 +453,14 @@ struct pipe_image_view > } u; > }; > > +/** > + * Tessellation state. > + */ > +struct pipe_tess_state > +{ > + float default_outer_level[4]; > + float default_inner_level[2]; > +}; > > /** > * Subregion of 1D/2D/3D image resource. > diff --git a/src/mesa/state_tracker/st_atom_tess.c > b/src/mesa/state_tracker/st_atom_tess.c > index 8e6287a..61aa92f 100644 > --- a/src/mesa/state_tracker/st_atom_tess.c > +++ b/src/mesa/state_tracker/st_atom_tess.c > @@ -34,6 +34,7 @@ > #include "main/macros.h" > #include "st_context.h" > #include "pipe/p_context.h" > +#include "pipe/p_state.h" > #include "st_atom.h" > > > @@ -42,13 +43,19 @@ update_tess(struct st_context *st) > { > const struct gl_context *ctx = st->ctx; > struct pipe_context *pipe = st->pipe; > + struct pipe_tess_state state; > > if (!pipe->set_tess_state) > return; > > - pipe->set_tess_state(pipe, > - ctx->TessCtrlProgram.patch_default_outer_level, > - ctx->TessCtrlProgram.patch_default_inner_level); > + memcpy(state.default_outer_level, > + ctx->TessCtrlProgram.patch_default_outer_level, > + sizeof(state.default_outer_level)); > + memcpy(state.default_inner_level, > + ctx->TessCtrlProgram.patch_default_inner_level, > + sizeof(state.default_inner_level)); > + > + pipe->set_tess_state(pipe, &state); > } > > > -- > 2.5.5 > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
