OSDN Git Service

c47a7d56e4450bec3ddd24c4ec2e6ed0414f8a17
[android-x86/external-mesa.git] / src / mesa / main / atifragshader.h
1 /*
2  * Mesa 3-D graphics library ATI Fragment Shader
3  *
4  * Copyright (C) 2004  David Airlie   All Rights Reserved.
5  *
6  */
7
8 #ifndef ATIFRAGSHADER_H
9 #define ATIFRAGSHADER_H
10
11 #include "compiler.h"
12 #include "glheader.h"
13 #include "mfeatures.h"
14
15 struct _glapi_table;
16 struct gl_context;
17
18 #define MAX_NUM_INSTRUCTIONS_PER_PASS_ATI 8
19 #define MAX_NUM_PASSES_ATI                2
20 #define MAX_NUM_FRAGMENT_REGISTERS_ATI    6
21
22 struct ati_fs_opcode_st
23 {
24    GLenum opcode;
25    GLint num_src_args;
26 };
27
28 struct atifragshader_src_register
29 {
30    GLuint Index;
31    GLuint argRep;
32    GLuint argMod;
33 };
34
35 struct atifragshader_dst_register
36 {
37    GLuint Index;
38    GLuint dstMod;
39    GLuint dstMask;
40 };
41
42 #define ATI_FRAGMENT_SHADER_COLOR_OP 0
43 #define ATI_FRAGMENT_SHADER_ALPHA_OP 1
44 #define ATI_FRAGMENT_SHADER_PASS_OP  2
45 #define ATI_FRAGMENT_SHADER_SAMPLE_OP 3
46
47 /* two opcodes - one for color/one for alpha */
48 /* up to three source registers for most ops */
49 struct atifs_instruction
50 {
51    GLenum Opcode[2];
52    GLuint ArgCount[2];
53    struct atifragshader_src_register SrcReg[2][3];
54    struct atifragshader_dst_register DstReg[2];
55 };
56
57 /* different from arithmetic shader instruction */
58 struct atifs_setupinst
59 {
60    GLenum Opcode;
61    GLuint src;
62    GLenum swizzle;
63 };
64
65
66 extern struct ati_fragment_shader *
67 _mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id);
68
69 extern void
70 _mesa_delete_ati_fragment_shader(struct gl_context *ctx,
71                                  struct ati_fragment_shader *s);
72
73
74 extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range);
75
76 extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id);
77
78 extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id);
79
80 extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void);
81
82 extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void);
83
84 extern void GLAPIENTRY
85 _mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle);
86
87 extern void GLAPIENTRY
88 _mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle);
89
90 extern void GLAPIENTRY
91 _mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask,
92                           GLuint dstMod, GLuint arg1, GLuint arg1Rep,
93                           GLuint arg1Mod);
94
95 extern void GLAPIENTRY
96 _mesa_ColorFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMask,
97                           GLuint dstMod, GLuint arg1, GLuint arg1Rep,
98                           GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
99                           GLuint arg2Mod);
100
101 extern void GLAPIENTRY
102 _mesa_ColorFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMask,
103                           GLuint dstMod, GLuint arg1, GLuint arg1Rep,
104                           GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
105                           GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
106                           GLuint arg3Mod);
107
108 extern void GLAPIENTRY
109 _mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
110                           GLuint arg1Rep, GLuint arg1Mod);
111
112 extern void GLAPIENTRY
113 _mesa_AlphaFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
114                           GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
115                           GLuint arg2Rep, GLuint arg2Mod);
116
117 extern void GLAPIENTRY
118 _mesa_AlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
119                           GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
120                           GLuint arg2Rep, GLuint arg2Mod, GLuint arg3,
121                           GLuint arg3Rep, GLuint arg3Mod);
122
123 extern void GLAPIENTRY
124 _mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value);
125
126
127 #endif /* ATIFRAGSHADER_H */