u_rect.c revision 8e4a95a93d15a6707a29454cd47e10b08314cda2
18e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell/************************************************************************** 28e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 38e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 48e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * All Rights Reserved. 58e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 68e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 78e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * copy of this software and associated documentation files (the 88e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * "Software"), to deal in the Software without restriction, including 98e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 108e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 118e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 128e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * the following conditions: 138e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 148e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * The above copyright notice and this permission notice (including the 158e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 168e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * of the Software. 178e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 188e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 198e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 218e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 228e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 238e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 248e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 258e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 268e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell **************************************************************************/ 278e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 288e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell#include "g_context.h" 298e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell#include "g_state.h" 308e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell#include "g_surface.h" 318e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell#include "g_headers.h" 328e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 338e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstatic void rgba8_read_quad_f( struct generic_surface *gs, 348e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLint x, GLint y, 358e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLfloat (*rgba)[NUM_CHANNELS] ) 368e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{ 378e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLuint i, j, k = 0; 388e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 398e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (i = 0; i < 2; i++) { 408e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (j = 0; j < 2; j++, k++) { 418e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte *ptr = gs->surface.ptr + (y+i) * gs->surface.stride + (x+j) * 4; 428e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][0] = ptr[0] * (1.0 / 255.0); 438e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][1] = ptr[1] * (1.0 / 255.0); 448e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][2] = ptr[2] * (1.0 / 255.0); 458e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][3] = ptr[3] * (1.0 / 255.0); 468e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 478e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 488e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell} 498e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 508e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstatic void rgba8_read_quad_f_swz( struct generic_surface *gs, 518e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLint x, GLint y, 528e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLfloat (*rrrr)[QUAD_SIZE] ) 538e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{ 548e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLuint i, j, k = 0; 558e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 568e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (i = 0; i < 2; i++) { 578e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (j = 0; j < 2; j++, k++) { 588e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte *ptr = gs->surface.ptr + (y+i) * gs->surface.stride + (x+j) * 4; 598e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rrrr[0][k] = ptr[0] * (1.0 / 255.0); 608e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rrrr[1][k] = ptr[1] * (1.0 / 255.0); 618e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rrrr[2][k] = ptr[2] * (1.0 / 255.0); 628e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rrrr[3][k] = ptr[3] * (1.0 / 255.0); 638e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 648e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 658e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell} 668e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 678e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstatic void rgba8_write_quad_f( struct generic_surface *gs, 688e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLint x, GLint y, 698e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLfloat (*rgba)[NUM_CHANNELS] ) 708e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{ 718e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLuint i, j, k = 0; 728e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 738e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (i = 0; i < 2; i++) { 748e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (j = 0; j < 2; j++, k++) { 758e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte *ptr = gs->surface.ptr + (y+i) * gs->surface.stride + (x+j) * 4; 768e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[0] = rgba[k][0] * 255.0; 778e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[1] = rgba[k][1] * 255.0; 788e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[2] = rgba[k][2] * 255.0; 798e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[3] = rgba[k][3] * 255.0; 808e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 818e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 828e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell} 838e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 848e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstatic void rgba8_write_quad_f_swz( struct generic_surface *gs, 858e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLint x, GLint y, 868e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLfloat (*rrrr)[QUAD_SIZE] ) 878e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{ 888e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLuint i, j, k = 0; 898e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 908e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (i = 0; i < 2; i++) { 918e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (j = 0; j < 2; j++, k++) { 928e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte *ptr = gs->surface.ptr + (y+i) * gs->surface.stride + (x+j) * 4; 938e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[0] = rrrr[0][k] * 255.0; 948e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[1] = rrrr[1][k] * 255.0; 958e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[2] = rrrr[2][k] * 255.0; 968e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[3] = rrrr[3][k] * 255.0; 978e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 988e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 998e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell} 1008e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1018e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1028e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1038e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1048e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstatic void rgba8_read_quad_ub( struct generic_surface *gs, 1058e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLint x, GLint y, 1068e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte (*rgba)[NUM_CHANNELS] ) 1078e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{ 1088e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLuint i, j, k = 0; 1098e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1108e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (i = 0; i < 2; i++) { 1118e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (j = 0; j < 2; j++, k++) { 1128e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte *ptr = gs->surface.ptr + (y+i) * gs->surface.stride + (x+j) * 4; 1138e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][0] = ptr[0]; 1148e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][1] = ptr[1]; 1158e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][2] = ptr[2]; 1168e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba[k][3] = ptr[3]; 1178e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 1188e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 1198e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell} 1208e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1218e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1228e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstatic void rgba8_write_quad_ub( struct generic_surface *gs, 1238e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLint x, GLint y, 1248e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte (*rgba)[NUM_CHANNELS] ) 1258e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{ 1268e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLuint i, j, k = 0; 1278e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1288e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (i = 0; i < 2; i++) { 1298e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell for (j = 0; j < 2; j++, k++) { 1308e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell GLubyte *ptr = gs->surface.ptr + (y+i) * gs->surface.stride + (x+j) * 4; 1318e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[0] = rgba[k][0]; 1328e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[1] = rgba[k][1]; 1338e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[2] = rgba[k][2]; 1348e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell ptr[3] = rgba[k][3]; 1358e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 1368e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell } 1378e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell} 1388e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1398e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1408e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1418e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1428e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstruct generic_surface_type gs_rgba8 = { 1438e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell G_SURFACE_RGBA_8888, 1448e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba8_read_quad_f, 1458e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba8_read_quad_f_swz, 1468e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba8_read_quad_ub, 1478e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba8_write_quad_f, 1488e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba8_write_quad_f_swz, 1498e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell rgba8_write_quad_ub, 1508e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}; 1518e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1528e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 1538e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 154