histogram.c revision cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290
1cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell/* $Id: histogram.c,v 1.5 2000/12/26 05:09:28 keithw Exp $ */ 28a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 38a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul/* 48a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Mesa 3-D graphics library 58a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Version: 3.5 68a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 78a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Copyright (C) 1999-2000 Brian Paul All Rights Reserved. 88a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 98a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Permission is hereby granted, free of charge, to any person obtaining a 108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * copy of this software and associated documentation files (the "Software"), 118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * to deal in the Software without restriction, including without limitation 128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * and/or sell copies of the Software, and to permit persons to whom the 148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Software is furnished to do so, subject to the following conditions: 158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * The above copyright notice and this permission notice shall be included 178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * in all copies or substantial portions of the Software. 188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul */ 268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#ifdef PC_HEADER 298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "all.h" 308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#else 318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "glheader.h" 328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "colormac.h" 338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "context.h" 348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "image.h" 358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "histogram.h" 368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "mmath.h" 378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#endif 388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 4090f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul/* 41a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul * XXX the packed pixel formats haven't been tested. 4290f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul */ 438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulstatic void 448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulpack_histogram( GLcontext *ctx, 458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint n, CONST GLuint rgba[][4], 468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLenum format, GLenum type, GLvoid *destination, 478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul const struct gl_pixelstore_attrib *packing ) 488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul const GLint comps = _mesa_components_in_format(format); 508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint luminance[MAX_WIDTH]; 518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) { 538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < n; i++) { 558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul luminance[i] = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP]; 568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#define PACK_MACRO(TYPE) \ 608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { \ 618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; \ 628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (format) { \ 638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RED: \ 648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][RCOMP]; \ 668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_GREEN: \ 688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][GCOMP]; \ 708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BLUE: \ 728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][BCOMP]; \ 748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA: \ 768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][ACOMP]; \ 788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE: \ 808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) luminance[i]; \ 828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE_ALPHA: \ 848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*2+0] = (TYPE) luminance[i]; \ 868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*2+1] = (TYPE) rgba[i][ACOMP]; \ 878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB: \ 908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+0] = (TYPE) rgba[i][RCOMP]; \ 928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+1] = (TYPE) rgba[i][GCOMP]; \ 938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+2] = (TYPE) rgba[i][BCOMP]; \ 948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA: \ 978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+0] = (TYPE) rgba[i][RCOMP]; \ 998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+1] = (TYPE) rgba[i][GCOMP]; \ 1008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+2] = (TYPE) rgba[i][BCOMP]; \ 1018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+3] = (TYPE) rgba[i][ACOMP]; \ 1028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BGR: \ 1058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+0] = (TYPE) rgba[i][BCOMP]; \ 1078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+1] = (TYPE) rgba[i][GCOMP]; \ 1088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+2] = (TYPE) rgba[i][RCOMP]; \ 1098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BGRA: \ 1128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+0] = (TYPE) rgba[i][BCOMP]; \ 1148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+1] = (TYPE) rgba[i][GCOMP]; \ 1158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+2] = (TYPE) rgba[i][RCOMP]; \ 1168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+3] = (TYPE) rgba[i][ACOMP]; \ 1178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ABGR_EXT: \ 1208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+0] = (TYPE) rgba[i][ACOMP]; \ 1228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+1] = (TYPE) rgba[i][BCOMP]; \ 1238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+2] = (TYPE) rgba[i][GCOMP]; \ 1248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+3] = (TYPE) rgba[i][RCOMP]; \ 1258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: \ 1288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_problem(ctx, "bad format in pack_histogram"); \ 1298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (type) { 1338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_UNSIGNED_BYTE: 1348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLubyte *dst = (GLubyte *) destination; 1368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLubyte); 1378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 1398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BYTE: 1408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLbyte *dst = (GLbyte *) destination; 1428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLbyte); 1438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 1458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_UNSIGNED_SHORT: 1468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLushort *dst = (GLushort *) destination; 1488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLushort); 1498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 1508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap2(dst, n * comps); 1518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 1548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_SHORT: 1558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLshort *dst = (GLshort *) destination; 1578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLshort); 1588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 1598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap2((GLushort *) dst, n * comps); 1608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 1638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_UNSIGNED_INT: 1648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint *dst = (GLuint *) destination; 1668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLuint); 1678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 1688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap4(dst, n * comps); 1698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 1728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_INT: 1738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLint *dst = (GLint *) destination; 1758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLint); 1768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 1778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap4((GLuint *) dst, n * comps); 1788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 1818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_FLOAT: 1828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLfloat *dst = (GLfloat *) destination; 1848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLfloat); 1858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 1868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap4((GLuint *) dst, n * comps); 1878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 190a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_BYTE_3_3_2: 191a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 192a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLubyte *dst = (GLubyte *) destination; 193a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 194a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 195a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x7) << 5) 196a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 2) 197a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3) ); 198a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 199a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 200a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 2018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLubyte *dst = (GLubyte *) destination; 202a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 203a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 204a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 205a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x7) << 5) 206a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 2) 207a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3) ); 208a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 2098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 211a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_BYTE_2_3_3_REV: 212a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 213a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLubyte *dst = (GLubyte *) destination; 214a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 215a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 216a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x3) << 6) 217a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 3) 218a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x7) ); 219a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 220a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 221a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 222a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLubyte *dst = (GLubyte *) destination; 223a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 224a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 225a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 226a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x3) << 6) 227a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 3) 228a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x7) ); 229a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 2308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 232a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_5_6_5: 233a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 2348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLushort *dst = (GLushort *) destination; 235a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 236a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 237a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 238a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 239a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) ); 240a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 241a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 242a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 243a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 244a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 245a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 246a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 247a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11) 248a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 249a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) ); 2508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 253a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_5_6_5_REV: 254a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 255a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 256a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 257a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 258a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11) 259a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 260a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) ); 261a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 262a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 263a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 264a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 265a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 266a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 267a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 268a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 269a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 270a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) ); 2718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 274a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_4_4_4_4: 275a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 276a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 277a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 278a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 279a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xf) << 12) 280a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 8) 281a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 4) 282a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xf) ); 283a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 284a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 285a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 286a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 287a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 288a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 289a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0xf) << 12) 290a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 8) 291a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) << 4) 292a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xf) ); 293a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 294a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 295a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 296a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 297a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 298a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 299a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 300a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xf) << 12) 301a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 8) 302a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 4) 303a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) ); 304a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 305a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 306a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 307a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_4_4_4_4_REV: 308a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 309a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 310a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 311a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 312a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xf) << 12) 313a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 8) 314a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 4) 315a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) ); 316a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 317a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 318a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 319a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 320a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 321a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 322a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xf) << 12) 323a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) << 8) 324a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 4) 325a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) ); 326a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 327a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 328a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 329a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 330a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 331a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 332a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 333a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xf) << 12) 334a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 8) 335a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 4) 336a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xf) ); 337a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 338a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 339a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 340a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_5_5_5_1: 341a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 342a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 343a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 344a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 345a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 346a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 6) 347a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 1) 348a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x1) ); 349a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 350a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 351a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 352a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 353a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 354a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 355a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11) 356a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 6) 357a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) << 1) 358a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x1) ); 359a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 360a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 361a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 362a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 363a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 364a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 365a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 366a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11) 367a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 6) 368a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 1) 369a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1) ); 370a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 371a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 372a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 373a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_1_5_5_5_REV: 374a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 375a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 376a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 377a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 378a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11) 379a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 6) 380a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 1) 381a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1) ); 382a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 383a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 384a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 385a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 386a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 387a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 388a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11) 389a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) << 6) 390a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 1) 391a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1) ); 392a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 393a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 394a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 395a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 396a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 397a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 398a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 399a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 400a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 6) 401a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 1) 402a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x1) ); 403a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 404a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 405a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 406a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_8_8_8_8: 407a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 4088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint *dst = (GLuint *) destination; 409a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 410a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 411a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xff) << 24) 412a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 16) 413a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 8) 414a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xff) ); 415a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 416a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 417a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 418a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 419a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 420a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 421a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0xff) << 24) 422a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 16) 423a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) << 8) 424a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xff) ); 425a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 426a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 427a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 428a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 429a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 430a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 431a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 432a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xff) << 24) 433a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 16) 434a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 8) 435a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) ); 4368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 4378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 4388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 439a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_8_8_8_8_REV: 440a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 441a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 442a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 443a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 444a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xff) << 24) 445a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 16) 446a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 8) 447a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) ); 448a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 449a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 450a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 451a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 452a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 453a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 454a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xff) << 24) 455a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) << 16) 456a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 8) 457a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) ); 458a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 459a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 460a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 461a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 462a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 463a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 464a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 465a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xff) << 24) 466a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 16) 467a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 8) 468a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xff) ); 4698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 4708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 4718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 472a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_10_10_10_2: 473a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 474a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 475a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 476a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 477a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22) 478a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 12) 479a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 2) 480a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x3) ); 481a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 482a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 483a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 484a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 485a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 486a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 487a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x3ff) << 22) 488a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 12) 489a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3ff) << 2) 490a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x3) ); 491a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 492a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 493a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 494a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 495a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 496a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 497a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 498a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22) 499a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 12) 500a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 2) 501a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3) ); 502a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 503a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 504a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 505a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_2_10_10_10_REV: 506a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 507a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 508a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 509a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 510a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22) 511a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 12) 512a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 2) 513a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3) ); 514a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 515a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 516a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 517a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 518a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 519a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 520a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22) 521a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3ff) << 12) 522a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 2) 523a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3) ); 524a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 525a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 526a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 527a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 528a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 529a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 530a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 531a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22) 532a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 12) 533a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 2) 534a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x3) ); 5358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 5388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 539a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul gl_problem(ctx, "Bad type in pack_histogram"); 5408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 5428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#undef PACK_MACRO 5438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 5448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 5458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 5468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul/* 5478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Given an internalFormat token passed to glHistogram or glMinMax, 5488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * return the corresponding base format. 5498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Return -1 if invalid token. 5508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul */ 5518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulstatic GLint 5528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulbase_histogram_format( GLenum format ) 5538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 5548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (format) { 5558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA: 5568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA4: 5578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA8: 5588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA12: 5598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA16: 5608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_ALPHA; 5618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE: 5628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE4: 5638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE8: 5648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE12: 5658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE16: 5668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_LUMINANCE; 5678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE_ALPHA: 5688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE4_ALPHA4: 5698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE6_ALPHA2: 5708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE8_ALPHA8: 5718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE12_ALPHA4: 5728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE12_ALPHA12: 5738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE16_ALPHA16: 5748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_LUMINANCE_ALPHA; 5758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB: 5768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_R3_G3_B2: 5778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB4: 5788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB5: 5798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB8: 5808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB10: 5818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB12: 5828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB16: 5838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_RGB; 5848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA: 5858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA2: 5868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA4: 5878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB5_A1: 5888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA8: 5898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB10_A2: 5908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA12: 5918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA16: 5928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_RGBA; 5938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 5948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return -1; /* error */ 5958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 5978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 5988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 5998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 6008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) 6018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 6028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 603cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 6048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 6068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetMinmax"); 6078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 6118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetMinmax(target)"); 6128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 61590f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul if (!_mesa_is_legal_format_and_type(format, type)) { 61690f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetMinmax(format or type)"); 6178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 620cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (type != GL_UNSIGNED_BYTE && 621cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_BYTE && 622cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_UNSIGNED_SHORT && 623cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_SHORT && 624cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_UNSIGNED_INT && 625cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_INT && 626cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_FLOAT) { 627cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell gl_error(ctx, GL_INVALID_ENUM, "glGetMinmax(type)"); 628cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell return; 629cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell } 630cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 6318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!values) 6328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 6358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLfloat minmax[2][4]; 6368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][RCOMP] = CLAMP(ctx->MinMax.Min[RCOMP], 0.0F, 1.0F); 6378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][GCOMP] = CLAMP(ctx->MinMax.Min[GCOMP], 0.0F, 1.0F); 6388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][BCOMP] = CLAMP(ctx->MinMax.Min[BCOMP], 0.0F, 1.0F); 6398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][ACOMP] = CLAMP(ctx->MinMax.Min[ACOMP], 0.0F, 1.0F); 6408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][RCOMP] = CLAMP(ctx->MinMax.Max[RCOMP], 0.0F, 1.0F); 6418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][GCOMP] = CLAMP(ctx->MinMax.Max[GCOMP], 0.0F, 1.0F); 6428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][BCOMP] = CLAMP(ctx->MinMax.Max[BCOMP], 0.0F, 1.0F); 6438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][ACOMP] = CLAMP(ctx->MinMax.Max[ACOMP], 0.0F, 1.0F); 644a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul _mesa_pack_float_rgba_span(ctx, 2, (CONST GLfloat (*)[4]) minmax, 645a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul format, type, values, &ctx->Pack, 0); 6468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (reset) { 6498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_ResetMinmax(GL_MINMAX); 6508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 6528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 6558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) 6568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 6578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 658cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 6598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 6618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetHistogram"); 6628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM) { 6668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetHistogram(target)"); 6678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 67090f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul if (!_mesa_is_legal_format_and_type(format, type)) { 67190f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetHistogram(format or type)"); 6728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 675cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (type != GL_UNSIGNED_BYTE && 676cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_BYTE && 677cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_UNSIGNED_SHORT && 678cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_SHORT && 679cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_UNSIGNED_INT && 680cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_INT && 681cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell type != GL_FLOAT) { 682cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell gl_error(ctx, GL_INVALID_ENUM, "glGetHistogram(type)"); 683cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell return; 684cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell } 685cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 6868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!values) 6878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul pack_histogram(ctx, ctx->Histogram.Width, 6908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul (CONST GLuint (*)[4]) ctx->Histogram.Count, 6918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul format, type, values, &ctx->Pack); 6928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (reset) { 6948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 6958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) { 6968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][0] = 0; 6978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][1] = 0; 6988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][2] = 0; 6998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][3] = 0; 7008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 7038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 7068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params) 7078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 7088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 709cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 7108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 7128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameterfv"); 7138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) { 7178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(target)"); 7188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (pname) { 7228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_WIDTH: 7238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.Width; 7248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_FORMAT: 7268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.Format; 7278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_RED_SIZE: 7298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.RedSize; 7308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_GREEN_SIZE: 7328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.GreenSize; 7338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_BLUE_SIZE: 7358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.BlueSize; 7368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_ALPHA_SIZE: 7388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.AlphaSize; 7398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_LUMINANCE_SIZE: 7418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.LuminanceSize; 7428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_SINK: 7448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.Sink; 7458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 7478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(pname)"); 7488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 7508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 7538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params) 7548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 7558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 756cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 7578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 7598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameteriv"); 7608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) { 7648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(target)"); 7658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (pname) { 7698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_WIDTH: 7708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.Width; 7718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_FORMAT: 7738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.Format; 7748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_RED_SIZE: 7768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.RedSize; 7778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_GREEN_SIZE: 7798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.GreenSize; 7808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_BLUE_SIZE: 7828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.BlueSize; 7838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_ALPHA_SIZE: 7858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.AlphaSize; 7868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_LUMINANCE_SIZE: 7888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.LuminanceSize; 7898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_SINK: 7918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.Sink; 7928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 7938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 7948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(pname)"); 7958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 7978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 8008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params) 8018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 8028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 803cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 8048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 8068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameterfv"); 8078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 8108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameterfv(target)"); 8118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (pname == GL_MINMAX_FORMAT) { 8148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->MinMax.Format; 8158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else if (pname == GL_MINMAX_SINK) { 8178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->MinMax.Sink; 8188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 8208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameterfv(pname)"); 8218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 8238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 8268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params) 8278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 8288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 829cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 8308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 8328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameteriv"); 8338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 8368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameteriv(target)"); 8378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (pname == GL_MINMAX_FORMAT) { 8408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->MinMax.Format; 8418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else if (pname == GL_MINMAX_SINK) { 8438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->MinMax.Sink; 8448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 8468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameteriv(pname)"); 8478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 8498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 8528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) 8538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 8548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 8558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLboolean error = GL_FALSE; 8568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 857cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */ 8588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 8608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glHistogram"); 8618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) { 8658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glHistogram(target)"); 8668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (width < 0 || width > HISTOGRAM_TABLE_SIZE) { 8708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target == GL_PROXY_HISTOGRAM) { 8718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul error = GL_TRUE; 8728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 8748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (width < 0) 8758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_VALUE, "glHistogram(width)"); 8768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else 8778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_TABLE_TOO_LARGE, "glHistogram(width)"); 8788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (width != 0 && _mesa_bitcount(width) != 1) { 8838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target == GL_PROXY_HISTOGRAM) { 8848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul error = GL_TRUE; 8858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 8878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_VALUE, "glHistogram(width)"); 8888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (base_histogram_format(internalFormat) < 0) { 8938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target == GL_PROXY_HISTOGRAM) { 8948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul error = GL_TRUE; 8958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 8978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glHistogram(internalFormat)"); 8988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul /* reset histograms */ 9038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) { 9048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][0] = 0; 9058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][1] = 0; 9068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][2] = 0; 9078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][3] = 0; 9088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (error) { 9118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Width = 0; 9128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Format = 0; 9138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.RedSize = 0; 9148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.GreenSize = 0; 9158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.BlueSize = 0; 9168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.AlphaSize = 0; 9178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.LuminanceSize = 0; 9188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 9208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Width = width; 9218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Format = internalFormat; 9228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Sink = sink; 9238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.RedSize = 0xffffffff; 9248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.GreenSize = 0xffffffff; 9258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.BlueSize = 0xffffffff; 9268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.AlphaSize = 0xffffffff; 9278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.LuminanceSize = 0xffffffff; 9288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 930b5012e1ee1b0172dda3921bcf12e3605b1be589bBrian Paul ctx->NewState |= _NEW_PIXEL; 9318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 9328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 9358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_Minmax(GLenum target, GLenum internalFormat, GLboolean sink) 9368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 9378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 938cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 9398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 9418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glMinmax"); 9428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 9468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glMinMax(target)"); 9478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (base_histogram_format(internalFormat) < 0) { 9518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glMinMax(internalFormat)"); 9528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 954cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 955cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->MinMax.Sink == sink) 956cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell return; 957cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_PIXEL); 9588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Sink = sink; 9598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 9608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 9638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_ResetHistogram(GLenum target) 9648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 9658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 9668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 967cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */ 9688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 9708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glResetHistogram"); 9718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM) { 9758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glResetHistogram(target)"); 9768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) { 9808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][0] = 0; 9818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][1] = 0; 9828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][2] = 0; 9838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][3] = 0; 9848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 986b5012e1ee1b0172dda3921bcf12e3605b1be589bBrian Paul ctx->NewState |= _NEW_PIXEL; 9878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 9888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulvoid 9918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_ResetMinmax(GLenum target) 9928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 9938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 994cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 9958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!ctx->Extensions.EXT_histogram) { 9978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_OPERATION, "glResetMinmax"); 9988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 10028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul gl_error(ctx, GL_INVALID_ENUM, "glResetMinMax(target)"); 10038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[RCOMP] = 1000; ctx->MinMax.Max[RCOMP] = -1000; 10078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[GCOMP] = 1000; ctx->MinMax.Max[GCOMP] = -1000; 10088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[BCOMP] = 1000; ctx->MinMax.Max[BCOMP] = -1000; 10098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[ACOMP] = 1000; ctx->MinMax.Max[ACOMP] = -1000; 1010b5012e1ee1b0172dda3921bcf12e3605b1be589bBrian Paul ctx->NewState |= _NEW_PIXEL; 10118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 1012