Major audit of all Mesa's x86 assembly code. This round is basically
[mesa.git] / src / mesa / x86 / mmx.h
1 /* $Id: mmx.h,v 1.3 2000/10/23 00:16:28 gareth Exp $ */
2
3 /*
4 * Mesa 3-D graphics library
5 * Version: 3.5
6 *
7 * Copyright (C) 1999 Brian Paul All Rights Reserved.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27
28
29
30
31 #ifndef ASM_MMX_H
32 #define ASM_MMX_H
33
34
35 extern void _ASMAPI
36 gl_mmx_blend_transparency( GLcontext *ctx, GLuint n, const GLubyte mask[],
37 GLubyte rgba[][4], const GLubyte dest[][4] );
38
39
40 void gl_mmx_set_blend_function( GLcontext *ctx )
41 {
42 const GLenum eq = ctx->Color.BlendEquation;
43 const GLenum srcRGB = ctx->Color.BlendSrcRGB;
44 const GLenum dstRGB = ctx->Color.BlendDstRGB;
45 const GLenum srcA = ctx->Color.BlendSrcA;
46 const GLenum dstA = ctx->Color.BlendDstA;
47
48
49 if (srcRGB != srcA || dstRGB != dstA) {
50 ctx->Color.BlendFunc = blend_general;
51 }
52 else if (eq==GL_FUNC_ADD_EXT && srcRGB==GL_SRC_ALPHA
53 && dstRGB==GL_ONE_MINUS_SRC_ALPHA) {
54 ctx->Color.BlendFunc = gl_mmx_blend_transparency;
55 }
56 else if (eq==GL_FUNC_ADD_EXT && srcRGB==GL_ONE && dstRGB==GL_ONE) {
57 ctx->Color.BlendFunc = blend_add;
58 }
59 else if (((eq==GL_FUNC_ADD_EXT || eq==GL_FUNC_REVERSE_SUBTRACT_EXT)
60 && (srcRGB==GL_ZERO && dstRGB==GL_SRC_COLOR))
61 ||
62 ((eq==GL_FUNC_ADD_EXT || eq==GL_FUNC_SUBTRACT_EXT)
63 && (srcRGB==GL_DST_COLOR && dstRGB==GL_ZERO))) {
64 ctx->Color.BlendFunc = blend_modulate;
65 }
66 else if (eq==GL_MIN_EXT) {
67 ctx->Color.BlendFunc = blend_min;
68 }
69 else if (eq==GL_MAX_EXT) {
70 ctx->Color.BlendFunc = blend_max;
71 }
72 else {
73 ctx->Color.BlendFunc = blend_general;
74 }
75 }
76
77
78 #endif