On Tue, Jun 14, 2016 at 12:02 PM, Ilia Mirkin <[email protected]> wrote: > 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?
consistency with the other pipe->set_xyz APIs, and adding support for it in rsq would then be a one line addition on rsq_state.py rather than writing a bunch of code by hand ;-) BR, -R > -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
