atifragshader.h revision f9995b30756140724f41daf963fa06167912be7f
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
17struct ati_fs_opcode_st
18{
19   GLenum opcode;
20   GLint num_src_args;
21};
22
23extern struct ati_fs_opcode_st ati_fs_opcodes[];
24
25struct atifragshader_src_register
26{
27   GLuint Index;
28   GLuint argRep;
29   GLuint argMod;
30};
31
32struct 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 */
46struct 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 */
55struct atifs_setupinst
56{
57   GLenum Opcode;
58   GLuint src;
59   GLenum swizzle;
60};
61
62
63#if FEATURE_ATI_fragment_shader
64
65extern void
66_mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp);
67
68extern struct ati_fragment_shader *
69_mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id);
70
71extern void
72_mesa_delete_ati_fragment_shader(struct gl_context *ctx,
73                                 struct ati_fragment_shader *s);
74
75
76extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range);
77
78extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id);
79
80extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id);
81
82extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void);
83
84extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void);
85
86extern void GLAPIENTRY
87_mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle);
88
89extern void GLAPIENTRY
90_mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle);
91
92extern void GLAPIENTRY
93_mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask,
94			  GLuint dstMod, GLuint arg1, GLuint arg1Rep,
95			  GLuint arg1Mod);
96
97extern 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
103extern 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
110extern void GLAPIENTRY
111_mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
112			  GLuint arg1Rep, GLuint arg1Mod);
113
114extern 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
119extern 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
125extern void GLAPIENTRY
126_mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value);
127
128#else /* FEATURE_ATI_fragment_shader */
129
130static INLINE void
131_mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp)
132{
133}
134
135static INLINE struct ati_fragment_shader *
136_mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id)
137{
138   return NULL;
139}
140
141static INLINE void
142_mesa_delete_ati_fragment_shader(struct gl_context *ctx,
143                                 struct ati_fragment_shader *s)
144{
145}
146
147#endif /* FEATURE_ATI_fragment_shader */
148
149#endif /* ATIFRAGSHADER_H */
150