misc changes to support vertex shaders (disabled by default)
authorBrian <brian.paul@tungstengraphics.com>
Thu, 16 Aug 2007 23:33:49 +0000 (17:33 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Thu, 16 Aug 2007 23:33:49 +0000 (17:33 -0600)
src/mesa/pipe/softpipe/sp_context.c
src/mesa/state_tracker/st_atom_fs.c
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_draw.c

index 4c0dacd45889e8dd2c840c310c72d19b760aaba2..3f7044825a6148aaf4286f384cfc59afd58ca4a5 100644 (file)
@@ -269,6 +269,7 @@ struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys,
    softpipe->pipe.set_depth_state = softpipe_set_depth_test_state;
    softpipe->pipe.set_framebuffer_state = softpipe_set_framebuffer_state;
    softpipe->pipe.set_fs_state = softpipe_set_fs_state;
+   softpipe->pipe.set_vs_state = softpipe_set_vs_state;
    softpipe->pipe.set_polygon_stipple = softpipe_set_polygon_stipple;
    softpipe->pipe.set_sampler_state = softpipe_set_sampler_state;
    softpipe->pipe.set_scissor_state = softpipe_set_scissor_state;
index 9731ab6ceee388d84b5cd1d5ab29d0a06b2d141f..9dddb18498fd7d3123ae4b3b4c5f1b6a8566d479 100644 (file)
@@ -134,6 +134,9 @@ static void update_vs( struct st_context *st )
    struct st_vertex_program *vp = NULL;
    struct gl_program_parameter_list *params = NULL;
 
+   if (st->ctx->VertexProgram._MaintainTnlProgram)
+      _tnl_UpdateFixedFunctionProgram( st->ctx );
+
    if (st->ctx->Shader.CurrentProgram &&
        st->ctx->Shader.CurrentProgram->LinkStatus &&
        st->ctx->Shader.CurrentProgram->VertexProgram) {
@@ -148,11 +151,15 @@ static void update_vs( struct st_context *st )
    }
 
    /* XXXX temp */
+#if 1
    if (!vp)
       return;
-
+#endif
    if (vp && params) {
       /* load program's constants array */
+
+      _mesa_load_state_parameters(st->ctx, params);
+
       vp->constants.nr_constants = params->NumParameters;
       memcpy(vp->constants.constant, 
              params->ParameterValues,
@@ -179,7 +186,7 @@ static void update_vs( struct st_context *st )
 
 const struct st_tracked_state st_update_vs = {
    .dirty = {
-      .mesa  = _NEW_PROGRAM,
+      .mesa  = _NEW_PROGRAM | _NEW_MODELVIEW,
       .st   = ST_NEW_VERTEX_PROGRAM,
    },
    .update = update_vs
index 2a85ce6baa26a41cc52b47fb70f9063f7e092f5f..35a262ab5b54d81bcc0dc4445f05f0494b32e7ce 100644 (file)
@@ -73,6 +73,9 @@ struct st_context *st_create_context( GLcontext *ctx,
    st->ctx->FragmentProgram._MaintainTexEnvProgram = GL_TRUE;
    st->ctx->FragmentProgram._UseTexEnvProgram = GL_TRUE;
 
+   st->ctx->VertexProgram._MaintainTnlProgram = GL_TRUE;
+
+
 #if 0
    st_init_cb_clear( st );
    st_init_cb_program( st );
index 0b134322560617d6771f3b79e3808cd6679bbb91..d66a0ed851eb82318a2c79e7e5e78dfc8f4eb193 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "tnl/t_context.h"
 #include "tnl/t_pipeline.h"
+#include "tnl/t_vp_build.h"  /* USE_NEW_DRAW */
 
 #include "st_context.h"
 #include "st_atom.h"
@@ -89,6 +90,9 @@ const struct tnl_pipeline_stage st_draw = {
 };
 
 static const struct tnl_pipeline_stage *st_pipeline[] = {
+#if USE_NEW_DRAW
+   &_tnl_vertex_program_stage,
+#else
    &_tnl_vertex_transform_stage,
    &_tnl_vertex_cull_stage,
    &_tnl_normal_transform_stage,
@@ -98,6 +102,7 @@ static const struct tnl_pipeline_stage *st_pipeline[] = {
    &_tnl_texture_transform_stage,
    &_tnl_point_attenuation_stage,
    &_tnl_vertex_program_stage,
+#endif
    &st_draw,     /* ADD: escape to pipe */
    0,
 };
@@ -146,6 +151,9 @@ draw_vbo(GLcontext *ctx,
    struct pipe_context *pipe = ctx->st->pipe;
    GLuint attr, i;
 
+   st_validate_state(ctx->st);
+
+
    /* tell pipe about the vertex array element/attributes */
    for (attr = 0; attr < 16; attr++) {
       struct gl_buffer_object *bufobj = arrays[attr]->BufferObj;
@@ -205,11 +213,12 @@ void st_init_draw( struct st_context *st )
    assert(vbo->draw_prims);
    vbo->draw_prims = draw_vbo;
 
-#else
+#endif
    _tnl_destroy_pipeline( ctx );
    _tnl_install_pipeline( ctx, st_pipeline );
-#endif
 
+   /* USE_NEW_DRAW */
+   _tnl_ProgramCacheInit( ctx );
 }