blob: def441e6f7fd123c0e154c96ac3a011b1c6b355f [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;
35 GLuint Swizzle;
36};
37
38#define ATI_FRAGMENT_SHADER_COLOR_OP 0
39#define ATI_FRAGMENT_SHADER_ALPHA_OP 1
40#define ATI_FRAGMENT_SHADER_PASS_OP 2
41#define ATI_FRAGMENT_SHADER_SAMPLE_OP 3
42
Roland Scheideggerf519a772005-09-02 01:11:53 +000043/* two opcodes - one for color/one for alpha */
Dave Airlie7f752fe2004-12-19 03:06:59 +000044/* up to three source registers for most ops */
45struct atifs_instruction
46{
47 GLenum Opcode[2];
48 GLuint ArgCount[2];
49 struct atifragshader_src_register SrcReg[2][3];
50 struct atifragshader_dst_register DstReg[2];
51};
52
Roland Scheideggerf519a772005-09-02 01:11:53 +000053/* different from arithmetic shader instruction */
54struct atifs_setupinst
55{
56 GLenum Opcode;
57 GLuint src;
58 GLenum swizzle;
59};
60
Dave Airlie7f752fe2004-12-19 03:06:59 +000061extern GLuint GLAPIENTRY _mesa_GenFragmentShadersATI(GLuint range);
62
63extern void GLAPIENTRY _mesa_BindFragmentShaderATI(GLuint id);
64
65extern void GLAPIENTRY _mesa_DeleteFragmentShaderATI(GLuint id);
66
67extern void GLAPIENTRY _mesa_BeginFragmentShaderATI(void);
68
69extern void GLAPIENTRY _mesa_EndFragmentShaderATI(void);
70
71extern void GLAPIENTRY
72_mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle);
73
74extern void GLAPIENTRY
75_mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle);
76
77extern void GLAPIENTRY
78_mesa_ColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask,
79 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
80 GLuint arg1Mod);
81
82extern void GLAPIENTRY
83_mesa_ColorFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMask,
84 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
85 GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
86 GLuint arg2Mod);
87
88extern void GLAPIENTRY
89_mesa_ColorFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMask,
90 GLuint dstMod, GLuint arg1, GLuint arg1Rep,
91 GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
92 GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
93 GLuint arg3Mod);
94
95extern void GLAPIENTRY
96_mesa_AlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
97 GLuint arg1Rep, GLuint arg1Mod);
98
99extern void GLAPIENTRY
100_mesa_AlphaFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
101 GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
102 GLuint arg2Rep, GLuint arg2Mod);
103
104extern void GLAPIENTRY
105_mesa_AlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
106 GLuint arg1Rep, GLuint arg1Mod, GLuint arg2,
107 GLuint arg2Rep, GLuint arg2Mod, GLuint arg3,
108 GLuint arg3Rep, GLuint arg3Mod);
109
110extern void GLAPIENTRY
111_mesa_SetFragmentShaderConstantATI(GLuint dst, const GLfloat * value);
112
113#endif