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 15 struct _glapi_table; 16 struct 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 22 struct ati_fs_opcode_st 23 { 24 GLenum opcode; 25 GLint num_src_args; 26 }; 27 28 extern struct ati_fs_opcode_st ati_fs_opcodes[]; 29 30 struct atifragshader_src_register 31 { 32 GLuint Index; 33 GLuint argRep; 34 GLuint argMod; 35 }; 36 37 struct 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 */ 51 struct 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 */ 60 struct atifs_setupinst 61 { 62 GLenum Opcode; 63 GLuint src; 64 GLenum swizzle; 65 }; 66 67 68 #if FEATURE_ATI_fragment_shader 69 70 extern void 71 _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp); 72 73 extern struct ati_fragment_shader * 74 _mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id); 75 76 extern void 77 _mesa_delete_ati_fragment_shader(struct gl_context *ctx, 78 struct ati_fragment_shader *s); 79 80 81 extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range); 82 83 extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id); 84 85 extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id); 86 87 extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void); 88 89 extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void); 90 91 extern void GLAPIENTRY 92 _mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle); 93 94 extern void GLAPIENTRY 95 _mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle); 96 97 extern void GLAPIENTRY 98 _mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask, 99 GLuint dstMod, GLuint arg1, GLuint arg1Rep, 100 GLuint arg1Mod); 101 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, 106 GLuint arg2Mod); 107 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, 113 GLuint arg3Mod); 114 115 extern void GLAPIENTRY 116 _mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, 117 GLuint arg1Rep, GLuint arg1Mod); 118 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); 123 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); 129 130 extern void GLAPIENTRY 131 _mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value); 132 133 #else /* FEATURE_ATI_fragment_shader */ 134 135 static inline void 136 _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp) 137 { 138 } 139 140 static inline struct ati_fragment_shader * 141 _mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id) 142 { 143 return NULL; 144 } 145 146 static 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