14a49301eSmrg
24a49301eSmrg/*
34a49301eSmrg * Mesa 3-D graphics library
44a49301eSmrg *
54a49301eSmrg * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
64a49301eSmrg *
74a49301eSmrg * Permission is hereby granted, free of charge, to any person obtaining a
84a49301eSmrg * copy of this software and associated documentation files (the "Software"),
94a49301eSmrg * to deal in the Software without restriction, including without limitation
104a49301eSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
114a49301eSmrg * and/or sell copies of the Software, and to permit persons to whom the
124a49301eSmrg * Software is furnished to do so, subject to the following conditions:
134a49301eSmrg *
144a49301eSmrg * The above copyright notice and this permission notice shall be included
154a49301eSmrg * in all copies or substantial portions of the Software.
164a49301eSmrg *
174a49301eSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
184a49301eSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
194a49301eSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20af69d88dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21af69d88dSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22af69d88dSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23af69d88dSmrg * OTHER DEALINGS IN THE SOFTWARE.
244a49301eSmrg *
254a49301eSmrg * Authors:
264a49301eSmrg *    Gareth Hughes
274a49301eSmrg */
284a49301eSmrg
294a49301eSmrg#ifndef X86_XFORM_H
304a49301eSmrg#define X86_XFORM_H
314a49301eSmrg
324a49301eSmrg
334a49301eSmrg/* =============================================================
344a49301eSmrg * Transformation function declarations:
354a49301eSmrg */
364a49301eSmrg
374a49301eSmrg#define XFORM_ARGS	GLvector4f *to_vec,				\
384a49301eSmrg			const GLfloat m[16],				\
394a49301eSmrg			const GLvector4f *from_vec
404a49301eSmrg
414a49301eSmrg#define DECLARE_XFORM_GROUP( pfx, sz ) \
4201e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_general( XFORM_ARGS );		\
4301e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_identity( XFORM_ARGS );	\
4401e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_3d_no_rot( XFORM_ARGS );	\
4501e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_perspective( XFORM_ARGS );	\
4601e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_2d( XFORM_ARGS );		\
4701e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_2d_no_rot( XFORM_ARGS );	\
4801e04c3fSmrgextern void _mesa_##pfx##_transform_points##sz##_3d( XFORM_ARGS );
494a49301eSmrg
504a49301eSmrg#define ASSIGN_XFORM_GROUP( pfx, sz )					\
514a49301eSmrg   _mesa_transform_tab[sz][MATRIX_GENERAL] =				\
524a49301eSmrg      _mesa_##pfx##_transform_points##sz##_general;			\
534a49301eSmrg   _mesa_transform_tab[sz][MATRIX_IDENTITY] =				\
544a49301eSmrg      _mesa_##pfx##_transform_points##sz##_identity;			\
554a49301eSmrg   _mesa_transform_tab[sz][MATRIX_3D_NO_ROT] =				\
564a49301eSmrg      _mesa_##pfx##_transform_points##sz##_3d_no_rot;			\
574a49301eSmrg   _mesa_transform_tab[sz][MATRIX_PERSPECTIVE] =			\
584a49301eSmrg      _mesa_##pfx##_transform_points##sz##_perspective;			\
594a49301eSmrg   _mesa_transform_tab[sz][MATRIX_2D] =					\
604a49301eSmrg      _mesa_##pfx##_transform_points##sz##_2d;				\
614a49301eSmrg   _mesa_transform_tab[sz][MATRIX_2D_NO_ROT] =				\
624a49301eSmrg      _mesa_##pfx##_transform_points##sz##_2d_no_rot;			\
634a49301eSmrg   _mesa_transform_tab[sz][MATRIX_3D] =					\
644a49301eSmrg      _mesa_##pfx##_transform_points##sz##_3d;
654a49301eSmrg
664a49301eSmrg
674a49301eSmrg/* =============================================================
684a49301eSmrg * Normal transformation function declarations:
694a49301eSmrg */
704a49301eSmrg
714a49301eSmrg#define NORM_ARGS	const GLmatrix *mat,				\
724a49301eSmrg			GLfloat scale,					\
734a49301eSmrg			const GLvector4f *in,				\
744a49301eSmrg			const GLfloat *lengths,				\
754a49301eSmrg			GLvector4f *dest
764a49301eSmrg
774a49301eSmrg#define DECLARE_NORM_GROUP( pfx ) \
7801e04c3fSmrgextern void _mesa_##pfx##_rescale_normals( NORM_ARGS );				\
7901e04c3fSmrgextern void _mesa_##pfx##_normalize_normals( NORM_ARGS );			\
8001e04c3fSmrgextern void _mesa_##pfx##_transform_normals( NORM_ARGS );			\
8101e04c3fSmrgextern void _mesa_##pfx##_transform_normals_no_rot( NORM_ARGS );		\
8201e04c3fSmrgextern void _mesa_##pfx##_transform_rescale_normals( NORM_ARGS );		\
8301e04c3fSmrgextern void _mesa_##pfx##_transform_rescale_normals_no_rot( NORM_ARGS );	\
8401e04c3fSmrgextern void _mesa_##pfx##_transform_normalize_normals( NORM_ARGS );		\
8501e04c3fSmrgextern void _mesa_##pfx##_transform_normalize_normals_no_rot( NORM_ARGS );
864a49301eSmrg
874a49301eSmrg#define ASSIGN_NORM_GROUP( pfx )					\
884a49301eSmrg   _mesa_normal_tab[NORM_RESCALE] =					\
894a49301eSmrg      _mesa_##pfx##_rescale_normals;					\
904a49301eSmrg   _mesa_normal_tab[NORM_NORMALIZE] =					\
914a49301eSmrg      _mesa_##pfx##_normalize_normals;					\
924a49301eSmrg   _mesa_normal_tab[NORM_TRANSFORM] =					\
934a49301eSmrg      _mesa_##pfx##_transform_normals;					\
944a49301eSmrg   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT] =				\
954a49301eSmrg      _mesa_##pfx##_transform_normals_no_rot;				\
964a49301eSmrg   _mesa_normal_tab[NORM_TRANSFORM | NORM_RESCALE] =			\
974a49301eSmrg      _mesa_##pfx##_transform_rescale_normals;				\
984a49301eSmrg   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_RESCALE] =		\
994a49301eSmrg      _mesa_##pfx##_transform_rescale_normals_no_rot;			\
1004a49301eSmrg   _mesa_normal_tab[NORM_TRANSFORM | NORM_NORMALIZE] =			\
1014a49301eSmrg      _mesa_##pfx##_transform_normalize_normals;			\
1024a49301eSmrg   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_NORMALIZE] =		\
1034a49301eSmrg      _mesa_##pfx##_transform_normalize_normals_no_rot;
1044a49301eSmrg
1054a49301eSmrg
1064a49301eSmrg#endif
107