diff options
| author | Jakob Bornecrantz <jakob@vmware.com> | 2009-06-09 07:53:25 +0200 | 
|---|---|---|
| committer | Jakob Bornecrantz <jakob@vmware.com> | 2009-06-09 07:53:25 +0200 | 
| commit | ee98ae5a29ca870149c4a0d2a8f25f55e0fd333a (patch) | |
| tree | 308fa87e22a276c0f8f28fd9f0986d20b52be928 /src/mesa | |
| parent | d9617deb008b75f4a605a30408aeb1948139c33e (diff) | |
| parent | 76a1017e978f8e51114d765c8c98ff25da13042b (diff) | |
Merge branch 'mesa_7_5_branch'
Conflicts:
	Makefile
	src/mesa/main/version.h
	src/mesa/shader/slang/slang_preprocess.c
	src/mesa/state_tracker/st_cb_bufferobjects.c
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/main/config.h | 4 | ||||
| -rw-r--r-- | src/mesa/main/debug.c | 2 | ||||
| -rw-r--r-- | src/mesa/shader/arbprogparse.c | 5 | ||||
| -rw-r--r-- | src/mesa/state_tracker/st_cb_bufferobjects.c | 10 | ||||
| -rw-r--r-- | src/mesa/state_tracker/st_program.c | 43 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_exec_api.c | 29 | 
6 files changed, 54 insertions, 39 deletions
| diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h index 5a05a65396..f77a29a43e 100644 --- a/src/mesa/main/config.h +++ b/src/mesa/main/config.h @@ -179,7 +179,7 @@  /*@{*/  #define MAX_PROGRAM_INSTRUCTIONS  (16 * 1024)  #define MAX_PROGRAM_LOCAL_PARAMS 256 /**< per-program constants (power of two) */ -#define MAX_PROGRAM_ENV_PARAMS 128 +#define MAX_PROGRAM_ENV_PARAMS 256   /**< per-context constants (power of two) */  #define MAX_PROGRAM_MATRICES 8  #define MAX_PROGRAM_MATRIX_STACK_DEPTH 4  #define MAX_PROGRAM_CALL_DEPTH 8 @@ -196,7 +196,7 @@  /*@{*/  #define MAX_NV_VERTEX_PROGRAM_INSTRUCTIONS 128  #define MAX_NV_VERTEX_PROGRAM_TEMPS         12 -#define MAX_NV_VERTEX_PROGRAM_PARAMS        MAX_PROGRAM_ENV_PARAMS +#define MAX_NV_VERTEX_PROGRAM_PARAMS        96  #define MAX_NV_VERTEX_PROGRAM_INPUTS        16  #define MAX_NV_VERTEX_PROGRAM_OUTPUTS       15  /*@}*/ diff --git a/src/mesa/main/debug.c b/src/mesa/main/debug.c index 7276c22742..1c8c44fcb9 100644 --- a/src/mesa/main/debug.c +++ b/src/mesa/main/debug.c @@ -285,7 +285,7 @@ write_texture_image(struct gl_texture_object *texObj)        case MESA_FORMAT_RGB565:           {              GLubyte *buf2 = (GLubyte *) _mesa_malloc(img->Width * img->Height * 3); -            GLint i; +            GLuint i;              for (i = 0; i < img->Width * img->Height; i++) {                 GLint r, g, b;                 GLushort s = ((GLushort *) img->Data)[i]; diff --git a/src/mesa/shader/arbprogparse.c b/src/mesa/shader/arbprogparse.c index a90ce95a63..7e166830fd 100644 --- a/src/mesa/shader/arbprogparse.c +++ b/src/mesa/shader/arbprogparse.c @@ -1022,7 +1022,10 @@ parse_teximage_num (GLcontext * ctx, const GLubyte ** inst,     GLint i = parse_integer (inst, Program);     if ((i < 0) || (i >= (int)ctx->Const.MaxTextureImageUnits)) { -      program_error(ctx, Program->Position, "Invalid texture image index"); +      char s[100]; +      _mesa_snprintf(s, sizeof(s), "Invalid texture image index %d (%u is max)", +                     i, ctx->Const.MaxTextureImageUnits); +      program_error(ctx, Program->Position, s);        return 1;     } diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c index f140641d7e..7021d73208 100644 --- a/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -245,11 +245,10 @@ st_bufferobj_map_range(GLcontext *ctx, GLenum target,     assert(offset < obj->Size);     assert(offset + length <= obj->Size); -   map = obj->Pointer = pipe_buffer_map_range(pipe->screen, st_obj->buffer, -                                              offset, length, flags); -   if (obj->Pointer) { -      obj->Offset = 0; -      obj->Length = obj->Size; +   map = obj->Pointer = pipe_buffer_map_range(pipe->screen, st_obj->buffer, offset, length, flags); +   if(obj->Pointer) { +      obj->Offset = offset; +      obj->Length = length;        map += offset;     } @@ -268,7 +267,6 @@ st_bufferobj_flush_mapped_range(GLcontext *ctx, GLenum target,     /* Subrange is relative to mapped range */     assert(offset >= 0);     assert(length >= 0); -   assert(offset < obj->Length);     assert(offset + length <= obj->Length);     pipe_buffer_flush_mapped_range(pipe->screen, st_obj->buffer,  diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 34926101ed..72ca852458 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -55,20 +55,6 @@  #define TGSI_DEBUG 0 -/** XXX we should use the version of this from u_memory.h but including - * that header causes symbol collisions. - */ -static INLINE void * -mem_dup(const void *src, uint size) -{ -   void *dup = _mesa_malloc(size); -   if (dup) -      _mesa_memcpy(dup, src, size); -   return dup; -} - - -  /**   * Translate a Mesa vertex shader into a TGSI shader.   * \param outputMapping  to map vertex program output registers (VERT_RESULT_x) @@ -84,7 +70,7 @@ st_translate_vertex_program(struct st_context *st,                              const ubyte *outputSemanticIndex)  {     struct pipe_context *pipe = st->pipe; -   struct tgsi_token tokens[ST_MAX_SHADER_TOKENS]; +   struct tgsi_token *tokens;     GLuint defaultOutputMapping[VERT_RESULT_MAX];     struct pipe_shader_state vs;     GLuint attr, i; @@ -102,6 +88,13 @@ st_translate_vertex_program(struct st_context *st,     GLbitfield input_flags[MAX_PROGRAM_INPUTS];     GLbitfield output_flags[MAX_PROGRAM_OUTPUTS]; +   tokens =  (struct tgsi_token *)MALLOC(ST_MAX_SHADER_TOKENS * sizeof *tokens); +   if(!tokens) { +      /* FIXME: propagate error to the caller */ +      assert(0); +      return; +   } +     memset(&vs, 0, sizeof(vs));     memset(input_flags, 0, sizeof(input_flags));     memset(output_flags, 0, sizeof(output_flags)); @@ -297,9 +290,6 @@ st_translate_vertex_program(struct st_context *st,        }     } -   assert(vs_output_semantic_name[0] == TGSI_SEMANTIC_POSITION); - -     if (outputMapping) {        /* find max output slot referenced to compute vs_num_outputs */        GLuint maxSlot = 0; @@ -347,7 +337,9 @@ st_translate_vertex_program(struct st_context *st,     assert(num_tokens < ST_MAX_SHADER_TOKENS);     vs.tokens = (struct tgsi_token *) -      mem_dup(tokens, num_tokens * sizeof(tokens[0])); +      _mesa_realloc(tokens, +                    ST_MAX_SHADER_TOKENS * sizeof *tokens, +                    num_tokens * sizeof *tokens);     stvp->num_inputs = vs_num_inputs;     stvp->state = vs; /* struct copy */ @@ -375,7 +367,7 @@ st_translate_fragment_program(struct st_context *st,                                const GLuint inputMapping[])  {     struct pipe_context *pipe = st->pipe; -   struct tgsi_token tokens[ST_MAX_SHADER_TOKENS]; +   struct tgsi_token *tokens;     GLuint outputMapping[FRAG_RESULT_MAX];     GLuint defaultInputMapping[FRAG_ATTRIB_MAX];     struct pipe_shader_state fs; @@ -395,6 +387,13 @@ st_translate_fragment_program(struct st_context *st,     GLbitfield input_flags[MAX_PROGRAM_INPUTS];     GLbitfield output_flags[MAX_PROGRAM_OUTPUTS]; +   tokens =  (struct tgsi_token *)MALLOC(ST_MAX_SHADER_TOKENS * sizeof *tokens); +   if(!tokens) { +      /* FIXME: propagate error to the caller */ +      assert(0); +      return; +   } +     memset(&fs, 0, sizeof(fs));     memset(input_flags, 0, sizeof(input_flags));     memset(output_flags, 0, sizeof(output_flags)); @@ -536,7 +535,9 @@ st_translate_fragment_program(struct st_context *st,     assert(num_tokens < ST_MAX_SHADER_TOKENS);     fs.tokens = (struct tgsi_token *) -      mem_dup(tokens, num_tokens * sizeof(tokens[0])); +      _mesa_realloc(tokens, +                    ST_MAX_SHADER_TOKENS * sizeof *tokens, +                    num_tokens * sizeof *tokens);     stfp->state = fs; /* struct copy */     stfp->driver_shader = pipe->create_fs_state(pipe, &fs); diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 6871ee5cab..372d6819c1 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -727,19 +727,32 @@ void vbo_exec_vtx_init( struct vbo_exec_context *exec )  void vbo_exec_vtx_destroy( struct vbo_exec_context *exec )  { -   if (exec->vtx.bufferobj->Name) { -      /* using a real VBO for vertex data */ -      GLcontext *ctx = exec->ctx; -      _mesa_reference_buffer_object(ctx, &exec->vtx.bufferobj, NULL); -   } -   else { -      /* just using malloc'd space for vertex data */ -      if (exec->vtx.buffer_map) { +   /* using a real VBO for vertex data */ +   GLcontext *ctx = exec->ctx; +   unsigned i; + +   /* True VBOs should already be unmapped +    */ +   if (exec->vtx.buffer_map) { +      assert (exec->vtx.bufferobj->Name == 0); +      if (exec->vtx.bufferobj->Name == 0) {           ALIGN_FREE(exec->vtx.buffer_map);           exec->vtx.buffer_map = NULL;           exec->vtx.buffer_ptr = NULL;        }     } + +   /* Drop any outstanding reference to the vertex buffer +    */ +   for (i = 0; i < Elements(exec->vtx.arrays); i++) { +      _mesa_reference_buffer_object(ctx, +                                    &exec->vtx.arrays[i].BufferObj, +                                    NULL); +   } + +   /* Free the vertex buffer: +    */ +   _mesa_reference_buffer_object(ctx, &exec->vtx.bufferobj, NULL);  }  void vbo_exec_BeginVertices( GLcontext *ctx ) | 
