Home | History | Annotate | Download | only in main
      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