/*
* 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
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);
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);
STATE_FRAGMENT_PROGRAM,
STATE_ENV,
- STATE_LOCAL
+ STATE_LOCAL,
+
+ STATE_INTERNAL, /* Mesa additions */
+ STATE_NORMAL_SCALE,
+ STATE_POSITION_NORMALIZED
};
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];
};