Mesa (master): mesa: plug in new functions for GL_ARB_sampler_objects

Brian Paul brianp at kemper.freedesktop.org
Mon Apr 11 20:23:52 PDT 2011


Module: Mesa
Branch: master
Commit: 34a5d3b9f4740601708c82093e2114356d749e65
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=34a5d3b9f4740601708c82093e2114356d749e65

Author: Brian Paul <brianp at vmware.com>
Date:   Sun Apr 10 12:48:28 2011 -0600

mesa: plug in new functions for GL_ARB_sampler_objects

Build the new sources, plug the new functions into the dispatch table,
implement display list support.  And enable extension in the gallium
state tracker.

---

 src/mesa/SConscript                    |    1 +
 src/mesa/main/api_exec.c               |    7 +++++++
 src/mesa/main/dlist.c                  |   29 +++++++++++++++++++++++++++++
 src/mesa/main/mfeatures.h              |    1 +
 src/mesa/sources.mak                   |    1 +
 src/mesa/state_tracker/st_context.c    |    2 ++
 src/mesa/state_tracker/st_extensions.c |    1 +
 7 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/src/mesa/SConscript b/src/mesa/SConscript
index f98f7df..39388c8 100644
--- a/src/mesa/SConscript
+++ b/src/mesa/SConscript
@@ -100,6 +100,7 @@ main_sources = [
     'main/readpix.c',
     'main/remap.c',
     'main/renderbuffer.c',
+    'main/samplerobj.c',
     'main/scissor.c',
     'main/shaderapi.c',
     'main/shaderobj.c',
diff --git a/src/mesa/main/api_exec.c b/src/mesa/main/api_exec.c
index 91cdea5..d0298df 100644
--- a/src/mesa/main/api_exec.c
+++ b/src/mesa/main/api_exec.c
@@ -78,6 +78,9 @@
 #include "polygon.h"
 #include "queryobj.h"
 #include "readpix.h"
+#if FEATURE_ARB_sampler_objects
+#include "samplerobj.h"
+#endif
 #include "scissor.h"
 #include "stencil.h"
 #include "texenv.h"
@@ -729,6 +732,10 @@ _mesa_create_exec_table(void)
    /* GL_ARB_texture_buffer_object */
    SET_TexBufferARB(exec, _mesa_TexBuffer);
 
+#if FEATURE_ARB_sampler_objects
+   _mesa_init_sampler_object_dispatch(exec);
+#endif
+
    return exec;
 }
 
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 7e86f1d..f66082e 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -49,6 +49,7 @@
 #include "eval.h"
 #include "framebuffer.h"
 #include "glapi/glapi.h"
+#include "glapidispatch.h"
 #include "hash.h"
 #include "image.h"
 #include "light.h"
@@ -437,6 +438,9 @@ typedef enum
    /* GL_NV_texture_barrier */
    OPCODE_TEXTURE_BARRIER_NV,
 
+   /* GL_ARB_sampler_object */
+   OPCODE_BIND_SAMPLER,
+
    /* The following three are meta instructions */
    OPCODE_ERROR,                /* raise compiled-in error */
    OPCODE_CONTINUE,
@@ -7066,6 +7070,24 @@ save_TextureBarrierNV(void)
 }
 
 
+/* GL_ARB_sampler_objects */
+static void
+save_BindSampler(GLuint unit, GLuint sampler)
+{
+   Node *n;
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_BIND_SAMPLER, 2);
+   if (n) {
+      n[1].ui = unit;
+      n[2].ui = sampler;
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_BindSampler(ctx->Exec, (unit, sampler));
+   }
+}
+
+
 /**
  * Save an error-generating command into display list.
  *
@@ -8249,6 +8271,10 @@ execute_list(struct gl_context *ctx, GLuint list)
             CALL_TextureBarrierNV(ctx->Exec, ());
             break;
 
+         case OPCODE_BIND_SAMPLER:
+            CALL_BindSampler(ctx->Exec, (n[1].ui, n[2].ui));
+            break;
+
          case OPCODE_CONTINUE:
             n = (Node *) n[1].next;
             break;
@@ -9930,6 +9956,9 @@ _mesa_create_save_table(void)
    /* GL_NV_texture_barrier */
    SET_TextureBarrierNV(table, save_TextureBarrierNV);
 
+   /* GL_ARB_sampler_objects */
+   SET_BindSampler(table, save_BindSampler);
+
    /* GL_ARB_draw_buffer_blend */
    SET_BlendFunciARB(table, save_BlendFunci);
    SET_BlendFuncSeparateiARB(table, save_BlendFuncSeparatei);
diff --git a/src/mesa/main/mfeatures.h b/src/mesa/main/mfeatures.h
index 1b39f5f..33db508 100644
--- a/src/mesa/main/mfeatures.h
+++ b/src/mesa/main/mfeatures.h
@@ -122,6 +122,7 @@
 #define FEATURE_ARB_framebuffer_object    (FEATURE_GL && FEATURE_EXT_framebuffer_object)
 #define FEATURE_ARB_map_buffer_range      FEATURE_GL
 #define FEATURE_ARB_pixel_buffer_object   (FEATURE_GL && FEATURE_EXT_pixel_buffer_object)
+#define FEATURE_ARB_sampler_objects       FEATURE_GL
 #define FEATURE_ARB_sync                  FEATURE_GL
 #define FEATURE_ARB_vertex_buffer_object  1
 
diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak
index fcf8ab2..9b2cb1a 100644
--- a/src/mesa/sources.mak
+++ b/src/mesa/sources.mak
@@ -71,6 +71,7 @@ MAIN_SOURCES = \
 	main/readpix.c \
 	main/remap.c \
 	main/renderbuffer.c \
+	main/samplerobj.c \
 	main/scissor.c \
 	main/shaderapi.c \
 	main/shaderobj.c \
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index a946189..ce78956 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -27,6 +27,7 @@
 
 #include "main/imports.h"
 #include "main/context.h"
+#include "main/samplerobj.h"
 #include "main/shaderobj.h"
 #include "program/prog_cache.h"
 #include "vbo/vbo.h"
@@ -269,6 +270,7 @@ void st_destroy_context( struct st_context *st )
 void st_init_driver_functions(struct dd_function_table *functions)
 {
    _mesa_init_shader_object_functions(functions);
+   _mesa_init_sampler_object_functions(functions);
 
    st_init_accum_functions(functions);
    st_init_blit_functions(functions);
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index e327790..9bc9d7a 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -228,6 +228,7 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.ARB_half_float_pixel = GL_TRUE;
    ctx->Extensions.ARB_map_buffer_range = GL_TRUE;
    ctx->Extensions.ARB_multisample = GL_TRUE;
+   ctx->Extensions.ARB_sampler_objects = GL_TRUE;
    ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; /* XXX temp */
    ctx->Extensions.ARB_texture_compression = GL_TRUE;
    ctx->Extensions.ARB_texture_cube_map = GL_TRUE;



More information about the mesa-commit mailing list