Merge branch 'master' into pipe-video
[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 "main/mtypes.h"
12
13 #define MAX_NUM_INSTRUCTIONS_PER_PASS_ATI 8
14 #define MAX_NUM_PASSES_ATI 2
15 #define MAX_NUM_FRAGMENT_REGISTERS_ATI 6
16
17 struct ati_fs_opcode_st
18 {
19 GLenum opcode;
20 GLint num_src_args;
21 };
22
23 extern struct ati_fs_opcode_st ati_fs_opcodes[];
24
25 struct atifragshader_src_register
26 {
27 GLuint Index;
28 GLuint argRep;
29 GLuint argMod;
30 };
31
32 struct atifragshader_dst_register
33 {
34 GLuint Index;
35 GLuint dstMod;
36 GLuint dstMask;
37 };
38
39 #define ATI_FRAGMENT_SHADER_COLOR_OP 0
40 #define ATI_FRAGMENT_SHADER_ALPHA_OP 1
41 #define ATI_FRAGMENT_SHADER_PASS_OP 2
42 #define ATI_FRAGMENT_SHADER_SAMPLE_OP 3
43
44 /* two opcodes - one for color/one for alpha */
45 /* up to three source registers for most ops */
46 struct atifs_instruction
47 {
48 GLenum Opcode[2];
49 GLuint ArgCount[2];
50 struct atifragshader_src_register SrcReg[2][3];
51 struct atifragshader_dst_register DstReg[2];
52 };
53
54 /* different from arithmetic shader instruction */
55 struct atifs_setupinst
56 {
57 GLenum Opcode;
58 GLuint src;
59 GLenum swizzle;
60 };
61
62
63 #if FEATURE_ATI_fragment_shader
64
65 extern void
66 _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp);
67
68 extern struct ati_fragment_shader *
69 _mesa_new_ati_fragment_shader(GLcontext *ctx, GLuint id);
70
71 extern void
72 _mesa_delete_ati_fragment_shader(GLcontext *ctx,
73 struct ati_fragment_shader *s);
74
75
76 extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range);
77
78 extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id);
79
80 extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id);
81
82 extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void);
83
84 extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void);
85
86 extern void GLAPIENTRY
87 _mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle);
88
89 extern void GLAPIENTRY
90 _mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle);
91
92 extern void GLAPIENTRY
93 _mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask,
94 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
95 GLuint arg1Mod);
96
97 extern void GLAPIENTRY
98 _mesa_ColorFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMask,
99 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
100 GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
101 GLuint arg2Mod);
102
103 extern void GLAPIENTRY
104 _mesa_ColorFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMask,
105 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
106 GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
107 GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
108 GLuint arg3Mod);
109
110 extern void GLAPIENTRY
111 _mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
112 GLuint arg1Rep, GLuint arg1Mod);
113
114 extern void GLAPIENTRY
115 _mesa_AlphaFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
116 GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
117 GLuint arg2Rep, GLuint arg2Mod);
118
119 extern void GLAPIENTRY
120 _mesa_AlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
121 GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
122 GLuint arg2Rep, GLuint arg2Mod, GLuint arg3,
123 GLuint arg3Rep, GLuint arg3Mod);
124
125 extern void GLAPIENTRY
126 _mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value);
127
128 #else /* FEATURE_ATI_fragment_shader */
129
130 static INLINE void
131 _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp)
132 {
133 }
134
135 static INLINE struct ati_fragment_shader *
136 _mesa_new_ati_fragment_shader(GLcontext *ctx, GLuint id)
137 {
138 return NULL;
139 }
140
141 static INLINE void
142 _mesa_delete_ati_fragment_shader(GLcontext *ctx,
143 struct ati_fragment_shader *s)
144 {
145 }
146
147 #endif /* FEATURE_ATI_fragment_shader */
148
149 #endif /* ATIFRAGSHADER_H */