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 "glheader.h"
12
13
14struct gl_context;
15
16#define MAX_NUM_INSTRUCTIONS_PER_PASS_ATI 8
17#define MAX_NUM_PASSES_ATI                2
18#define MAX_NUM_FRAGMENT_REGISTERS_ATI    6
19#define MAX_NUM_FRAGMENT_CONSTANTS_ATI    8
20
21struct ati_fs_opcode_st
22{
23   GLenum opcode;
24   GLint num_src_args;
25};
26
27struct atifragshader_src_register
28{
29   GLuint Index;
30   GLuint argRep;
31   GLuint argMod;
32};
33
34struct atifragshader_dst_register
35{
36   GLuint Index;
37   GLuint dstMod;
38   GLuint dstMask;
39};
40
41#define ATI_FRAGMENT_SHADER_COLOR_OP 0
42#define ATI_FRAGMENT_SHADER_ALPHA_OP 1
43#define ATI_FRAGMENT_SHADER_PASS_OP  2
44#define ATI_FRAGMENT_SHADER_SAMPLE_OP 3
45
46/* two opcodes - one for color/one for alpha */
47/* up to three source registers for most ops */
48struct atifs_instruction
49{
50   GLenum Opcode[2];
51   GLuint ArgCount[2];
52   struct atifragshader_src_register SrcReg[2][3];
53   struct atifragshader_dst_register DstReg[2];
54};
55
56/* different from arithmetic shader instruction */
57struct atifs_setupinst
58{
59   GLenum Opcode;
60   GLuint src;
61   GLenum swizzle;
62};
63
64
65extern struct ati_fragment_shader *
66_mesa_new_ati_fragment_shader(struct gl_context *ctx, GLuint id);
67
68extern void
69_mesa_delete_ati_fragment_shader(struct gl_context *ctx,
70                                 struct ati_fragment_shader *s);
71
72#endif /* ATIFRAGSHADER_H */
73