2 * Mesa 3-D graphics library ATI Fragment Shader
4 * Copyright (C) 2004 David Airlie All Rights Reserved.
8 #ifndef ATIFRAGSHADER_H
9 #define ATIFRAGSHADER_H
13 #include "mfeatures.h"
18 #define MAX_NUM_INSTRUCTIONS_PER_PASS_ATI 8
19 #define MAX_NUM_PASSES_ATI 2
20 #define MAX_NUM_FRAGMENT_REGISTERS_ATI 6
22 struct ati_fs_opcode_st
28 extern struct ati_fs_opcode_st ati_fs_opcodes[];
30 struct atifragshader_src_register
37 struct atifragshader_dst_register
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
49 /* two opcodes - one for color/one for alpha */
50 /* up to three source registers for most ops */
51 struct atifs_instruction
55 struct atifragshader_src_register SrcReg[2][3];
56 struct atifragshader_dst_register DstReg[2];
59 /* different from arithmetic shader instruction */
60 struct atifs_setupinst
68 #if FEATURE_ATI_fragment_shader
71 _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp);
73 extern struct ati_fragment_shader *
74 _mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id);
77 _mesa_delete_ati_fragment_shader(struct gl_context *ctx,
78 struct ati_fragment_shader *s);
81 extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range);
83 extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id);
85 extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id);
87 extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void);
89 extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void);
91 extern void GLAPIENTRY
92 _mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle);
94 extern void GLAPIENTRY
95 _mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle);
97 extern void GLAPIENTRY
98 _mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask,
99 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
102 extern 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,
108 extern 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,
115 extern void GLAPIENTRY
116 _mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
117 GLuint arg1Rep, GLuint arg1Mod);
119 extern 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);
124 extern 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);
130 extern void GLAPIENTRY
131 _mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value);
133 #else /* FEATURE_ATI_fragment_shader */
136 _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp)
140 static INLINE struct ati_fragment_shader *
141 _mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id)
147 _mesa_delete_ati_fragment_shader(struct gl_context *ctx,
148 struct ati_fragment_shader *s)
152 #endif /* FEATURE_ATI_fragment_shader */
154 #endif /* ATIFRAGSHADER_H */