[Mesa-dev] [PATCH 6/6] st/mesa: add sampler/texture support for geometry shaders

Brian Paul brianp at vmware.com
Fri Aug 3 07:07:40 PDT 2012


---
 src/mesa/state_tracker/st_atom_sampler.c |    2 --
 src/mesa/state_tracker/st_atom_texture.c |   24 ++++++++++++++++++++++++
 src/mesa/state_tracker/st_context.c      |    5 +++++
 src/mesa/state_tracker/st_context.h      |    8 ++++++--
 4 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c
index 8dc45fd..04e7c4e 100644
--- a/src/mesa/state_tracker/st_atom_sampler.c
+++ b/src/mesa/state_tracker/st_atom_sampler.c
@@ -267,14 +267,12 @@ update_samplers(struct st_context *st)
 
    if (ctx->Const.MaxGeometryTextureImageUnits > 0 &&
        ctx->GeometryProgram._Current) {
-/*
       update_shader_samplers(st,
                              PIPE_SHADER_GEOMETRY,
                              &ctx->GeometryProgram._Current->Base,
                              ctx->Const.MaxGeometryTextureImageUnits,
                              st->state.geometry_samplers,
                              &st->state.num_geometry_samplers);
-*/
    }
 }
 
diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
index e88675d..37e5277 100644
--- a/src/mesa/state_tracker/st_atom_texture.c
+++ b/src/mesa/state_tracker/st_atom_texture.c
@@ -332,6 +332,20 @@ update_fragment_textures(struct st_context *st)
 }
 
 
+static void
+update_geometry_textures(struct st_context *st)
+{
+   const struct gl_context *ctx = st->ctx;
+
+   update_textures(st,
+                   PIPE_SHADER_GEOMETRY,
+                   &ctx->GeometryProgram._Current->Base,
+                   ctx->Const.MaxTextureImageUnits,
+                   st->state.geometry_sampler_views,
+                   &st->state.num_geometry_textures);
+}
+
+
 const struct st_tracked_state st_update_texture = {
    "st_update_texture",					/* name */
    {							/* dirty */
@@ -352,6 +366,16 @@ const struct st_tracked_state st_update_vertex_texture = {
 };
 
 
+const struct st_tracked_state st_update_geometry_texture = {
+   "st_update_geometry_texture",			/* name */
+   {							/* dirty */
+      _NEW_TEXTURE,					/* mesa */
+      ST_NEW_GEOMETRY_PROGRAM,				/* st */
+   },
+   update_geometry_textures				/* update */
+};
+
+
 
 static void
 finalize_textures(struct st_context *st)
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 2f95161..1b5703b 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -258,6 +258,11 @@ static void st_destroy_context_priv( struct st_context *st )
                                 &st->state.vertex_sampler_views[i]);
    }
 
+   for (i = 0; i < Elements(st->state.geometry_sampler_views); i++) {
+      pipe_sampler_view_release(st->pipe,
+                                &st->state.geometry_sampler_views[i]);
+   }
+
    if (st->default_texture) {
       st->ctx->Driver.DeleteTexture(st->ctx, st->default_texture);
       st->default_texture = NULL;
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index 0dfd81c..f8fb74c 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -98,8 +98,9 @@ struct st_context
       struct pipe_blend_state               blend;
       struct pipe_depth_stencil_alpha_state depth_stencil;
       struct pipe_rasterizer_state          rasterizer;
-      struct pipe_sampler_state    fragment_samplers[PIPE_MAX_SAMPLERS];
-      struct pipe_sampler_state    vertex_samplers[PIPE_MAX_VERTEX_SAMPLERS];
+      struct pipe_sampler_state fragment_samplers[PIPE_MAX_SAMPLERS];
+      struct pipe_sampler_state vertex_samplers[PIPE_MAX_VERTEX_SAMPLERS];
+      struct pipe_sampler_state geometry_samplers[PIPE_MAX_GEOMETRY_SAMPLERS];
       struct pipe_clip_state clip;
       struct {
          void *ptr;
@@ -108,14 +109,17 @@ struct st_context
       struct pipe_framebuffer_state framebuffer;
       struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
       struct pipe_sampler_view *vertex_sampler_views[PIPE_MAX_VERTEX_SAMPLERS];
+      struct pipe_sampler_view *geometry_sampler_views[PIPE_MAX_GEOMETRY_SAMPLERS];
       struct pipe_scissor_state scissor;
       struct pipe_viewport_state viewport;
       unsigned sample_mask;
 
       GLuint num_fragment_samplers;
       GLuint num_vertex_samplers;
+      GLuint num_geometry_samplers;
       GLuint num_fragment_textures;
       GLuint num_vertex_textures;
+      GLuint num_geometry_textures;
 
       GLuint poly_stipple[32];  /**< In OpenGL's bottom-to-top order */
 
-- 
1.7.3.4



More information about the mesa-dev mailing list