From e3bdd66bf69fb12fa02d161989755944077b280d Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 16 Aug 2007 17:33:49 -0600 Subject: [PATCH] misc changes to support vertex shaders (disabled by default) --- src/mesa/pipe/softpipe/sp_context.c | 1 + src/mesa/state_tracker/st_atom_fs.c | 11 +++++++++-- src/mesa/state_tracker/st_context.c | 3 +++ src/mesa/state_tracker/st_draw.c | 13 +++++++++++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/mesa/pipe/softpipe/sp_context.c b/src/mesa/pipe/softpipe/sp_context.c index 4c0dacd4588..3f7044825a6 100644 --- a/src/mesa/pipe/softpipe/sp_context.c +++ b/src/mesa/pipe/softpipe/sp_context.c @@ -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; diff --git a/src/mesa/state_tracker/st_atom_fs.c b/src/mesa/state_tracker/st_atom_fs.c index 9731ab6ceee..9dddb18498f 100644 --- a/src/mesa/state_tracker/st_atom_fs.c +++ b/src/mesa/state_tracker/st_atom_fs.c @@ -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 diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index 2a85ce6baa2..35a262ab5b5 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -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 ); diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 0b134322560..d66a0ed851e 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -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 ); } -- 2.30.2