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;
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) {
}
/* 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,
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
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 );
#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"
};
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,
&_tnl_texture_transform_stage,
&_tnl_point_attenuation_stage,
&_tnl_vertex_program_stage,
+#endif
&st_draw, /* ADD: escape to pipe */
0,
};
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;
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 );
}