+ struct st_vp_variant *variants;
+
+ /** SHA1 hash of linked tgsi shader program, used for on-disk cache */
+ unsigned char sha1[20];
+
+ /* Used by the shader cache and ARB_get_program_binary */
+ unsigned num_tgsi_tokens;
+};
+
+
+
+/** Key shared by all shaders except VP, FP */
+struct st_basic_variant_key
+{
+ struct st_context *st; /**< variants are per-context */
+};
+
+
+/**
+ * Geometry program variant.
+ */
+struct st_basic_variant
+{
+ /* Parameters which generated this variant. */
+ struct st_basic_variant_key key;
+
+ void *driver_shader;
+
+ struct st_basic_variant *next;
+};
+
+
+/**
+ * Derived from Mesa gl_program:
+ */
+struct st_common_program
+{
+ struct gl_program Base;
+ struct pipe_shader_state tgsi;
+ struct glsl_to_tgsi_visitor* glsl_to_tgsi;
+ uint64_t affected_states; /**< ST_NEW_* flags to mark dirty when binding */
+
+ /* used when bypassing glsl_to_tgsi: */
+ struct gl_shader_program *shader_program;
+
+ struct st_basic_variant *variants;
+
+ /** SHA1 hash of linked tgsi shader program, used for on-disk cache */
+ unsigned char sha1[20];
+
+ /* Used by the shader cache and ARB_get_program_binary */
+ unsigned num_tgsi_tokens;
+};
+
+
+/**
+ * Derived from Mesa gl_program:
+ */
+struct st_compute_program
+{
+ struct gl_program Base; /**< The Mesa compute program */
+ struct pipe_compute_state tgsi;
+ struct glsl_to_tgsi_visitor* glsl_to_tgsi;
+ uint64_t affected_states; /**< ST_NEW_* flags to mark dirty when binding */
+
+ /* used when bypassing glsl_to_tgsi: */
+ struct gl_shader_program *shader_program;
+
+ struct st_basic_variant *variants;
+
+ /** SHA1 hash of linked tgsi shader program, used for on-disk cache */
+ unsigned char sha1[20];
+
+ /* Used by the shader cache and ARB_get_program_binary */
+ unsigned num_tgsi_tokens;