r300_select_vertex_shader4:
[mesa.git] / src / mesa / drivers / dri / r300 / r300_context.h
index df73cdedc11465d42211091310747599e9b59309..2c8120ef18091cf59f26989987bb6a78dee12f0d 100644 (file)
@@ -592,7 +592,8 @@ struct r300_vertex_shader_state {
        
 extern int hw_tcl_on;
 
-#define CURRENT_VERTEX_SHADER(ctx) (ctx->VertexProgram._Current)
+//#define CURRENT_VERTEX_SHADER(ctx) (ctx->VertexProgram._Current)
+#define CURRENT_VERTEX_SHADER(ctx) (R300_CONTEXT(ctx)->selected_vp)
 
 /* Should but doesnt work */
 //#define CURRENT_VERTEX_SHADER(ctx) (R300_CONTEXT(ctx)->curr_vp)
@@ -607,12 +608,18 @@ extern int hw_tcl_on;
 /* r300_vertex_shader_state and r300_vertex_program should probably be merged together someday.
  * Keeping them them seperate for now should ensure fixed pipeline keeps functioning properly.
  */    
+
+struct r300_vertex_program_key {
+       GLuint InputsRead;
+       GLuint OutputsWritten;
+};
+
 struct r300_vertex_program {
-       struct gl_vertex_program mesa_program; /* Must be first */
+       struct r300_vertex_program *next;
+       struct r300_vertex_program_key key;
        int translated;
        
        struct r300_vertex_shader_fragment program;
-       struct r300_vertex_shader_fragment params;
        
        int pos_end;
        int num_temporaries; /* Number of temp vars used by program */
@@ -623,6 +630,12 @@ struct r300_vertex_program {
        int use_ref_count;
 };
 
+struct r300_vertex_program_cont {
+       struct gl_vertex_program mesa_program; /* Must be first */
+       struct r300_vertex_shader_fragment params;
+       struct r300_vertex_program *progs;
+};
+
 #define PFS_MAX_ALU_INST       64
 #define PFS_MAX_TEX_INST       64
 #define PFS_MAX_TEX_INDIRECT 4
@@ -797,6 +810,7 @@ struct r300_context {
        struct r300_cmdbuf cmdbuf;
        struct r300_state state;
        struct gl_vertex_program *curr_vp;
+       struct r300_vertex_program *selected_vp;
 
        /* Vertex buffers
         */
@@ -854,9 +868,9 @@ extern GLboolean r300CreateContext(const __GLcontextModes * glVisual,
 
 extern int r300_get_num_verts(r300ContextPtr rmesa, int num_verts, int prim);
 
-void r300_translate_vertex_shader(struct r300_vertex_program *vp);
+extern void r300_select_vertex_shader(r300ContextPtr r300);
 extern void r300InitShaderFuncs(struct dd_function_table *functions);
-extern int r300VertexProgUpdateParams(GLcontext *ctx, struct r300_vertex_program *vp, float *dst);
+extern int r300VertexProgUpdateParams(GLcontext *ctx, struct r300_vertex_program_cont *vp, float *dst);
 extern int r300Fallback(GLcontext *ctx);
 
 extern void radeon_vb_to_rvb(r300ContextPtr rmesa, struct radeon_vertex_buffer *rvb, struct vertex_buffer *vb);