blob: 9621502ca669895eecef4cdc1840151a397ace03 [file] [log] [blame]
Dave Airlie7f752fe2004-12-19 03:06:59 +00001/*
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#define MAX_NUM_INSTRUCTIONS_PER_PASS_ATI 8
12#define MAX_NUM_PASSES_ATI 2
13#define MAX_NUM_FRAGMENT_REGISTERS_ATI 6
14
15struct ati_fs_opcode_st
16{
17 GLenum opcode;
18 GLint num_src_args;
19};
20
21extern struct ati_fs_opcode_st ati_fs_opcodes[];
22
23struct atifragshader_src_register
24{
25 GLuint Index;
26 GLuint argRep;
27 GLuint argMod;
28};
29
30struct atifragshader_dst_register
31{
32 GLuint Index;
33 GLuint dstMod;
34 GLuint dstMask;
Dave Airlie7f752fe2004-12-19 03:06:59 +000035};
36
37#define ATI_FRAGMENT_SHADER_COLOR_OP 0
38#define ATI_FRAGMENT_SHADER_ALPHA_OP 1
39#define ATI_FRAGMENT_SHADER_PASS_OP 2
40#define ATI_FRAGMENT_SHADER_SAMPLE_OP 3
41
Roland Scheideggerf519a772005-09-02 01:11:53 +000042/* two opcodes - one for color/one for alpha */
Dave Airlie7f752fe2004-12-19 03:06:59 +000043/* up to three source registers for most ops */
44struct atifs_instruction
45{
46 GLenum Opcode[2];
47 GLuint ArgCount[2];
48 struct atifragshader_src_register SrcReg[2][3];
49 struct atifragshader_dst_register DstReg[2];
50};
51
Roland Scheideggerf519a772005-09-02 01:11:53 +000052/* different from arithmetic shader instruction */
53struct atifs_setupinst
54{
55 GLenum Opcode;
56 GLuint src;
57 GLenum swizzle;
58};
59
Dave Airlie7f752fe2004-12-19 03:06:59 +000060extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range);
61
62extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id);
63
64extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id);
65
66extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void);
67
68extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void);
69
70extern void GLAPIENTRY
71_mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle);
72
73extern void GLAPIENTRY
74_mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle);
75
76extern void GLAPIENTRY
77_mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask,
78 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
79 GLuint arg1Mod);
80
81extern void GLAPIENTRY
82_mesa_ColorFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMask,
83 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
84 GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
85 GLuint arg2Mod);
86
87extern void GLAPIENTRY
88_mesa_ColorFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMask,
89 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
90 GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
91 GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
92 GLuint arg3Mod);
93
94extern void GLAPIENTRY
95_mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
96 GLuint arg1Rep, GLuint arg1Mod);
97
98extern void GLAPIENTRY
99_mesa_AlphaFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
100 GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
101 GLuint arg2Rep, GLuint arg2Mod);
102
103extern void GLAPIENTRY
104_mesa_AlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
105 GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
106 GLuint arg2Rep, GLuint arg2Mod, GLuint arg3,
107 GLuint arg3Rep, GLuint arg3Mod);
108
109extern void GLAPIENTRY
110_mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value);
111
112#endif