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