On Friday 02 December 2011, Vincent Lejeune wrote: > --- > src/mesa/state_tracker/st_atom_constbuf.c | 8 +++ > src/mesa/state_tracker/st_extensions.c | 4 + > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 92 > ++++++++++++++-------------- > 3 files changed, 59 insertions(+), 45 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom_constbuf.c > b/src/mesa/state_tracker/st_atom_constbuf.c > index 05667a7..8061347 100644 > --- a/src/mesa/state_tracker/st_atom_constbuf.c > +++ b/src/mesa/state_tracker/st_atom_constbuf.c > @@ -45,6 +45,8 @@ > #include "st_atom_constbuf.h" > #include "st_program.h" > > +#include "st_cb_bufferobjects.h" > + > > /** > * Pass the given program parameters to the graphics pipe as a > @@ -55,6 +57,7 @@ void st_upload_constants( struct st_context *st, > struct gl_program_parameter_list *params, > unsigned shader_type) > { > + unsigned i; > struct pipe_context *pipe = st->pipe; > > assert(shader_type == PIPE_SHADER_VERTEX || > @@ -100,6 +103,11 @@ void st_upload_constants( struct st_context *st, > st->state.constants[shader_type].size = 0; > st->pipe->set_constant_buffer(st->pipe, shader_type, 0, NULL); > } > + > + for (i = 0; i < params->NumUBO; i++) { > + struct st_buffer_object* buf = > st_buffer_object(st->ctx->UniformBufferObject.BindingPoint[i]); > + st->pipe->set_constant_buffer(st->pipe,shader_type,i+1,buf->buffer); > + } > } > > > diff --git a/src/mesa/state_tracker/st_extensions.c > b/src/mesa/state_tracker/st_extensions.c > index c741d13..93f6bc6 100644 > --- a/src/mesa/state_tracker/st_extensions.c > +++ b/src/mesa/state_tracker/st_extensions.c > @@ -670,4 +670,8 @@ void st_init_extensions(struct st_context *st) > PIPE_BIND_SAMPLER_VIEW)) > ctx->Extensions.ARB_texture_rgb10_a2ui = GL_TRUE; > > +#if FEATURE_ARB_uniform_buffer_object > + if (screen->get_param(screen,PIPE_SHADER_CAP_MAX_CONST_BUFFERS) > 1) > + ctx->Extensions.ARB_uniform_buffer_object = GL_TRUE; > +#endif
As I pointed out on IRC, you are using the wrong function here. You should be calling screen->get_shader_param(). When you pass PIPE_SHADER_CAP_MAX_CONST_BUFFERS to pipe_screen::get_param(), you are actually quering the driver for PIPE_CAP_MAX_RENDER_TARGETS. Regards, Fredrik _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev