diff options
Diffstat (limited to 'src/mesa/main')
| -rw-r--r-- | src/mesa/main/compiler.h | 4 | ||||
| -rw-r--r-- | src/mesa/main/context.c | 41 | ||||
| -rw-r--r-- | src/mesa/main/context.h | 3 | ||||
| -rw-r--r-- | src/mesa/main/enums.c | 4 | ||||
| -rw-r--r-- | src/mesa/main/macros.h | 14 | ||||
| -rw-r--r-- | src/mesa/main/mipmap.c | 3 | ||||
| -rw-r--r-- | src/mesa/main/mtypes.h | 3 | ||||
| -rw-r--r-- | src/mesa/main/teximage.c | 2 | 
8 files changed, 48 insertions, 26 deletions
| diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h index 93103fe878..e79bbc2ac5 100644 --- a/src/mesa/main/compiler.h +++ b/src/mesa/main/compiler.h @@ -468,9 +468,9 @@ do {                                                                    \  #endif - +#ifndef Elements  #define Elements(x) (sizeof(x)/sizeof(*(x))) - +#endif diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 7a9c69ac90..415e339cb8 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1260,6 +1260,24 @@ initialize_framebuffer_size(GLcontext *ctx, GLframebuffer *fb)  /** + * Check if the viewport/scissor size has not yet been initialized. + * Initialize the size if the given width and height are non-zero. + */ +void +_mesa_check_init_viewport(GLcontext *ctx, GLuint width, GLuint height) +{ +   if (!ctx->ViewportInitialized && width > 0 && height > 0) { +      /* Note: set flag here, before calling _mesa_set_viewport(), to prevent +       * potential infinite recursion. +       */ +      ctx->ViewportInitialized = GL_TRUE; +      _mesa_set_viewport(ctx, 0, 0, width, height); +      _mesa_set_scissor(ctx, 0, 0, width, height); +   } +} + + +/**   * Bind the given context to the given drawBuffer and readBuffer and   * make it the current context for the calling thread.   * We'll render into the drawBuffer and read pixels from the @@ -1376,25 +1394,24 @@ _mesa_make_current( GLcontext *newCtx, GLframebuffer *drawBuffer,           ASSERT(drawBuffer->Height > 0);  #endif -         if (newCtx->FirstTimeCurrent) { -            /* set initial viewport and scissor size now */ -            _mesa_set_viewport(newCtx, 0, 0, -                               drawBuffer->Width, drawBuffer->Height); -	    _mesa_set_scissor(newCtx, 0, 0, -			      drawBuffer->Width, drawBuffer->Height ); -            check_context_limits(newCtx); +         if (drawBuffer) { +            _mesa_check_init_viewport(newCtx, +                                      drawBuffer->Width, drawBuffer->Height);           }        } -      /* We can use this to help debug user's problems.  Tell them to set -       * the MESA_INFO env variable before running their app.  Then the -       * first time each context is made current we'll print some useful -       * information. -       */        if (newCtx->FirstTimeCurrent) { +         check_context_limits(newCtx); + +         /* We can use this to help debug user's problems.  Tell them to set +          * the MESA_INFO env variable before running their app.  Then the +          * first time each context is made current we'll print some useful +          * information. +          */  	 if (_mesa_getenv("MESA_INFO")) {  	    _mesa_print_info();  	 } +  	 newCtx->FirstTimeCurrent = GL_FALSE;        }     } diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index 6b3e1b2b97..0531ae8ee8 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -130,6 +130,9 @@ extern void  _mesa_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask); +extern void +_mesa_check_init_viewport(GLcontext *ctx, GLuint width, GLuint height); +  extern GLboolean  _mesa_make_current( GLcontext *ctx, GLframebuffer *drawBuffer,                      GLframebuffer *readBuffer ); diff --git a/src/mesa/main/enums.c b/src/mesa/main/enums.c index 11f9a82e7c..7c62328fa9 100644 --- a/src/mesa/main/enums.c +++ b/src/mesa/main/enums.c @@ -958,8 +958,8 @@ LONGSTRING static const char enum_string_table[] =     "GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV\0"     "GL_MAX_VARYING_FLOATS\0"     "GL_MAX_VARYING_FLOATS_ARB\0" -   "GL_MAX_VERTEX_ATTRIBS\0" -   "GL_MAX_VERTEX_ATTRIBS_ARB\0" +   "GL_MAX_VERTEX_GENERIC_ATTRIBS\0" +   "GL_MAX_VERTEX_GENERIC_ATTRIBS_ARB\0"     "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS\0"     "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB\0"     "GL_MAX_VERTEX_UNIFORM_COMPONENTS\0" diff --git a/src/mesa/main/macros.h b/src/mesa/main/macros.h index 59def651a3..4ca7957ffa 100644 --- a/src/mesa/main/macros.h +++ b/src/mesa/main/macros.h @@ -83,28 +83,28 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];  /** Convert GLuint in [0,4294967295] to GLfloat in [0.0,1.0] */ -#define UINT_TO_FLOAT(U)    ((GLfloat) (U) * (1.0F / 4294967295.0F)) +#define UINT_TO_FLOAT(U)    ((GLfloat) (U) * (1.0F / 4294967295.0))  /** Convert GLfloat in [0.0,1.0] to GLuint in [0,4294967295] */ -#define FLOAT_TO_UINT(X)    ((GLuint) ((X) * 4294967295.0F)) +#define FLOAT_TO_UINT(X)    ((GLuint) ((X) * 4294967295.0))  /** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0] */ -#define INT_TO_FLOAT(I)     ((2.0F * (I) + 1.0F) * (1.0F/4294967294.0F)) +#define INT_TO_FLOAT(I)     ((2.0F * (I) + 1.0F) * (1.0F/4294967294.0))  /** Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647] */  /* causes overflow: -#define FLOAT_TO_INT(X)     ( (((GLint) (4294967294.0F * (X))) - 1) / 2 ) +#define FLOAT_TO_INT(X)     ( (((GLint) (4294967294.0 * (X))) - 1) / 2 )  */  /* a close approximation: */ -#define FLOAT_TO_INT(X)     ( (GLint) (2147483647.0F * (X)) ) +#define FLOAT_TO_INT(X)     ( (GLint) (2147483647.0 * (X)) )  /** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0], texture/fb data */ -#define INT_TO_FLOAT_TEX(I)    ((I) == -2147483648 ? -1.0F : (I) * (1.0F/2147483647.0F)) +#define INT_TO_FLOAT_TEX(I)    ((I) == -2147483648 ? -1.0F : (I) * (1.0F/2147483647.0))  /** Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647], texture/fb data */ -#define FLOAT_TO_INT_TEX(X)    ( (GLint) (2147483647.0F * (X)) ) +#define FLOAT_TO_INT_TEX(X)    ( (GLint) (2147483647.0 * (X)) )  #define BYTE_TO_UBYTE(b)   ((GLubyte) ((b) < 0 ? 0 : (GLubyte) (b))) diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c index 872982fa43..3dca09d9f2 100644 --- a/src/mesa/main/mipmap.c +++ b/src/mesa/main/mipmap.c @@ -1601,9 +1601,6 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,           return;        } -      if (dstImage->ImageOffsets) -         _mesa_free(dstImage->ImageOffsets); -        /* Free old image data */        if (dstImage->Data)           ctx->Driver.FreeTexImageData(ctx, dstImage); diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 135eedbcab..e52278a7b2 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2053,6 +2053,7 @@ struct gl_shader_state     struct gl_shader_program *CurrentProgram; /**< The user-bound program */     /** Driver-selectable options: */     GLboolean EmitHighLevelInstructions; /**< IF/ELSE/ENDIF vs. BRA, etc. */ +   GLboolean EmitContReturn;            /**< Emit CONT/RET opcodes? */     GLboolean EmitCondCodes;             /**< Use condition codes? */     GLboolean EmitComments;              /**< Annotated instructions */     void *MemPool; @@ -2981,6 +2982,8 @@ struct __GLcontextRec     GLenum RenderMode;        /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */     GLbitfield NewState;      /**< bitwise-or of _NEW_* flags */ +   GLboolean ViewportInitialized;  /**< has viewport size been initialized? */ +     GLbitfield varying_vp_inputs;  /**< mask of VERT_BIT_* flags */     /** \name Derived state */ diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 76b46d700b..6e21066537 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -1250,6 +1250,8 @@ _mesa_init_teximage_fields(GLcontext *ctx, GLenum target,      * We allocate the array for 1D/2D textures too in order to avoid special-      * case code in the texstore routines.      */ +   if (img->ImageOffsets) +      _mesa_free(img->ImageOffsets);     img->ImageOffsets = (GLuint *) _mesa_malloc(depth * sizeof(GLuint));     for (i = 0; i < depth; i++) {        img->ImageOffsets[i] = i * width * height; | 
