Set fp->Opcode for OP_TEX_KILL case, fix from Ben Skeggs.
[mesa.git] / src / mesa / shader / program.h
index f71b46f1f70aeefbe131369f71a4a29c2b2d90eb..87590ceea9a05486e763d8df3d5bb3265f6b6c5e 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  5.1
+ * Version:  6.3
  *
- * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  */
 
 
+/**
+ * \mainpage Mesa vertex and fragment program module
+ *
+ * This module or directory contains most of the code for vertex and
+ * fragment programs and shaders, including state management, parsers,
+ * and (some) software routines for executing programs
+ */
+
 #ifndef PROGRAM_H
 #define PROGRAM_H
 
 #define SWIZZLE_ZERO 4         /* keep these values together: KW */
 #define SWIZZLE_ONE  5         /* keep these values together: KW */
 
+#define MAKE_SWIZZLE4(a,b,c,d) (((a)<<0) | ((b)<<3) | ((c)<<6) | ((d)<<9))
+#define MAKE_SWIZZLE(x)        MAKE_SWIZZLE4((x)[0], (x)[1], (x)[2], (x)[3])
+#define SWIZZLE_NOOP           MAKE_SWIZZLE4(0,1,2,3)
+#define GET_SWZ(swz, idx)      (((swz) >> ((idx)*3)) & 0x7)
+#define GET_BIT(msk, idx)      (((msk) >> (idx)) & 0x1)
+
+
+#define WRITEMASK_X     0x1
+#define WRITEMASK_Y     0x2
+#define WRITEMASK_XY    0x3
+#define WRITEMASK_Z     0x4
+#define WRITEMASK_XZ    0x5
+#define WRITEMASK_YZ    0x6
+#define WRITEMASK_XYZ   0x7
+#define WRITEMASK_W     0x8
+#define WRITEMASK_XW    0x9
+#define WRITEMASK_YW    0xa
+#define WRITEMASK_XYW   0xb
+#define WRITEMASK_ZW    0xc
+#define WRITEMASK_XZW   0xd
+#define WRITEMASK_YZW   0xe
+#define WRITEMASK_XYZW  0xf
+
+
+extern struct program _mesa_DummyProgram;
+
 
 /*
  * Internal functions
@@ -51,6 +85,9 @@
 extern void
 _mesa_init_program(GLcontext *ctx);
 
+extern void
+_mesa_free_program_data(GLcontext *ctx);
+
 extern void
 _mesa_set_program_error(GLcontext *ctx, GLint pos, const char *string);
 
@@ -60,16 +97,19 @@ _mesa_find_line_column(const GLubyte *string, const GLubyte *pos,
 
 
 extern struct program * 
-_mesa_init_vertex_program( GLcontext *ctx, 
-                          struct vertex_program *prog, 
-                          GLenum target,
-                          GLuint id );
+_mesa_init_vertex_program(GLcontext *ctx, 
+                          struct vertex_program *prog, 
+                          GLenum target, GLuint id);
 
 extern struct program * 
-_mesa_init_fragment_program( GLcontext *ctx, 
-                            struct fragment_program *prog,
-                            GLenum target, 
-                            GLuint id );
+_mesa_init_fragment_program(GLcontext *ctx, 
+                            struct fragment_program *prog,
+                            GLenum target, GLuint id);
+
+extern struct program *
+_mesa_init_ati_fragment_shader(GLcontext *ctx,
+                               struct ati_fragment_shader *prog,
+                               GLenum target, GLuint id );
 
 extern struct program *
 _mesa_new_program(GLcontext *ctx, GLenum target, GLuint id);
@@ -141,7 +181,11 @@ enum state_index {
    STATE_FRAGMENT_PROGRAM,
 
    STATE_ENV,
-   STATE_LOCAL
+   STATE_LOCAL,
+
+   STATE_INTERNAL,             /* Mesa additions */
+   STATE_NORMAL_SCALE,
+   STATE_POSITION_NORMALIZED
 };
 
 
@@ -166,14 +210,15 @@ struct program_parameter
    const char *Name;                   /* Null-terminated */
    enum parameter_type Type;
    enum state_index StateIndexes[6];   /* Global state reference */
-   GLfloat Values[4];
 };
 
 
 struct program_parameter_list
 {
+   GLuint Size;
    GLuint NumParameters;
    struct program_parameter *Parameters;
+   GLfloat (*ParameterValues)[4];
 };