[Mesa-dev] [PATCH 16/16] r600: update sampler, sampler_view code for the future
Marek Olšák
maraeo at gmail.com
Fri Aug 10 07:52:53 PDT 2012
Reviewed-by: Marek Olšák <maraeo at gmail.com>
On Fri, Aug 10, 2012 at 5:11 AM, Brian Paul <brianp at vmware.com> wrote:
> For when we have pipe->set_sampler_states(pipe, shader, start, num, samplers),
> etc.
> ---
> src/gallium/drivers/r600/evergreen_state.c | 6 +--
> src/gallium/drivers/r600/r600_pipe.h | 5 +-
> src/gallium/drivers/r600/r600_state.c | 6 +--
> src/gallium/drivers/r600/r600_state_common.c | 52 +++++++++++++++++++++----
> 4 files changed, 50 insertions(+), 19 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
> index 67ae7d3..02b0338 100644
> --- a/src/gallium/drivers/r600/evergreen_state.c
> +++ b/src/gallium/drivers/r600/evergreen_state.c
> @@ -1085,15 +1085,13 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte
> static void evergreen_set_vs_sampler_views(struct pipe_context *ctx, unsigned count,
> struct pipe_sampler_view **views)
> {
> - struct r600_context *rctx = (struct r600_context *)ctx;
> - r600_set_sampler_views(rctx, &rctx->vs_samplers, count, views);
> + r600_set_sampler_views(ctx, PIPE_SHADER_VERTEX, 0, count, views);
> }
>
> static void evergreen_set_ps_sampler_views(struct pipe_context *ctx, unsigned count,
> struct pipe_sampler_view **views)
> {
> - struct r600_context *rctx = (struct r600_context *)ctx;
> - r600_set_sampler_views(rctx, &rctx->ps_samplers, count, views);
> + r600_set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, count, views);
> }
>
> static void evergreen_set_clip_state(struct pipe_context *ctx,
> diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h
> index 0464183..ada2e3b 100644
> --- a/src/gallium/drivers/r600/r600_pipe.h
> +++ b/src/gallium/drivers/r600/r600_pipe.h
> @@ -551,8 +551,9 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, unsigned count,
> const struct pipe_vertex_buffer *input);
> void r600_sampler_views_dirty(struct r600_context *rctx,
> struct r600_samplerview_state *state);
> -void r600_set_sampler_views(struct r600_context *rctx,
> - struct r600_textures_info *dst,
> +void r600_set_sampler_views(struct pipe_context *pipe,
> + unsigned shader,
> + unsigned start,
> unsigned count,
> struct pipe_sampler_view **views);
> void r600_bind_vs_samplers(struct pipe_context *ctx, unsigned count, void **states);
> diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
> index 9c7ff7f..b1ddea8 100644
> --- a/src/gallium/drivers/r600/r600_state.c
> +++ b/src/gallium/drivers/r600/r600_state.c
> @@ -1079,15 +1079,13 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c
> static void r600_set_vs_sampler_views(struct pipe_context *ctx, unsigned count,
> struct pipe_sampler_view **views)
> {
> - struct r600_context *rctx = (struct r600_context *)ctx;
> - r600_set_sampler_views(rctx, &rctx->vs_samplers, count, views);
> + r600_set_sampler_views(ctx, PIPE_SHADER_VERTEX, 0, count, views);
> }
>
> static void r600_set_ps_sampler_views(struct pipe_context *ctx, unsigned count,
> struct pipe_sampler_view **views)
> {
> - struct r600_context *rctx = (struct r600_context *)ctx;
> - r600_set_sampler_views(rctx, &rctx->ps_samplers, count, views);
> + r600_set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, count, views);
> }
>
> static void r600_set_clip_state(struct pipe_context *ctx,
> diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
> index 4a75c14..cdc7805 100644
> --- a/src/gallium/drivers/r600/r600_state_common.c
> +++ b/src/gallium/drivers/r600/r600_state_common.c
> @@ -369,13 +369,30 @@ void r600_sampler_view_destroy(struct pipe_context *ctx,
> FREE(resource);
> }
>
> -static void r600_bind_samplers(struct r600_context *rctx,
> - struct r600_textures_info *dst,
> +static void r600_bind_samplers(struct pipe_context *pipe,
> + unsigned shader,
> + unsigned start,
> unsigned count, void **states)
> {
> + struct r600_context *rctx = (struct r600_context *)pipe;
> + struct r600_textures_info *dst;
> int seamless_cube_map = -1;
> unsigned i;
>
> + assert(start == 0); /* XXX fix below */
> +
> + switch (shader) {
> + case PIPE_SHADER_VERTEX:
> + dst = &rctx->vs_samplers;
> + break;
> + case PIPE_SHADER_FRAGMENT:
> + dst = &rctx->ps_samplers;
> + break;
> + default:
> + debug_error("bad shader in r600_bind_samplers()");
> + return;
> + }
> +
> memcpy(dst->samplers, states, sizeof(void*) * count);
> dst->n_samplers = count;
> dst->atom_sampler.num_dw = 0;
> @@ -407,14 +424,12 @@ static void r600_bind_samplers(struct r600_context *rctx,
>
> void r600_bind_vs_samplers(struct pipe_context *ctx, unsigned count, void **states)
> {
> - struct r600_context *rctx = (struct r600_context *)ctx;
> - r600_bind_samplers(rctx, &rctx->vs_samplers, count, states);
> + r600_bind_samplers(ctx, PIPE_SHADER_VERTEX, 0, count, states);
> }
>
> void r600_bind_ps_samplers(struct pipe_context *ctx, unsigned count, void **states)
> {
> - struct r600_context *rctx = (struct r600_context *)ctx;
> - r600_bind_samplers(rctx, &rctx->ps_samplers, count, states);
> + r600_bind_samplers(ctx, PIPE_SHADER_FRAGMENT, 0, count, states);
> }
>
> void r600_delete_sampler(struct pipe_context *ctx, void *state)
> @@ -543,11 +558,14 @@ void r600_sampler_views_dirty(struct r600_context *rctx,
> }
> }
>
> -void r600_set_sampler_views(struct r600_context *rctx,
> - struct r600_textures_info *dst,
> +void r600_set_sampler_views(struct pipe_context *pipe,
> + unsigned shader,
> + unsigned start,
> unsigned count,
> struct pipe_sampler_view **views)
> {
> + struct r600_context *rctx = (struct r600_context *) pipe;
> + struct r600_textures_info *dst;
> struct r600_pipe_sampler_view **rviews = (struct r600_pipe_sampler_view **)views;
> unsigned i;
> /* This sets 1-bit for textures with index >= count. */
> @@ -556,7 +574,23 @@ void r600_set_sampler_views(struct r600_context *rctx,
> uint32_t new_mask = 0;
>
> /* Set textures with index >= count to NULL. */
> - uint32_t remaining_mask = dst->views.enabled_mask & disable_mask;
> + uint32_t remaining_mask;
> +
> + assert(start == 0); /* XXX fix below */
> +
> + switch (shader) {
> + case PIPE_SHADER_VERTEX:
> + dst = &rctx->vs_samplers;
> + break;
> + case PIPE_SHADER_FRAGMENT:
> + dst = &rctx->ps_samplers;
> + break;
> + default:
> + debug_error("bad shader in r600_set_sampler_views()");
> + return;
> + }
> +
> + remaining_mask = dst->views.enabled_mask & disable_mask;
>
> while (remaining_mask) {
> i = u_bit_scan(&remaining_mask);
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list