[Mesa-dev] [PATCH 12/16] galahad: add 'start' parameter to bind_sampler_states/views()

Brian Paul brianp at vmware.com
Thu Aug 9 20:11:11 PDT 2012


---
 src/gallium/drivers/galahad/glhd_context.c |   98 ++++++++++++++++------------
 1 files changed, 57 insertions(+), 41 deletions(-)

diff --git a/src/gallium/drivers/galahad/glhd_context.c b/src/gallium/drivers/galahad/glhd_context.c
index dc7f017..601081b 100644
--- a/src/gallium/drivers/galahad/glhd_context.c
+++ b/src/gallium/drivers/galahad/glhd_context.c
@@ -182,43 +182,52 @@ galahad_context_create_sampler_state(struct pipe_context *_pipe,
 }
 
 static void
-galahad_context_bind_fragment_sampler_states(struct pipe_context *_pipe,
-                                      unsigned num_samplers,
-                                      void **samplers)
+galahad_context_bind_sampler_states(struct pipe_context *_pipe,
+                                    unsigned shader,
+                                    unsigned start,
+                                    unsigned num_samplers,
+                                    void **samplers)
 {
    struct galahad_context *glhd_pipe = galahad_context(_pipe);
    struct pipe_context *pipe = glhd_pipe->pipe;
 
    if (num_samplers > PIPE_MAX_SAMPLERS) {
-      glhd_error("%u fragment samplers requested, "
+      glhd_error("%u samplers requested, "
          "but only %u are permitted by API",
          num_samplers, PIPE_MAX_SAMPLERS);
    }
 
-   pipe->bind_fragment_sampler_states(pipe,
-                                      num_samplers,
-                                      samplers);
+   switch (shader) {
+   case PIPE_SHADER_VERTEX:
+      pipe->bind_vertex_sampler_states(pipe, num_samplers, samplers);
+      break;
+   case PIPE_SHADER_FRAGMENT:
+      pipe->bind_fragment_sampler_states(pipe, num_samplers, samplers);
+      break;
+   default:
+      assert(0);
+   }
 }
 
 static void
 galahad_context_bind_vertex_sampler_states(struct pipe_context *_pipe,
-                                    unsigned num_samplers,
-                                    void **samplers)
+                                           unsigned num_samplers,
+                                           void **samplers)
 {
-   struct galahad_context *glhd_pipe = galahad_context(_pipe);
-   struct pipe_context *pipe = glhd_pipe->pipe;
-
-   if (num_samplers > PIPE_MAX_SAMPLERS) {
-      glhd_error("%u vertex samplers requested, "
-         "but only %u are permitted by API",
-         num_samplers, PIPE_MAX_SAMPLERS);
-   }
+   galahad_context_bind_sampler_states(_pipe, PIPE_SHADER_VERTEX,
+                                       0, num_samplers, samplers);
+}
 
-   pipe->bind_vertex_sampler_states(pipe,
-                                    num_samplers,
-                                    samplers);
+static void
+galahad_context_bind_fragment_sampler_states(struct pipe_context *_pipe,
+                                             unsigned num_samplers,
+                                             void **samplers)
+{
+   galahad_context_bind_sampler_states(_pipe, PIPE_SHADER_FRAGMENT,
+                                       0, num_samplers, samplers);
 }
 
+
 static void
 galahad_context_delete_sampler_state(struct pipe_context *_pipe,
                               void *sampler)
@@ -558,9 +567,11 @@ galahad_context_set_viewport_state(struct pipe_context *_pipe,
 }
 
 static void
-galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe,
-                                    unsigned num,
-                                    struct pipe_sampler_view **_views)
+galahad_context_set_sampler_views(struct pipe_context *_pipe,
+                                  unsigned shader,
+                                  unsigned start,
+                                  unsigned num,
+                                  struct pipe_sampler_view **_views)
 {
    struct galahad_context *glhd_pipe = galahad_context(_pipe);
    struct pipe_context *pipe = glhd_pipe->pipe;
@@ -577,32 +588,37 @@ galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe,
       views = unwrapped_views;
    }
 
-   pipe->set_fragment_sampler_views(pipe, num, views);
+   switch (shader) {
+   case PIPE_SHADER_VERTEX:
+      pipe->set_vertex_sampler_views(pipe, num, views);
+      break;
+   case PIPE_SHADER_FRAGMENT:
+      pipe->set_fragment_sampler_views(pipe, num, views);
+      break;
+   default:
+      assert(0);
+   }
 }
 
 static void
 galahad_context_set_vertex_sampler_views(struct pipe_context *_pipe,
-                                  unsigned num,
-                                  struct pipe_sampler_view **_views)
+                                         unsigned num,
+                                         struct pipe_sampler_view **_views)
 {
-   struct galahad_context *glhd_pipe = galahad_context(_pipe);
-   struct pipe_context *pipe = glhd_pipe->pipe;
-   struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS];
-   struct pipe_sampler_view **views = NULL;
-   unsigned i;
-
-   if (_views) {
-      for (i = 0; i < num; i++)
-         unwrapped_views[i] = galahad_sampler_view_unwrap(_views[i]);
-      for (; i < Elements(unwrapped_views); i++)
-         unwrapped_views[i] = NULL;
-
-      views = unwrapped_views;
-   }
+   galahad_context_set_sampler_views(_pipe, PIPE_SHADER_VERTEX,
+                                     0, num, _views);
+}
 
-   pipe->set_vertex_sampler_views(pipe, num, views);
+static void
+galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe,
+                                         unsigned num,
+                                         struct pipe_sampler_view **_views)
+{
+   galahad_context_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT,
+                                     0, num, _views);
 }
 
+
 static void
 galahad_context_set_vertex_buffers(struct pipe_context *_pipe,
                             unsigned num_buffers,
-- 
1.7.3.4



More information about the mesa-dev mailing list