Compare commits
	
		
			8 Commits
		
	
	
		
			chadv/wip/
			...
			rgb10_a2ui
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					257f32ad20 | ||
| 
						 | 
					4e0ece34ed | ||
| 
						 | 
					8bccaa61d7 | ||
| 
						 | 
					63d5fd0376 | ||
| 
						 | 
					08bc1b7343 | ||
| 
						 | 
					9f92031355 | ||
| 
						 | 
					e56728c9d8 | ||
| 
						 | 
					644d434137 | 
@@ -78,7 +78,7 @@ GL_ARB_explicit_attrib_location                       DONE (i915, i965, r300, r6
 | 
				
			|||||||
GL_ARB_occlusion_query2                               DONE (r300, r600, swrast)
 | 
					GL_ARB_occlusion_query2                               DONE (r300, r600, swrast)
 | 
				
			||||||
GL_ARB_sampler_objects                                DONE (i965, r300, r600)
 | 
					GL_ARB_sampler_objects                                DONE (i965, r300, r600)
 | 
				
			||||||
GL_ARB_shader_bit_encoding                            DONE
 | 
					GL_ARB_shader_bit_encoding                            DONE
 | 
				
			||||||
GL_ARB_texture_rgb10_a2ui                             DONE (r600)
 | 
					GL_ARB_texture_rgb10_a2ui                             DONE (i965, r600)
 | 
				
			||||||
GL_ARB_texture_swizzle                                DONE (same as EXT version) (i965, r300, r600, swrast)
 | 
					GL_ARB_texture_swizzle                                DONE (same as EXT version) (i965, r300, r600, swrast)
 | 
				
			||||||
GL_ARB_timer_query                                    DONE
 | 
					GL_ARB_timer_query                                    DONE
 | 
				
			||||||
GL_ARB_instanced_arrays                               DONE (i965, r300, r600)
 | 
					GL_ARB_instanced_arrays                               DONE (i965, r300, r600)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,6 +72,8 @@
 | 
				
			|||||||
#include "program/program.h"
 | 
					#include "program/program.h"
 | 
				
			||||||
#include "swrast/swrast.h"
 | 
					#include "swrast/swrast.h"
 | 
				
			||||||
#include "drivers/common/meta.h"
 | 
					#include "drivers/common/meta.h"
 | 
				
			||||||
 | 
					#include "main/enums.h"
 | 
				
			||||||
 | 
					#include "main/glformats.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** Return offset in bytes of the field within a vertex struct */
 | 
					/** Return offset in bytes of the field within a vertex struct */
 | 
				
			||||||
@@ -3158,8 +3160,12 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
 | 
				
			|||||||
 * ReadPixels() and passed to Tex[Sub]Image().
 | 
					 * ReadPixels() and passed to Tex[Sub]Image().
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static GLenum
 | 
					static GLenum
 | 
				
			||||||
get_temp_image_type(struct gl_context *ctx, GLenum baseFormat)
 | 
					get_temp_image_type(struct gl_context *ctx, gl_format format)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					   GLenum baseFormat, type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   baseFormat = _mesa_get_format_base_format(format);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   switch (baseFormat) {
 | 
					   switch (baseFormat) {
 | 
				
			||||||
   case GL_RGBA:
 | 
					   case GL_RGBA:
 | 
				
			||||||
   case GL_RGB:
 | 
					   case GL_RGB:
 | 
				
			||||||
@@ -3174,7 +3180,7 @@ get_temp_image_type(struct gl_context *ctx, GLenum baseFormat)
 | 
				
			|||||||
      else if (ctx->DrawBuffer->Visual.redBits <= 16)
 | 
					      else if (ctx->DrawBuffer->Visual.redBits <= 16)
 | 
				
			||||||
         return GL_UNSIGNED_SHORT;
 | 
					         return GL_UNSIGNED_SHORT;
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
         return GL_FLOAT;
 | 
					         return _mesa_get_format_datatype(format);
 | 
				
			||||||
   case GL_DEPTH_COMPONENT:
 | 
					   case GL_DEPTH_COMPONENT:
 | 
				
			||||||
      return GL_UNSIGNED_INT;
 | 
					      return GL_UNSIGNED_INT;
 | 
				
			||||||
   case GL_DEPTH_STENCIL:
 | 
					   case GL_DEPTH_STENCIL:
 | 
				
			||||||
@@ -3216,12 +3222,10 @@ _mesa_meta_CopyTexSubImage(struct gl_context *ctx, GLuint dims,
 | 
				
			|||||||
      format = GL_RGBA;
 | 
					      format = GL_RGBA;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   type = get_temp_image_type(ctx, texImage->TexFormat);
 | 
				
			||||||
   if (_mesa_is_format_integer_color(texImage->TexFormat)) {
 | 
					   if (_mesa_is_format_integer_color(texImage->TexFormat)) {
 | 
				
			||||||
      _mesa_problem(ctx, "unsupported integer color copyteximage");
 | 
					      format = _mesa_base_format_to_integer_format(format);
 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					 | 
				
			||||||
   type = get_temp_image_type(ctx, format);
 | 
					 | 
				
			||||||
   bpp = _mesa_bytes_per_pixel(format, type);
 | 
					   bpp = _mesa_bytes_per_pixel(format, type);
 | 
				
			||||||
   if (bpp <= 0) {
 | 
					   if (bpp <= 0) {
 | 
				
			||||||
      _mesa_problem(ctx, "Bad bpp in _mesa_meta_CopyTexSubImage()");
 | 
					      _mesa_problem(ctx, "Bad bpp in _mesa_meta_CopyTexSubImage()");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -325,6 +325,7 @@ brw_format_for_mesa_format(gl_format mesa_format)
 | 
				
			|||||||
      [MESA_FORMAT_RG1616] = BRW_SURFACEFORMAT_R16G16_UNORM,
 | 
					      [MESA_FORMAT_RG1616] = BRW_SURFACEFORMAT_R16G16_UNORM,
 | 
				
			||||||
      [MESA_FORMAT_RG1616_REV] = 0,
 | 
					      [MESA_FORMAT_RG1616_REV] = 0,
 | 
				
			||||||
      [MESA_FORMAT_ARGB2101010] = BRW_SURFACEFORMAT_B10G10R10A2_UNORM,
 | 
					      [MESA_FORMAT_ARGB2101010] = BRW_SURFACEFORMAT_B10G10R10A2_UNORM,
 | 
				
			||||||
 | 
					      [MESA_FORMAT_ABGR2101010_UINT] = BRW_SURFACEFORMAT_R10G10B10A2_UINT,
 | 
				
			||||||
      [MESA_FORMAT_Z24_S8] = 0,
 | 
					      [MESA_FORMAT_Z24_S8] = 0,
 | 
				
			||||||
      [MESA_FORMAT_S8_Z24] = 0,
 | 
					      [MESA_FORMAT_S8_Z24] = 0,
 | 
				
			||||||
      [MESA_FORMAT_Z16] = 0,
 | 
					      [MESA_FORMAT_Z16] = 0,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,6 +92,7 @@ intelInitExtensions(struct gl_context *ctx)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
   ctx->Extensions.OES_draw_texture = true;
 | 
					   ctx->Extensions.OES_draw_texture = true;
 | 
				
			||||||
   ctx->Extensions.OES_compressed_ETC1_RGB8_texture = true;
 | 
					   ctx->Extensions.OES_compressed_ETC1_RGB8_texture = true;
 | 
				
			||||||
 | 
					   ctx->Extensions.ARB_texture_rgb10_a2ui = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if (intel->gen >= 6)
 | 
					   if (intel->gen >= 6)
 | 
				
			||||||
      ctx->Const.GLSLVersion = 130;
 | 
					      ctx->Const.GLSLVersion = 130;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1604,6 +1604,11 @@ get_unpack_rgba_function(gl_format format)
 | 
				
			|||||||
      initialized = GL_TRUE;
 | 
					      initialized = GL_TRUE;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if (table[format] == NULL) {
 | 
				
			||||||
 | 
					      _mesa_problem(NULL, "unsupported unpack for format %s",
 | 
				
			||||||
 | 
					                    _mesa_get_format_name(format));
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   return table[format];
 | 
					   return table[format];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -462,8 +462,7 @@ get_type_min_max(GLenum type, GLfloat *min, GLfloat *max)
 | 
				
			|||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Customization of integer packing.  We always treat src as uint, and can pack dst
 | 
					/* Customization of unsigned integer packing.
 | 
				
			||||||
 * as any integer type/format combo.
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define SRC_TYPE GLuint
 | 
					#define SRC_TYPE GLuint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -475,6 +474,14 @@ get_type_min_max(GLenum type, GLfloat *min, GLfloat *max)
 | 
				
			|||||||
#undef SRC_CONVERT
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
#undef FN_NAME
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DST_TYPE GLint
 | 
				
			||||||
 | 
					#define SRC_CONVERT(x) MIN2(x, 0x7fffffff)
 | 
				
			||||||
 | 
					#define FN_NAME pack_int_from_uint_rgba
 | 
				
			||||||
 | 
					#include "pack_tmp.h"
 | 
				
			||||||
 | 
					#undef DST_TYPE
 | 
				
			||||||
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DST_TYPE GLushort
 | 
					#define DST_TYPE GLushort
 | 
				
			||||||
#define SRC_CONVERT(x) MIN2(x, 0xffff)
 | 
					#define SRC_CONVERT(x) MIN2(x, 0xffff)
 | 
				
			||||||
#define FN_NAME pack_ushort_from_uint_rgba
 | 
					#define FN_NAME pack_ushort_from_uint_rgba
 | 
				
			||||||
@@ -507,18 +514,21 @@ get_type_min_max(GLenum type, GLfloat *min, GLfloat *max)
 | 
				
			|||||||
#undef SRC_CONVERT
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
#undef FN_NAME
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef SRC_TYPE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
_mesa_pack_rgba_span_int(struct gl_context *ctx, GLuint n, GLuint rgba[][4],
 | 
					_mesa_pack_rgba_span_from_uints(struct gl_context *ctx, GLuint n, GLuint rgba[][4],
 | 
				
			||||||
                         GLenum dstFormat, GLenum dstType,
 | 
					                                GLenum dstFormat, GLenum dstType,
 | 
				
			||||||
                         GLvoid *dstAddr)
 | 
					                                GLvoid *dstAddr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					   GLuint i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   switch(dstType) {
 | 
					   switch(dstType) {
 | 
				
			||||||
   case GL_UNSIGNED_INT:
 | 
					   case GL_UNSIGNED_INT:
 | 
				
			||||||
      pack_uint_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
					      pack_uint_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
   case GL_INT:
 | 
					   case GL_INT:
 | 
				
			||||||
      /* No conversion necessary. */
 | 
					      pack_int_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
      pack_uint_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
					 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
   case GL_UNSIGNED_SHORT:
 | 
					   case GL_UNSIGNED_SHORT:
 | 
				
			||||||
      pack_ushort_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
					      pack_ushort_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
@@ -532,6 +542,633 @@ _mesa_pack_rgba_span_int(struct gl_context *ctx, GLuint n, GLuint rgba[][4],
 | 
				
			|||||||
   case GL_BYTE:
 | 
					   case GL_BYTE:
 | 
				
			||||||
      pack_byte_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
					      pack_byte_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_BYTE_3_3_2:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLubyte *dst = (GLubyte *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 7) << 5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 7) << 2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 3)     );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_BYTE_2_3_3_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLubyte *dst = (GLubyte *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 7)     )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 7) << 3)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 3) << 6);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_5_6_5:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 63) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_5_6_5_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 63) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) << 11);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_4_4_4_4:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 15) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 15) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 15) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_4_4_4_4_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 15)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15) << 12);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 15)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15) << 12);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 15)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15) << 12);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_5_5_5_1:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  6)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) <<  1)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  6)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 31) <<  1)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) <<  6)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  1)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,  1)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_1_5_5_5_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1) << 15);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 31) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1) << 15);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,  1) << 15);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_8_8_8_8:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 255) << 24)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 255) << 24)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 255) << 24)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_8_8_8_8_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 255)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255) << 24);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 255)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255) << 24);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 255)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255) << 24);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_10_10_10_2:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 1023) << 22)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) <<  2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 1023) << 22)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 1023) <<  2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 1023) << 22)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) <<  2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,    3)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_2_10_10_10_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 1023)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) << 20)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3) << 30);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 1023)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 1023) << 20)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3) << 30);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 1023)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 20)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,    3) << 30);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   default:
 | 
				
			||||||
 | 
					      _mesa_problem(ctx,
 | 
				
			||||||
 | 
					         "Unsupported type (%s) for format (%s)",
 | 
				
			||||||
 | 
					         _mesa_lookup_enum_by_nr(dstType),
 | 
				
			||||||
 | 
					         _mesa_lookup_enum_by_nr(dstFormat));
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Customization of signed integer packing.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define SRC_TYPE GLint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DST_TYPE GLuint
 | 
				
			||||||
 | 
					#define SRC_CONVERT(x) MAX2(x, 0)
 | 
				
			||||||
 | 
					#define FN_NAME pack_uint_from_int_rgba
 | 
				
			||||||
 | 
					#include "pack_tmp.h"
 | 
				
			||||||
 | 
					#undef DST_TYPE
 | 
				
			||||||
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DST_TYPE GLushort
 | 
				
			||||||
 | 
					#define SRC_CONVERT(x) MAX2(x, 0)
 | 
				
			||||||
 | 
					#define FN_NAME pack_ushort_from_int_rgba
 | 
				
			||||||
 | 
					#include "pack_tmp.h"
 | 
				
			||||||
 | 
					#undef DST_TYPE
 | 
				
			||||||
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DST_TYPE GLshort
 | 
				
			||||||
 | 
					#define SRC_CONVERT(x) CLAMP(x, -0x8000, 0x7fff)
 | 
				
			||||||
 | 
					#define FN_NAME pack_short_from_int_rgba
 | 
				
			||||||
 | 
					#include "pack_tmp.h"
 | 
				
			||||||
 | 
					#undef DST_TYPE
 | 
				
			||||||
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DST_TYPE GLubyte
 | 
				
			||||||
 | 
					#define SRC_CONVERT(x) MAX2(x, 0)
 | 
				
			||||||
 | 
					#define FN_NAME pack_ubyte_from_int_rgba
 | 
				
			||||||
 | 
					#include "pack_tmp.h"
 | 
				
			||||||
 | 
					#undef DST_TYPE
 | 
				
			||||||
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DST_TYPE GLbyte
 | 
				
			||||||
 | 
					#define SRC_CONVERT(x) CLAMP(x, -0x80, 0x7f)
 | 
				
			||||||
 | 
					#define FN_NAME pack_byte_from_int_rgba
 | 
				
			||||||
 | 
					#include "pack_tmp.h"
 | 
				
			||||||
 | 
					#undef DST_TYPE
 | 
				
			||||||
 | 
					#undef SRC_CONVERT
 | 
				
			||||||
 | 
					#undef FN_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef SRC_TYPE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					_mesa_pack_rgba_span_from_ints(struct gl_context *ctx, GLuint n, GLint rgba[][4],
 | 
				
			||||||
 | 
					                               GLenum dstFormat, GLenum dstType,
 | 
				
			||||||
 | 
					                               GLvoid *dstAddr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   GLuint i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   switch(dstType) {
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT:
 | 
				
			||||||
 | 
					      pack_uint_from_int_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_INT:
 | 
				
			||||||
 | 
					      /* No conversion necessary. */
 | 
				
			||||||
 | 
					      pack_uint_from_uint_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT:
 | 
				
			||||||
 | 
					      pack_ushort_from_int_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_SHORT:
 | 
				
			||||||
 | 
					      pack_short_from_int_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_BYTE:
 | 
				
			||||||
 | 
					      pack_ubyte_from_int_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_BYTE:
 | 
				
			||||||
 | 
					      pack_byte_from_int_rgba(ctx, dstAddr, dstFormat, rgba, n);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_BYTE_3_3_2:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLubyte *dst = (GLubyte *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 7) << 5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 7) << 2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 3)     );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_BYTE_2_3_3_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLubyte *dst = (GLubyte *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 7)     )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 7) << 3)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 3) << 6);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_5_6_5:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 63) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_5_6_5_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGB) || (dstFormat == GL_RGB_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 63) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) << 11);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_4_4_4_4:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 15) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 15) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 15) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_4_4_4_4_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 15)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15) << 12);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 15)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 15) << 12);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 15)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 15) <<  4)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 15) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 15) << 12);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_5_5_5_1:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  6)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) <<  1)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  6)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 31) <<  1)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 31) << 11)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) <<  6)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  1)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,  1)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_SHORT_1_5_5_5_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1) << 15);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 31) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,  1) << 15);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLushort *dst = (GLushort *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 31)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 31) <<  5)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 31) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,  1) << 15);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_8_8_8_8:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 255) << 24)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 255) << 24)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 255) << 24)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_8_8_8_8_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 255)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255) << 24);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 255)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0, 255) << 24);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 255)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 255) <<  8)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 255) << 16)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 255) << 24);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_10_10_10_2:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 1023) << 22)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) <<  2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 1023) << 22)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 1023) <<  2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 1023) << 22)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) << 12)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) <<  2)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,    3)      );
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					   case GL_UNSIGNED_INT_2_10_10_10_REV:
 | 
				
			||||||
 | 
					      if ((dstFormat == GL_RGBA) || (dstFormat == GL_RGBA_INTEGER_EXT)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][RCOMP], 0, 1023)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) << 20)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3) << 30);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if ((dstFormat == GL_BGRA) || (dstFormat == GL_BGRA_INTEGER)) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][BCOMP], 0, 1023)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0, 1023) << 20)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][ACOMP], 0,    3) << 30);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else if (dstFormat == GL_ABGR_EXT) {
 | 
				
			||||||
 | 
					         GLuint *dst = (GLuint *) dstAddr;
 | 
				
			||||||
 | 
					         for (i=0;i<n;i++) {
 | 
				
			||||||
 | 
					            dst[i] = (CLAMP(rgba[i][ACOMP], 0, 1023)      )
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][BCOMP], 0, 1023) << 10)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][GCOMP], 0, 1023) << 20)
 | 
				
			||||||
 | 
					                   | (CLAMP(rgba[i][RCOMP], 0,    3) << 30);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
   default:
 | 
					   default:
 | 
				
			||||||
      _mesa_problem(ctx,
 | 
					      _mesa_problem(ctx,
 | 
				
			||||||
         "Unsupported type (%s) for format (%s)",
 | 
					         "Unsupported type (%s) for format (%s)",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -145,9 +145,15 @@ _mesa_unpack_image(GLuint dimensions,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
_mesa_pack_rgba_span_int(struct gl_context *ctx, GLuint n, GLuint rgba[][4],
 | 
					_mesa_pack_rgba_span_from_uints(struct gl_context *ctx, GLuint n, GLuint rgba[][4],
 | 
				
			||||||
                         GLenum dstFormat, GLenum dstType,
 | 
					                                GLenum dstFormat, GLenum dstType,
 | 
				
			||||||
                         GLvoid *dstAddr);
 | 
					                                GLvoid *dstAddr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					_mesa_pack_rgba_span_from_ints(struct gl_context *ctx, GLuint n, GLint rgba[][4],
 | 
				
			||||||
 | 
					                               GLenum dstFormat, GLenum dstType,
 | 
				
			||||||
 | 
					                               GLvoid *dstAddr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void
 | 
					extern void
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -321,6 +321,8 @@ slow_read_rgba_pixels( struct gl_context *ctx,
 | 
				
			|||||||
   void *rgba;
 | 
					   void *rgba;
 | 
				
			||||||
   GLubyte *dst, *map;
 | 
					   GLubyte *dst, *map;
 | 
				
			||||||
   int dstStride, stride, j;
 | 
					   int dstStride, stride, j;
 | 
				
			||||||
 | 
					   GLboolean is_integer = _mesa_is_enum_format_integer(format);
 | 
				
			||||||
 | 
					   GLboolean is_unsiged_integer = _mesa_is_format_unsigned(rbFormat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   dstStride = _mesa_image_row_stride(packing, width, format, type);
 | 
					   dstStride = _mesa_image_row_stride(packing, width, format, type);
 | 
				
			||||||
   dst = (GLubyte *) _mesa_image_address2d(packing, pixels, width, height,
 | 
					   dst = (GLubyte *) _mesa_image_address2d(packing, pixels, width, height,
 | 
				
			||||||
@@ -338,12 +340,17 @@ slow_read_rgba_pixels( struct gl_context *ctx,
 | 
				
			|||||||
      goto done;
 | 
					      goto done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   for (j = 0; j < height; j++) {
 | 
					   for (j = 0; j < height; j++) {
 | 
				
			||||||
      if (_mesa_is_enum_format_integer(format)) {
 | 
					      if (is_integer) {
 | 
				
			||||||
	 _mesa_unpack_uint_rgba_row(rbFormat, width, map, (GLuint (*)[4]) rgba);
 | 
						 _mesa_unpack_uint_rgba_row(rbFormat, width, map, (GLuint (*)[4]) rgba);
 | 
				
			||||||
         _mesa_rebase_rgba_uint(width, (GLuint (*)[4]) rgba,
 | 
					         _mesa_rebase_rgba_uint(width, (GLuint (*)[4]) rgba,
 | 
				
			||||||
                                rb->_BaseFormat);
 | 
					                                rb->_BaseFormat);
 | 
				
			||||||
	 _mesa_pack_rgba_span_int(ctx, width, (GLuint (*)[4]) rgba, format,
 | 
					         if (is_unsiged_integer) {
 | 
				
			||||||
                                  type, dst);
 | 
					            _mesa_pack_rgba_span_from_uints(ctx, width, (GLuint (*)[4]) rgba, format,
 | 
				
			||||||
 | 
					                                            type, dst);
 | 
				
			||||||
 | 
					         } else {
 | 
				
			||||||
 | 
					            _mesa_pack_rgba_span_from_ints(ctx, width, (GLint (*)[4]) rgba, format,
 | 
				
			||||||
 | 
					                                           type, dst);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
	 _mesa_unpack_rgba_row(rbFormat, width, map, (GLfloat (*)[4]) rgba);
 | 
						 _mesa_unpack_rgba_row(rbFormat, width, map, (GLfloat (*)[4]) rgba);
 | 
				
			||||||
         _mesa_rebase_rgba_float(width, (GLfloat (*)[4]) rgba,
 | 
					         _mesa_rebase_rgba_float(width, (GLfloat (*)[4]) rgba,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -306,6 +306,7 @@ get_tex_rgba_uncompressed(struct gl_context *ctx, GLuint dimensions,
 | 
				
			|||||||
   GLfloat (*rgba)[4];
 | 
					   GLfloat (*rgba)[4];
 | 
				
			||||||
   GLuint (*rgba_uint)[4];
 | 
					   GLuint (*rgba_uint)[4];
 | 
				
			||||||
   GLboolean is_integer = _mesa_is_format_integer_color(texImage->TexFormat);
 | 
					   GLboolean is_integer = _mesa_is_format_integer_color(texImage->TexFormat);
 | 
				
			||||||
 | 
					   GLboolean is_unsiged_integer = _mesa_is_format_unsigned(texImage->TexFormat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   /* Allocate buffer for one row of texels */
 | 
					   /* Allocate buffer for one row of texels */
 | 
				
			||||||
   rgba = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat));
 | 
					   rgba = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat));
 | 
				
			||||||
@@ -361,8 +362,15 @@ get_tex_rgba_uncompressed(struct gl_context *ctx, GLuint dimensions,
 | 
				
			|||||||
	       _mesa_unpack_uint_rgba_row(texFormat, width, src, rgba_uint);
 | 
						       _mesa_unpack_uint_rgba_row(texFormat, width, src, rgba_uint);
 | 
				
			||||||
               if (rebaseFormat)
 | 
					               if (rebaseFormat)
 | 
				
			||||||
                  _mesa_rebase_rgba_uint(width, rgba_uint, rebaseFormat);
 | 
					                  _mesa_rebase_rgba_uint(width, rgba_uint, rebaseFormat);
 | 
				
			||||||
	       _mesa_pack_rgba_span_int(ctx, width, rgba_uint,
 | 
					               if (is_unsiged_integer) {
 | 
				
			||||||
					format, type, dest);
 | 
					                  _mesa_pack_rgba_span_from_uints(ctx, width,
 | 
				
			||||||
 | 
					                                                  (GLuint (*)[4]) rgba_uint,
 | 
				
			||||||
 | 
					                                                  format, type, dest);
 | 
				
			||||||
 | 
					               } else {
 | 
				
			||||||
 | 
					                  _mesa_pack_rgba_span_from_ints(ctx, width,
 | 
				
			||||||
 | 
					                                                 (GLint (*)[4]) rgba_uint,
 | 
				
			||||||
 | 
					                                                 format, type, dest);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
	    } else {
 | 
						    } else {
 | 
				
			||||||
	       _mesa_unpack_rgba_row(texFormat, width, src, rgba);
 | 
						       _mesa_unpack_rgba_row(texFormat, width, src, rgba);
 | 
				
			||||||
               if (rebaseFormat)
 | 
					               if (rebaseFormat)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3200,6 +3200,7 @@ _mesa_texstore_rgba_int8(TEXSTORE_PARAMS)
 | 
				
			|||||||
						     srcPacking);
 | 
											     srcPacking);
 | 
				
			||||||
      const GLuint *src = tempImage;
 | 
					      const GLuint *src = tempImage;
 | 
				
			||||||
      GLint img, row;
 | 
					      GLint img, row;
 | 
				
			||||||
 | 
					      GLboolean is_unsigned = _mesa_is_type_unsigned(srcType);
 | 
				
			||||||
      if (!tempImage)
 | 
					      if (!tempImage)
 | 
				
			||||||
         return GL_FALSE;
 | 
					         return GL_FALSE;
 | 
				
			||||||
      for (img = 0; img < srcDepth; img++) {
 | 
					      for (img = 0; img < srcDepth; img++) {
 | 
				
			||||||
@@ -3207,8 +3208,14 @@ _mesa_texstore_rgba_int8(TEXSTORE_PARAMS)
 | 
				
			|||||||
         for (row = 0; row < srcHeight; row++) {
 | 
					         for (row = 0; row < srcHeight; row++) {
 | 
				
			||||||
            GLbyte *dstTexel = (GLbyte *) dstRow;
 | 
					            GLbyte *dstTexel = (GLbyte *) dstRow;
 | 
				
			||||||
            GLint i;
 | 
					            GLint i;
 | 
				
			||||||
            for (i = 0; i < srcWidth * components; i++) {
 | 
					            if (is_unsigned) {
 | 
				
			||||||
               dstTexel[i] = (GLbyte) src[i];
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLbyte) MIN2(src[i], 0x7f);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLbyte) CLAMP((GLint) src[i], -0x80, 0x7f);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            dstRow += dstRowStride;
 | 
					            dstRow += dstRowStride;
 | 
				
			||||||
            src += srcWidth * components;
 | 
					            src += srcWidth * components;
 | 
				
			||||||
@@ -3270,6 +3277,7 @@ _mesa_texstore_rgba_int16(TEXSTORE_PARAMS)
 | 
				
			|||||||
						     srcPacking);
 | 
											     srcPacking);
 | 
				
			||||||
      const GLuint *src = tempImage;
 | 
					      const GLuint *src = tempImage;
 | 
				
			||||||
      GLint img, row;
 | 
					      GLint img, row;
 | 
				
			||||||
 | 
					      GLboolean is_unsigned = _mesa_is_type_unsigned(srcType);
 | 
				
			||||||
      if (!tempImage)
 | 
					      if (!tempImage)
 | 
				
			||||||
         return GL_FALSE;
 | 
					         return GL_FALSE;
 | 
				
			||||||
      for (img = 0; img < srcDepth; img++) {
 | 
					      for (img = 0; img < srcDepth; img++) {
 | 
				
			||||||
@@ -3277,8 +3285,14 @@ _mesa_texstore_rgba_int16(TEXSTORE_PARAMS)
 | 
				
			|||||||
         for (row = 0; row < srcHeight; row++) {
 | 
					         for (row = 0; row < srcHeight; row++) {
 | 
				
			||||||
            GLshort *dstTexel = (GLshort *) dstRow;
 | 
					            GLshort *dstTexel = (GLshort *) dstRow;
 | 
				
			||||||
            GLint i;
 | 
					            GLint i;
 | 
				
			||||||
            for (i = 0; i < srcWidth * components; i++) {
 | 
					            if (is_unsigned) {
 | 
				
			||||||
               dstTexel[i] = (GLint) src[i];
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLshort) MIN2(src[i], 0x7fff);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLshort)CLAMP((GLint) src[i], -0x8000, 0x7fff);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            dstRow += dstRowStride;
 | 
					            dstRow += dstRowStride;
 | 
				
			||||||
            src += srcWidth * components;
 | 
					            src += srcWidth * components;
 | 
				
			||||||
@@ -3340,6 +3354,7 @@ _mesa_texstore_rgba_int32(TEXSTORE_PARAMS)
 | 
				
			|||||||
						     srcPacking);
 | 
											     srcPacking);
 | 
				
			||||||
      const GLuint *src = tempImage;
 | 
					      const GLuint *src = tempImage;
 | 
				
			||||||
      GLint img, row;
 | 
					      GLint img, row;
 | 
				
			||||||
 | 
					      GLboolean is_unsigned = _mesa_is_type_unsigned(srcType);
 | 
				
			||||||
      if (!tempImage)
 | 
					      if (!tempImage)
 | 
				
			||||||
         return GL_FALSE;
 | 
					         return GL_FALSE;
 | 
				
			||||||
      for (img = 0; img < srcDepth; img++) {
 | 
					      for (img = 0; img < srcDepth; img++) {
 | 
				
			||||||
@@ -3347,8 +3362,14 @@ _mesa_texstore_rgba_int32(TEXSTORE_PARAMS)
 | 
				
			|||||||
         for (row = 0; row < srcHeight; row++) {
 | 
					         for (row = 0; row < srcHeight; row++) {
 | 
				
			||||||
            GLint *dstTexel = (GLint *) dstRow;
 | 
					            GLint *dstTexel = (GLint *) dstRow;
 | 
				
			||||||
            GLint i;
 | 
					            GLint i;
 | 
				
			||||||
            for (i = 0; i < srcWidth * components; i++) {
 | 
					            if (is_unsigned) {
 | 
				
			||||||
               dstTexel[i] = (GLint) src[i];
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLint) MIN2(src[i], 0x7fffffff);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLint) src[i];
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            dstRow += dstRowStride;
 | 
					            dstRow += dstRowStride;
 | 
				
			||||||
            src += srcWidth * components;
 | 
					            src += srcWidth * components;
 | 
				
			||||||
@@ -3407,6 +3428,7 @@ _mesa_texstore_rgba_uint8(TEXSTORE_PARAMS)
 | 
				
			|||||||
                              srcFormat, srcType, srcAddr, srcPacking);
 | 
					                              srcFormat, srcType, srcAddr, srcPacking);
 | 
				
			||||||
      const GLuint *src = tempImage;
 | 
					      const GLuint *src = tempImage;
 | 
				
			||||||
      GLint img, row;
 | 
					      GLint img, row;
 | 
				
			||||||
 | 
					      GLboolean is_unsigned = _mesa_is_type_unsigned(srcType);
 | 
				
			||||||
      if (!tempImage)
 | 
					      if (!tempImage)
 | 
				
			||||||
         return GL_FALSE;
 | 
					         return GL_FALSE;
 | 
				
			||||||
      for (img = 0; img < srcDepth; img++) {
 | 
					      for (img = 0; img < srcDepth; img++) {
 | 
				
			||||||
@@ -3414,8 +3436,14 @@ _mesa_texstore_rgba_uint8(TEXSTORE_PARAMS)
 | 
				
			|||||||
         for (row = 0; row < srcHeight; row++) {
 | 
					         for (row = 0; row < srcHeight; row++) {
 | 
				
			||||||
            GLubyte *dstTexel = (GLubyte *) dstRow;
 | 
					            GLubyte *dstTexel = (GLubyte *) dstRow;
 | 
				
			||||||
            GLint i;
 | 
					            GLint i;
 | 
				
			||||||
            for (i = 0; i < srcWidth * components; i++) {
 | 
					            if (is_unsigned) {
 | 
				
			||||||
               dstTexel[i] = (GLubyte) CLAMP(src[i], 0, 0xff);
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLubyte) MIN2(src[i], 0xff);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLubyte) CLAMP((GLint) src[i], 0, 0xff);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            dstRow += dstRowStride;
 | 
					            dstRow += dstRowStride;
 | 
				
			||||||
            src += srcWidth * components;
 | 
					            src += srcWidth * components;
 | 
				
			||||||
@@ -3474,6 +3502,7 @@ _mesa_texstore_rgba_uint16(TEXSTORE_PARAMS)
 | 
				
			|||||||
                              srcFormat, srcType, srcAddr, srcPacking);
 | 
					                              srcFormat, srcType, srcAddr, srcPacking);
 | 
				
			||||||
      const GLuint *src = tempImage;
 | 
					      const GLuint *src = tempImage;
 | 
				
			||||||
      GLint img, row;
 | 
					      GLint img, row;
 | 
				
			||||||
 | 
					      GLboolean is_unsigned = _mesa_is_type_unsigned(srcType);
 | 
				
			||||||
      if (!tempImage)
 | 
					      if (!tempImage)
 | 
				
			||||||
         return GL_FALSE;
 | 
					         return GL_FALSE;
 | 
				
			||||||
      for (img = 0; img < srcDepth; img++) {
 | 
					      for (img = 0; img < srcDepth; img++) {
 | 
				
			||||||
@@ -3481,8 +3510,14 @@ _mesa_texstore_rgba_uint16(TEXSTORE_PARAMS)
 | 
				
			|||||||
         for (row = 0; row < srcHeight; row++) {
 | 
					         for (row = 0; row < srcHeight; row++) {
 | 
				
			||||||
            GLushort *dstTexel = (GLushort *) dstRow;
 | 
					            GLushort *dstTexel = (GLushort *) dstRow;
 | 
				
			||||||
            GLint i;
 | 
					            GLint i;
 | 
				
			||||||
            for (i = 0; i < srcWidth * components; i++) {
 | 
					            if (is_unsigned) {
 | 
				
			||||||
               dstTexel[i] = (GLushort) CLAMP(src[i], 0, 0xffff);
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLushort) MIN2(src[i], 0xffff);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = (GLushort) CLAMP((GLint) src[i], 0, 0xffff);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            dstRow += dstRowStride;
 | 
					            dstRow += dstRowStride;
 | 
				
			||||||
            src += srcWidth * components;
 | 
					            src += srcWidth * components;
 | 
				
			||||||
@@ -3540,6 +3575,7 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS)
 | 
				
			|||||||
                              srcWidth, srcHeight, srcDepth,
 | 
					                              srcWidth, srcHeight, srcDepth,
 | 
				
			||||||
                              srcFormat, srcType, srcAddr, srcPacking);
 | 
					                              srcFormat, srcType, srcAddr, srcPacking);
 | 
				
			||||||
      const GLuint *src = tempImage;
 | 
					      const GLuint *src = tempImage;
 | 
				
			||||||
 | 
					      GLboolean is_unsigned = _mesa_is_type_unsigned(srcType);
 | 
				
			||||||
      GLint img, row;
 | 
					      GLint img, row;
 | 
				
			||||||
      if (!tempImage)
 | 
					      if (!tempImage)
 | 
				
			||||||
         return GL_FALSE;
 | 
					         return GL_FALSE;
 | 
				
			||||||
@@ -3548,8 +3584,14 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS)
 | 
				
			|||||||
         for (row = 0; row < srcHeight; row++) {
 | 
					         for (row = 0; row < srcHeight; row++) {
 | 
				
			||||||
            GLuint *dstTexel = (GLuint *) dstRow;
 | 
					            GLuint *dstTexel = (GLuint *) dstRow;
 | 
				
			||||||
            GLint i;
 | 
					            GLint i;
 | 
				
			||||||
            for (i = 0; i < srcWidth * components; i++) {
 | 
					            if (is_unsigned) {
 | 
				
			||||||
               dstTexel[i] = src[i];
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = src[i];
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					               for (i = 0; i < srcWidth * components; i++) {
 | 
				
			||||||
 | 
					                  dstTexel[i] = MAX2((GLint) src[i], 0);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            dstRow += dstRowStride;
 | 
					            dstRow += dstRowStride;
 | 
				
			||||||
            src += srcWidth * components;
 | 
					            src += srcWidth * components;
 | 
				
			||||||
@@ -3867,6 +3909,7 @@ _mesa_texstore_argb2101010_uint(TEXSTORE_PARAMS)
 | 
				
			|||||||
                                                     srcPacking);
 | 
					                                                     srcPacking);
 | 
				
			||||||
      const GLuint *src = tempImage;
 | 
					      const GLuint *src = tempImage;
 | 
				
			||||||
      GLint img, row, col;
 | 
					      GLint img, row, col;
 | 
				
			||||||
 | 
					      GLboolean is_unsigned = _mesa_is_type_unsigned(srcType);
 | 
				
			||||||
      if (!tempImage)
 | 
					      if (!tempImage)
 | 
				
			||||||
         return GL_FALSE;
 | 
					         return GL_FALSE;
 | 
				
			||||||
      for (img = 0; img < srcDepth; img++) {
 | 
					      for (img = 0; img < srcDepth; img++) {
 | 
				
			||||||
@@ -3874,14 +3917,26 @@ _mesa_texstore_argb2101010_uint(TEXSTORE_PARAMS)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
         for (row = 0; row < srcHeight; row++) {
 | 
					         for (row = 0; row < srcHeight; row++) {
 | 
				
			||||||
            GLuint *dstUI = (GLuint *) dstRow;
 | 
					            GLuint *dstUI = (GLuint *) dstRow;
 | 
				
			||||||
            for (col = 0; col < srcWidth; col++) {
 | 
					            if (is_unsigned) {
 | 
				
			||||||
               GLushort a,r,g,b;
 | 
					               for (col = 0; col < srcWidth; col++) {
 | 
				
			||||||
               r = src[RCOMP];
 | 
					                  GLushort a,r,g,b;
 | 
				
			||||||
               g = src[GCOMP];
 | 
					                  r = MIN2(src[RCOMP], 0x3ff);
 | 
				
			||||||
               b = src[BCOMP];
 | 
					                  g = MIN2(src[GCOMP], 0x3ff);
 | 
				
			||||||
               a = src[ACOMP];
 | 
					                  b = MIN2(src[BCOMP], 0x3ff);
 | 
				
			||||||
               dstUI[col] = (a << 30) | (r << 20) | (g << 10) | (b);
 | 
					                  a = MIN2(src[ACOMP], 0x003);
 | 
				
			||||||
               src += 4;
 | 
					                  dstUI[col] = (a << 30) | (r << 20) | (g << 10) | (b);
 | 
				
			||||||
 | 
					                  src += 4;
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					               for (col = 0; col < srcWidth; col++) {
 | 
				
			||||||
 | 
					                  GLushort a,r,g,b;
 | 
				
			||||||
 | 
					                  r = CLAMP((GLint) src[RCOMP], 0, 0x3ff);
 | 
				
			||||||
 | 
					                  g = CLAMP((GLint) src[GCOMP], 0, 0x3ff);
 | 
				
			||||||
 | 
					                  b = CLAMP((GLint) src[BCOMP], 0, 0x3ff);
 | 
				
			||||||
 | 
					                  a = CLAMP((GLint) src[ACOMP], 0, 0x003);
 | 
				
			||||||
 | 
					                  dstUI[col] = (a << 30) | (r << 20) | (g << 10) | (b);
 | 
				
			||||||
 | 
					                  src += 4;
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            dstRow += dstRowStride;
 | 
					            dstRow += dstRowStride;
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user