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