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