diff options
Diffstat (limited to 'src/mesa/drivers')
| -rw-r--r-- | src/mesa/drivers/dri/common/utils.c | 5 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/utils.h | 3 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/ffb/ffb_xmesa.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/i810/i810screen.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_screen.c | 60 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/mach64/mach64_screen.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/mga/mga_xmesa.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nouveau_screen.c | 3 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r128/r128_screen.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/compiler/r500_fragprog.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c | 15 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_screen.c | 9 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/savage/savage_xmesa.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/sis/sis_screen.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/swrast/swrast.c | 3 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/tdfx/tdfx_screen.c | 3 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/unichrome/via_screen.c | 2 | 
17 files changed, 76 insertions, 43 deletions
diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c index 81d026a697..833f9ad232 100644 --- a/src/mesa/drivers/dri/common/utils.c +++ b/src/mesa/drivers/dri/common/utils.c @@ -424,7 +424,8 @@ driCreateConfigs(GLenum fb_format, GLenum fb_type,  		 const uint8_t * depth_bits, const uint8_t * stencil_bits,  		 unsigned num_depth_stencil_bits,  		 const GLenum * db_modes, unsigned num_db_modes, -		 const uint8_t * msaa_samples, unsigned num_msaa_modes) +		 const uint8_t * msaa_samples, unsigned num_msaa_modes, +		 GLboolean enable_accum)  {     static const uint8_t bits_table[4][4] = {       /* R  G  B  A */ @@ -486,7 +487,7 @@ driCreateConfigs(GLenum fb_format, GLenum fb_type,     __GLcontextModes *modes;     unsigned i, j, k, h;     unsigned num_modes; -   unsigned num_accum_bits = 2; +   unsigned num_accum_bits = (enable_accum) ? 2 : 1;     switch ( fb_type ) {        case GL_UNSIGNED_BYTE_3_3_2: diff --git a/src/mesa/drivers/dri/common/utils.h b/src/mesa/drivers/dri/common/utils.h index 2aa6de66c1..02ca3feb73 100644 --- a/src/mesa/drivers/dri/common/utils.h +++ b/src/mesa/drivers/dri/common/utils.h @@ -104,7 +104,8 @@ driCreateConfigs(GLenum fb_format, GLenum fb_type,  		 const uint8_t * depth_bits, const uint8_t * stencil_bits,  		 unsigned num_depth_stencil_bits,  		 const GLenum * db_modes, unsigned num_db_modes, -    		 const uint8_t * msaa_samples, unsigned num_msaa_modes); +		 const uint8_t * msaa_samples, unsigned num_msaa_modes, +		 GLboolean enable_accum);  __DRIconfig **driConcatConfigs(__DRIconfig **a,  			       __DRIconfig **b); diff --git a/src/mesa/drivers/dri/ffb/ffb_xmesa.c b/src/mesa/drivers/dri/ffb/ffb_xmesa.c index 6a84651479..7fdf883cdf 100644 --- a/src/mesa/drivers/dri/ffb/ffb_xmesa.c +++ b/src/mesa/drivers/dri/ffb/ffb_xmesa.c @@ -658,7 +658,7 @@ ffbFillInModes( __DRIscreen *psp,  			      depth_bits_array, stencil_bits_array,  			      depth_buffer_factor, back_buffer_modes,  			      back_buffer_factor, -                               msaa_samples_array, 1); +			      msaa_samples_array, 1, TRUE);     if (configs == NULL) {        fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,                __LINE__); diff --git a/src/mesa/drivers/dri/i810/i810screen.c b/src/mesa/drivers/dri/i810/i810screen.c index 476c801358..1c4deef319 100644 --- a/src/mesa/drivers/dri/i810/i810screen.c +++ b/src/mesa/drivers/dri/i810/i810screen.c @@ -92,7 +92,7 @@ i810FillInModes( __DRIscreen *psp,  			       depth_bits_array, stencil_bits_array,  			       depth_buffer_factor,  			       back_buffer_modes, back_buffer_factor, -                               msaa_samples_array, 1); +                               msaa_samples_array, 1, GL_TRUE);      if (configs == NULL) {  	fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",  		 __func__, __LINE__ ); diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c index c9ef1647a3..fa46b252ee 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -341,8 +341,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)     GLenum fb_type[3];     static const GLenum back_buffer_modes[] = { -       GLX_NONE, GLX_SWAP_UNDEFINED_OML, -       GLX_SWAP_EXCHANGE_OML, GLX_SWAP_COPY_OML +       GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML     };     uint8_t depth_bits[4], stencil_bits[4], msaa_samples_array[1];     int color; @@ -374,15 +373,6 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)     intelScreen->irq_active = 1;     psp->extensions = intelScreenExtensions; -   depth_bits[0] = 0; -   stencil_bits[0] = 0; -   depth_bits[1] = 16; -   stencil_bits[1] = 0; -   depth_bits[2] = 24; -   stencil_bits[2] = 0; -   depth_bits[3] = 24; -   stencil_bits[3] = 8; -     msaa_samples_array[0] = 0;     fb_format[0] = GL_RGB; @@ -397,27 +387,27 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)     depth_bits[0] = 0;     stencil_bits[0] = 0; +   /* Generate a rich set of useful configs that do not include an +    * accumulation buffer. +    */     for (color = 0; color < ARRAY_SIZE(fb_format); color++) {        __DRIconfig **new_configs;        int depth_factor; -      /* With DRI2 right now, GetBuffers always returns a depth/stencil buffer -       * with the same cpp as the drawable.  So we can't support depth cpp != -       * color cpp currently. +      /* Starting with DRI2 protocol version 1.1 we can request a depth/stencil +       * buffer that has a diffferent number of bits per pixel than the color +       * buffer.  This isn't yet supported here.         */        if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) {  	 depth_bits[1] = 16;  	 stencil_bits[1] = 0; - -	 depth_factor = 2;        } else {  	 depth_bits[1] = 24; -	 stencil_bits[1] = 0; -	 depth_bits[2] = 24; -	 stencil_bits[2] = 8; - -	 depth_factor = 3; +	 stencil_bits[1] = 8;        } + +      depth_factor = 2; +        new_configs = driCreateConfigs(fb_format[color], fb_type[color],  				     depth_bits,  				     stencil_bits, @@ -425,7 +415,33 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)  				     back_buffer_modes,  				     ARRAY_SIZE(back_buffer_modes),  				     msaa_samples_array, -				     ARRAY_SIZE(msaa_samples_array)); +				     ARRAY_SIZE(msaa_samples_array), +				     GL_FALSE); +      if (configs == NULL) +	 configs = new_configs; +      else +	 configs = driConcatConfigs(configs, new_configs); +   } + +   /* Generate the minimum possible set of configs that include an +    * accumulation buffer. +    */ +   for (color = 0; color < ARRAY_SIZE(fb_format); color++) { +      __DRIconfig **new_configs; + +      if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) { +	 depth_bits[0] = 16; +	 stencil_bits[0] = 0; +      } else { +	 depth_bits[0] = 24; +	 stencil_bits[0] = 8; +      } + +      new_configs = driCreateConfigs(fb_format[color], fb_type[color], +				     depth_bits, stencil_bits, 1, +				     back_buffer_modes + 1, 1, +				     msaa_samples_array, 1, +				     GL_TRUE);        if (configs == NULL)  	 configs = new_configs;        else diff --git a/src/mesa/drivers/dri/mach64/mach64_screen.c b/src/mesa/drivers/dri/mach64/mach64_screen.c index 5cbfb85627..99aad574c8 100644 --- a/src/mesa/drivers/dri/mach64/mach64_screen.c +++ b/src/mesa/drivers/dri/mach64/mach64_screen.c @@ -119,7 +119,7 @@ mach64FillInModes( __DRIscreen *psp,  			       depth_bits_array, stencil_bits_array,  			       depth_buffer_factor, back_buffer_modes,  			       back_buffer_factor, -                               msaa_samples_array, 1); +                               msaa_samples_array, 1, TRUE);      if (configs == NULL) {         fprintf(stderr, "[%s:%u] Error creating FBConfig!\n",  	       __func__, __LINE__); diff --git a/src/mesa/drivers/dri/mga/mga_xmesa.c b/src/mesa/drivers/dri/mga/mga_xmesa.c index e7813b6372..687412bca5 100644 --- a/src/mesa/drivers/dri/mga/mga_xmesa.c +++ b/src/mesa/drivers/dri/mga/mga_xmesa.c @@ -160,7 +160,7 @@ mgaFillInModes( __DRIscreen *psp,  			       depth_bits_array, stencil_bits_array,  			       depth_buffer_factor,  			       back_buffer_modes, back_buffer_factor, -                               msaa_samples_array, 1); +                               msaa_samples_array, 1, GL_TRUE);      if (configs == NULL) {  	fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",  		 __func__, __LINE__ ); diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.c b/src/mesa/drivers/dri/nouveau/nouveau_screen.c index de6328251e..6abab8c965 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_screen.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.c @@ -83,7 +83,8 @@ nouveau_get_configs(void)  					  back_buffer_modes,  					  Elements(back_buffer_modes),  					  msaa_samples, -					  Elements(msaa_samples)); +					  Elements(msaa_samples), +					  GL_TRUE);  		assert(config);  		configs = configs ? driConcatConfigs(configs, config) diff --git a/src/mesa/drivers/dri/r128/r128_screen.c b/src/mesa/drivers/dri/r128/r128_screen.c index ef6b5a35c4..2d91802823 100644 --- a/src/mesa/drivers/dri/r128/r128_screen.c +++ b/src/mesa/drivers/dri/r128/r128_screen.c @@ -449,7 +449,7 @@ r128FillInModes( __DRIscreen *psp,                                 depth_bits_array, stencil_bits_array,                                 depth_buffer_factor, back_buffer_modes,                                 back_buffer_factor, -                               msaa_samples_array, 1); +                               msaa_samples_array, 1, GL_TRUE);      if (configs == NULL) {          fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,                  __LINE__); diff --git a/src/mesa/drivers/dri/r300/compiler/r500_fragprog.c b/src/mesa/drivers/dri/r300/compiler/r500_fragprog.c index d87acecdab..b0fb8e970b 100644 --- a/src/mesa/drivers/dri/r300/compiler/r500_fragprog.c +++ b/src/mesa/drivers/dri/r300/compiler/r500_fragprog.c @@ -295,7 +295,7 @@ static char *toswiz(int swiz_val) {    case 2: return "B";    case 3: return "A";    case 4: return "0"; -  case 5: return "1/2"; +  case 5: return "H";    case 6: return "1";    case 7: return "U";    } diff --git a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c index c2eb613b23..829f028950 100644 --- a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c +++ b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c @@ -121,8 +121,19 @@ static unsigned int translate_alpha_op(struct r300_fragment_program_compiler *c,  static unsigned int fix_hw_swizzle(unsigned int swz)  { -	if (swz == 5) swz = 6; -	if (swz == RC_SWIZZLE_UNUSED) swz = 4; +    switch (swz) { +        case RC_SWIZZLE_ZERO: +        case RC_SWIZZLE_UNUSED: +            swz = 4; +            break; +        case RC_SWIZZLE_HALF: +            swz = 5; +            break; +        case RC_SWIZZLE_ONE: +            swz = 6; +            break; +    } +  	return swz;  } diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c index 93b6399a66..631f729048 100644 --- a/src/mesa/drivers/dri/radeon/radeon_screen.c +++ b/src/mesa/drivers/dri/radeon/radeon_screen.c @@ -293,18 +293,18 @@ radeonFillInModes( __DRIscreen *psp,  					  depth_bits_array, stencil_bits_array,  					  depth_buffer_factor, back_buffer_modes,  					  back_buffer_factor, msaa_samples_array, -					  1); +					  1, GL_TRUE);  	configs_a8r8g8b8 = driCreateConfigs(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,  					    depth_bits_array, stencil_bits_array,  					    1, back_buffer_modes, 1, -					    msaa_samples_array, 1); +					    msaa_samples_array, 1, GL_TRUE);  	configs = driConcatConfigs(configs_r5g6b5, configs_a8r8g8b8);     } else  	configs = driCreateConfigs(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,  				   depth_bits_array, stencil_bits_array,  				   depth_buffer_factor,  				   back_buffer_modes, back_buffer_factor, -				   msaa_samples_array, 1); +				   msaa_samples_array, 1, GL_TRUE);      if (configs == NULL) {  	fprintf( stderr, "[%s:%u] Error creating FBConfig!\n", @@ -1676,7 +1676,8 @@ __DRIconfig **radeonInitScreen2(__DRIscreen *psp)  				     back_buffer_modes,  				     ARRAY_SIZE(back_buffer_modes),  				     msaa_samples_array, -				     ARRAY_SIZE(msaa_samples_array)); +				     ARRAY_SIZE(msaa_samples_array), +				     GL_TRUE);        if (configs == NULL)  	 configs = new_configs;        else diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c index 8e879ca41c..74a001b789 100644 --- a/src/mesa/drivers/dri/savage/savage_xmesa.c +++ b/src/mesa/drivers/dri/savage/savage_xmesa.c @@ -939,7 +939,7 @@ savageFillInModes( __DRIscreen *psp,  			       depth_bits_array, stencil_bits_array,  			       depth_buffer_factor,  			       back_buffer_modes, back_buffer_factor, -                               msaa_samples_array, 1); +                               msaa_samples_array, 1, GL_TRUE);      if (configs == NULL) {  	fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",  		 __func__, __LINE__ ); diff --git a/src/mesa/drivers/dri/sis/sis_screen.c b/src/mesa/drivers/dri/sis/sis_screen.c index cb7ed8a08b..80fb455ec7 100644 --- a/src/mesa/drivers/dri/sis/sis_screen.c +++ b/src/mesa/drivers/dri/sis/sis_screen.c @@ -103,7 +103,7 @@ sisFillInModes(__DRIscreen *psp, int bpp)     configs = driCreateConfigs(fb_format, fb_type, depth_bits_array,  			      stencil_bits_array, depth_buffer_factor,  			      back_buffer_modes, back_buffer_factor, -                              msaa_samples_array, 1); +                              msaa_samples_array, 1, GL_TRUE);     if (configs == NULL) {        fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, __LINE__);        return NULL; diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c index 4e823669bf..40535b03b9 100644 --- a/src/mesa/drivers/dri/swrast/swrast.c +++ b/src/mesa/drivers/dri/swrast/swrast.c @@ -132,7 +132,8 @@ swrastFillInModes(__DRIscreen *psp,      configs = driCreateConfigs(fb_format, fb_type,  			       depth_bits_array, stencil_bits_array,  			       depth_buffer_factor, back_buffer_modes, -			       back_buffer_factor, msaa_samples_array, 1); +			       back_buffer_factor, msaa_samples_array, 1, +			       GL_TRUE);      if (configs == NULL) {  	fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,  		__LINE__); diff --git a/src/mesa/drivers/dri/tdfx/tdfx_screen.c b/src/mesa/drivers/dri/tdfx/tdfx_screen.c index 9f6b35faa2..d554bcdc92 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_screen.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_screen.c @@ -383,7 +383,8 @@ tdfxFillInModes(__DRIscreen *psp,  			    stencil_bits_array,  			    deep ? 2 : 4,  			    db_modes, 2, -			    msaa_samples_array, 1); +			    msaa_samples_array, 1, +			    GL_TRUE);  }  /** diff --git a/src/mesa/drivers/dri/unichrome/via_screen.c b/src/mesa/drivers/dri/unichrome/via_screen.c index 8c91c937c6..ee10b569bf 100644 --- a/src/mesa/drivers/dri/unichrome/via_screen.c +++ b/src/mesa/drivers/dri/unichrome/via_screen.c @@ -354,7 +354,7 @@ viaFillInModes( __DRIscreen *psp,  			       depth_bits_array, stencil_bits_array,  			       depth_buffer_factor, back_buffer_modes,  			       back_buffer_factor, -                               msaa_samples_array, 1); +                               msaa_samples_array, 1, GL_TRUE);      if (configs == NULL) {  	fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,  		__LINE__);  | 
