1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version:  6.5.1
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"),
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions:
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software.
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef _M_TRANSLATE_H_
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _M_TRANSLATE_H_
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/compiler.h"
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glheader.h"
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mtypes.h"		/* hack for GLchan */
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "swrast/s_chan.h"
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Array translation.
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For example, convert array of GLushort[3] to GLfloat[4].
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The function name specifies the destination format/size.
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param  to  the destination address
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param  ptr  the source address
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param  stride  the source stride (in bytes) between elements
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param  type  the source datatype (GL_SHORT, GL_UNSIGNED_INT, etc)
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param  size  number of values per element in source array (1,2,3 or 4)
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param  start  first element in source array to convert
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param  n  number of elements to convert
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: "element" means a tuple like GLfloat[3] or GLubyte[4].
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_1f(GLfloat *to,
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   CONST void *ptr,
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint stride,
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLenum type,
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint start,
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint n );
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_1ui(GLuint *to,
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    CONST void *ptr,
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint stride,
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLenum type,
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint start,
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint n );
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_1ub(GLubyte *to,
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    CONST void *ptr,
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint stride,
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLenum type,
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint start,
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint n );
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_4ub(GLubyte (*to)[4],
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    CONST void *ptr,
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint stride,
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLenum type,
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint size,
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint start,
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint n );
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_4chan( GLchan (*to)[4],
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			       CONST void *ptr,
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			       GLuint stride,
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			       GLenum type,
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			       GLuint size,
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			       GLuint start,
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			       GLuint n );
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_4us(GLushort (*to)[4],
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    CONST void *ptr,
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint stride,
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLenum type,
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint size,
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint start,
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint n );
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Convert to floats w/out normalization (i.e. just cast) */
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_4f(GLfloat (*to)[4],
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   CONST void *ptr,
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint stride,
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLenum type,
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint size,
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint start,
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint n );
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Convert to normalized floats in [0,1] or [-1, 1] */
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_4fn(GLfloat (*to)[4],
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    CONST void *ptr,
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint stride,
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLenum type,
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint size,
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint start,
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			    GLuint n );
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_trans_3fn(GLfloat (*to)[3],
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   CONST void *ptr,
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint stride,
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLenum type,
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint start,
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			   GLuint n );
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _math_init_translate( void );
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
124