#include "program/program.h"
#include "pipe/p_state.h"
#include "st_context.h"
+#include "st_glsl_to_tgsi.h"
/** Fragment program variant key */
GLuint pixelMaps:1; /**< glDrawPixels w/ pixel lookup map? */
GLuint drawpixels_z:1; /**< glDrawPixels(GL_DEPTH) */
GLuint drawpixels_stencil:1; /**< glDrawPixels(GL_STENCIL) */
+
+ /** for ARB_color_buffer_float */
+ GLuint clamp_color:1;
};
/** Parameters which generated this version of fragment program */
struct st_fp_variant_key key;
+ struct pipe_shader_state tgsi;
+
/** Driver's compiled shader */
void *driver_shader;
struct st_fragment_program
{
struct gl_fragment_program Base;
-
- struct pipe_shader_state tgsi;
+ struct glsl_to_tgsi_visitor* glsl_to_tgsi;
struct st_fp_variant *variants;
};
{
struct st_context *st; /**< variants are per-context */
boolean passthrough_edgeflags;
+
+ /** for ARB_color_buffer_float */
+ boolean clamp_color;
};
struct st_vertex_program
{
struct gl_vertex_program Base; /**< The Mesa vertex program */
+ struct glsl_to_tgsi_visitor* glsl_to_tgsi;
/** maps a Mesa VERT_ATTRIB_x to a packed TGSI input index */
GLuint input_to_index[VERT_ATTRIB_MAX];
struct st_geometry_program
{
struct gl_geometry_program Base; /**< The Mesa geometry program */
+ struct glsl_to_tgsi_visitor* glsl_to_tgsi;
/** map GP input back to VP output */
GLuint input_map[PIPE_MAX_SHADER_INPUTS];
const struct st_gp_variant_key *key);
+extern void
+st_prepare_vertex_program(struct gl_context *ctx,
+ struct st_vertex_program *stvp);
+
+extern GLboolean
+st_prepare_fragment_program(struct gl_context *ctx,
+ struct st_fragment_program *stfp);
+
extern void
st_release_vp_variants( struct st_context *st,