r600: update sampler, sampler_view code for the future
authorBrian Paul <brianp@vmware.com>
Fri, 10 Aug 2012 02:59:44 +0000 (20:59 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 16 Aug 2012 15:01:31 +0000 (09:01 -0600)
For when we have pipe->set_sampler_states(pipe, shader, start, num, samplers),
etc.

Reviewed-by: Marek Olšák <maraeo@gmail.com>
src/gallium/drivers/r600/evergreen_state.c
src/gallium/drivers/r600/r600_pipe.h
src/gallium/drivers/r600/r600_state.c
src/gallium/drivers/r600/r600_state_common.c

index 89f27b44497c3af173dac3bc965c8fcf23680277..c80e330a5b82f0ee8ec3c789a8395bc5f2e4831d 100644 (file)
@@ -1123,15 +1123,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,
index aeff52849ce3563ecc83808bc57d24aea4b376b4..5d72952168e479d3ae59fece98fee4708c42fe9a 100644 (file)
@@ -568,8 +568,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);
index b4f61a48a4635b2f28ebbdaee84b40ea26622039..868455cba3b8e9413e002dac51e981f35a254e79 100644 (file)
@@ -1081,15 +1081,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,
index 393d81b7f3d2992b39882322e13262842512d654..d8c5fb284ef4b89784986f0cad2c8d8ce47b19d1 100644 (file)
@@ -371,13 +371,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;
@@ -409,14 +426,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)
@@ -545,11 +560,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. */
@@ -558,7 +576,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);