diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_context.h | 6 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_pixel_bitmap.c | 8 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_pixel_draw.c | 16 | 
3 files changed, 30 insertions, 0 deletions
| diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h index e931e401e9..8b68cc3f04 100644 --- a/src/mesa/drivers/dri/intel/intel_context.h +++ b/src/mesa/drivers/dri/intel/intel_context.h @@ -569,4 +569,10 @@ intel_context(GLcontext * ctx)     return (struct intel_context *) ctx;  } +static INLINE GLboolean +is_power_of_two(uint32_t value) +{ +   return (value & (value - 1)) == 0; +} +  #endif diff --git a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c index b20840b9a0..80d3239189 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c @@ -400,6 +400,14 @@ intel_texture_bitmap(GLcontext * ctx,        return GL_FALSE;     } +   if (!ctx->Extensions.ARB_texture_non_power_of_two && +       (!is_power_of_two(width) || !is_power_of_two(height))) { +      if (INTEL_DEBUG & DEBUG_FALLBACKS) +	 fprintf(stderr, +		 "glBitmap() fallback: NPOT texture\n"); +      return GL_FALSE; +   } +     /* Check that we can load in a texture this big. */     if (width > (1 << (ctx->Const.MaxTextureLevels - 1)) ||         height > (1 << (ctx->Const.MaxTextureLevels - 1))) { diff --git a/src/mesa/drivers/dri/intel/intel_pixel_draw.c b/src/mesa/drivers/dri/intel/intel_pixel_draw.c index abcdcd5724..7cda6adb32 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_draw.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_draw.c @@ -119,6 +119,14 @@ intel_texture_drawpixels(GLcontext * ctx,        return GL_FALSE;     } +   if (!ctx->Extensions.ARB_texture_non_power_of_two && +       (!is_power_of_two(width) || !is_power_of_two(height))) { +      if (INTEL_DEBUG & DEBUG_FALLBACKS) +	 fprintf(stderr, +		 "glDrawPixels() fallback: NPOT texture\n"); +      return GL_FALSE; +   } +     _mesa_PushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT |  		    GL_CURRENT_BIT);     _mesa_PushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); @@ -262,6 +270,14 @@ intel_stencil_drawpixels(GLcontext * ctx,        return GL_FALSE;     } +   if (!ctx->Extensions.ARB_texture_non_power_of_two && +       (!is_power_of_two(width) || !is_power_of_two(height))) { +      if (INTEL_DEBUG & DEBUG_FALLBACKS) +	 fprintf(stderr, +		 "glDrawPixels(GL_STENCIL_INDEX) fallback: NPOT texture\n"); +      return GL_FALSE; +   } +     _mesa_PushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT |  		    GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     _mesa_PushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); | 
