| /* |
| * Mesa 3-D graphics library ATI Fragment Shader |
| * |
| * Copyright (C) 2004 David Airlie All Rights Reserved. |
| * |
| */ |
| |
| #ifndef ATIFRAGSHADER_H |
| #define ATIFRAGSHADER_H |
| |
| #include "compiler.h" |
| #include "glheader.h" |
| #include "mfeatures.h" |
| |
| struct _glapi_table; |
| struct gl_context; |
| |
| #define MAX_NUM_INSTRUCTIONS_PER_PASS_ATI 8 |
| #define MAX_NUM_PASSES_ATI 2 |
| #define MAX_NUM_FRAGMENT_REGISTERS_ATI 6 |
| |
| struct ati_fs_opcode_st |
| { |
| GLenum opcode; |
| GLint num_src_args; |
| }; |
| |
| struct atifragshader_src_register |
| { |
| GLuint Index; |
| GLuint argRep; |
| GLuint argMod; |
| }; |
| |
| struct atifragshader_dst_register |
| { |
| GLuint Index; |
| GLuint dstMod; |
| GLuint dstMask; |
| }; |
| |
| #define ATI_FRAGMENT_SHADER_COLOR_OP 0 |
| #define ATI_FRAGMENT_SHADER_ALPHA_OP 1 |
| #define ATI_FRAGMENT_SHADER_PASS_OP 2 |
| #define ATI_FRAGMENT_SHADER_SAMPLE_OP 3 |
| |
| /* two opcodes - one for color/one for alpha */ |
| /* up to three source registers for most ops */ |
| struct atifs_instruction |
| { |
| GLenum Opcode[2]; |
| GLuint ArgCount[2]; |
| struct atifragshader_src_register SrcReg[2][3]; |
| struct atifragshader_dst_register DstReg[2]; |
| }; |
| |
| /* different from arithmetic shader instruction */ |
| struct atifs_setupinst |
| { |
| GLenum Opcode; |
| GLuint src; |
| GLenum swizzle; |
| }; |
| |
| |
| #if FEATURE_ATI_fragment_shader |
| |
| extern void |
| _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp); |
| |
| extern struct ati_fragment_shader * |
| _mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id); |
| |
| extern void |
| _mesa_delete_ati_fragment_shader(struct gl_context *ctx, |
| struct ati_fragment_shader *s); |
| |
| |
| extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range); |
| |
| extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id); |
| |
| extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id); |
| |
| extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void); |
| |
| extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void); |
| |
| extern void GLAPIENTRY |
| _mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle); |
| |
| extern void GLAPIENTRY |
| _mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle); |
| |
| extern void GLAPIENTRY |
| _mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask, |
| GLuint dstMod, GLuint arg1, GLuint arg1Rep, |
| GLuint arg1Mod); |
| |
| extern void GLAPIENTRY |
| _mesa_ColorFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMask, |
| GLuint dstMod, GLuint arg1, GLuint arg1Rep, |
| GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, |
| GLuint arg2Mod); |
| |
| extern void GLAPIENTRY |
| _mesa_ColorFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMask, |
| GLuint dstMod, GLuint arg1, GLuint arg1Rep, |
| GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, |
| GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, |
| GLuint arg3Mod); |
| |
| extern void GLAPIENTRY |
| _mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, |
| GLuint arg1Rep, GLuint arg1Mod); |
| |
| extern void GLAPIENTRY |
| _mesa_AlphaFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, |
| GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, |
| GLuint arg2Rep, GLuint arg2Mod); |
| |
| extern void GLAPIENTRY |
| _mesa_AlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, |
| GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, |
| GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, |
| GLuint arg3Rep, GLuint arg3Mod); |
| |
| extern void GLAPIENTRY |
| _mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value); |
| |
| #else /* FEATURE_ATI_fragment_shader */ |
| |
| static inline void |
| _mesa_init_ati_fragment_shader_dispatch(struct _glapi_table *disp) |
| { |
| } |
| |
| static inline struct ati_fragment_shader * |
| _mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id) |
| { |
| return NULL; |
| } |
| |
| static inline void |
| _mesa_delete_ati_fragment_shader(struct gl_context *ctx, |
| struct ati_fragment_shader *s) |
| { |
| } |
| |
| #endif /* FEATURE_ATI_fragment_shader */ |
| |
| #endif /* ATIFRAGSHADER_H */ |