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 */