123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/*
223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Mesa 3-D graphics library
3c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * Version:  6.5.1
422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
5c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * copy of this software and associated documentation files (the "Software"),
923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * to deal in the Software without restriction, including without limitation
1023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * and/or sell copies of the Software, and to permit persons to whom the
1223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Software is furnished to do so, subject to the following conditions:
1322144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
1423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * The above copyright notice and this permission notice shall be included
1523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * in all copies or substantial portions of the Software.
1622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes *
1723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
2023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
2123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
2223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */
2423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
2523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
2623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#ifndef _M_TRANSLATE_H_
2723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#define _M_TRANSLATE_H_
2823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
2919f7db9c9cfa75f05bb92114bbca15cb3c668dc8Vinson Lee#include "main/compiler.h"
3019f7db9c9cfa75f05bb92114bbca15cb3c668dc8Vinson Lee#include "main/glheader.h"
31c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brian#include "main/mtypes.h"		/* hack for GLchan */
324d53fb525db56d0695eaa5b91bd8f0cefbc25866Brian Paul#include "swrast/s_chan.h"
3323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
34c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul/**
35c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * Array translation.
36c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * For example, convert array of GLushort[3] to GLfloat[4].
37c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * The function name specifies the destination format/size.
38c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * \param  to  the destination address
39c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * \param  ptr  the source address
40c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * \param  stride  the source stride (in bytes) between elements
41c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * \param  type  the source datatype (GL_SHORT, GL_UNSIGNED_INT, etc)
42c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * \param  size  number of values per element in source array (1,2,3 or 4)
43c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * \param  start  first element in source array to convert
44c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * \param  n  number of elements to convert
45c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul *
46c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul * Note: "element" means a tuple like GLfloat[3] or GLubyte[4].
47c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul */
48c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul
4923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
50cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellextern void _math_trans_1f(GLfloat *to,
51cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   CONST void *ptr,
52cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint stride,
53cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLenum type,
54cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint start,
55cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint n );
56cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
57cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellextern void _math_trans_1ui(GLuint *to,
58cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    CONST void *ptr,
59cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint stride,
60cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLenum type,
61cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint start,
62cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint n );
63cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
64cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellextern void _math_trans_1ub(GLubyte *to,
65cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    CONST void *ptr,
66cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint stride,
67cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLenum type,
68cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint start,
69cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint n );
70cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
71cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellextern void _math_trans_4ub(GLubyte (*to)[4],
72cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    CONST void *ptr,
73cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint stride,
74cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLenum type,
75cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint size,
76cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint start,
77cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			    GLuint n );
78cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
794eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwellextern void _math_trans_4chan( GLchan (*to)[4],
804eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwell			       CONST void *ptr,
814eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwell			       GLuint stride,
824eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwell			       GLenum type,
834eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwell			       GLuint size,
844eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwell			       GLuint start,
854eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwell			       GLuint n );
864eebc90a174722422daea6352d4e980bc81b4bb2Keith Whitwell
8774b493a5e61237de081a438e774e5d8139d4c6b7Brian Paulextern void _math_trans_4us(GLushort (*to)[4],
8874b493a5e61237de081a438e774e5d8139d4c6b7Brian Paul			    CONST void *ptr,
8974b493a5e61237de081a438e774e5d8139d4c6b7Brian Paul			    GLuint stride,
9074b493a5e61237de081a438e774e5d8139d4c6b7Brian Paul			    GLenum type,
9174b493a5e61237de081a438e774e5d8139d4c6b7Brian Paul			    GLuint size,
9274b493a5e61237de081a438e774e5d8139d4c6b7Brian Paul			    GLuint start,
9374b493a5e61237de081a438e774e5d8139d4c6b7Brian Paul			    GLuint n );
9474b493a5e61237de081a438e774e5d8139d4c6b7Brian Paul
95c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul/** Convert to floats w/out normalization (i.e. just cast) */
96cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellextern void _math_trans_4f(GLfloat (*to)[4],
97cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   CONST void *ptr,
98cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint stride,
99cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLenum type,
100cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint size,
101cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint start,
102cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint n );
103cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
104c87809c9ed3579cdbd145479a3e55e4058489bf7Brian Paul/** Convert to normalized floats in [0,1] or [-1, 1] */
1057dfdf3a5b74d3498a98f71d18eb2e706f2fedd04Brian Paulextern void _math_trans_4fn(GLfloat (*to)[4],
10612c037dbff3d5a812e31624645d577413cd54122Keith Whitwell			    CONST void *ptr,
10712c037dbff3d5a812e31624645d577413cd54122Keith Whitwell			    GLuint stride,
10812c037dbff3d5a812e31624645d577413cd54122Keith Whitwell			    GLenum type,
10912c037dbff3d5a812e31624645d577413cd54122Keith Whitwell			    GLuint size,
11012c037dbff3d5a812e31624645d577413cd54122Keith Whitwell			    GLuint start,
11112c037dbff3d5a812e31624645d577413cd54122Keith Whitwell			    GLuint n );
11212c037dbff3d5a812e31624645d577413cd54122Keith Whitwell
1137dfdf3a5b74d3498a98f71d18eb2e706f2fedd04Brian Paulextern void _math_trans_3fn(GLfloat (*to)[3],
114cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   CONST void *ptr,
115cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint stride,
116cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLenum type,
117cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint start,
118cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   GLuint n );
119cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
120cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellextern void _math_init_translate( void );
12123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
12223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
12323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#endif
124