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