From 34a5d3b9f4740601708c82093e2114356d749e65 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sun, 10 Apr 2011 12:48:28 -0600 Subject: [PATCH] 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(+) 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; -- 2.7.4