projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r600: fix warning
[mesa.git]
/
src
/
mesa
/
state_tracker
/
st_cb_program.c
diff --git
a/src/mesa/state_tracker/st_cb_program.c
b/src/mesa/state_tracker/st_cb_program.c
index 3154fc85aa439da5f109b6fea99eb99b89b13e67..4398ab28392cbb190631ef7aa156fa042527b075 100644
(file)
--- a/
src/mesa/state_tracker/st_cb_program.c
+++ b/
src/mesa/state_tracker/st_cb_program.c
@@
-89,13
+89,17
@@
static void st_use_program( GLcontext *ctx,
+/**
+ * Called via ctx->Driver.NewProgram() to allocate a new vertex or
+ * fragment program.
+ */
static struct gl_program *st_new_program( GLcontext *ctx,
static struct gl_program *st_new_program( GLcontext *ctx,
- GLenum target,
+ GLenum target,
GLuint id )
{
switch (target) {
case GL_VERTEX_PROGRAM_ARB: {
GLuint id )
{
switch (target) {
case GL_VERTEX_PROGRAM_ARB: {
- struct st_vertex_program *prog = CALLOC_STRUCT(st_vertex_program);
+ struct st_vertex_program *prog =
ST_
CALLOC_STRUCT(st_vertex_program);
prog->serialNo = SerialNo++;
prog->serialNo = SerialNo++;
@@
-107,7
+111,7
@@
static struct gl_program *st_new_program( GLcontext *ctx,
case GL_FRAGMENT_PROGRAM_ARB:
case GL_FRAGMENT_PROGRAM_NV: {
case GL_FRAGMENT_PROGRAM_ARB:
case GL_FRAGMENT_PROGRAM_NV: {
- struct st_fragment_program *prog = CALLOC_STRUCT(st_fragment_program);
+ struct st_fragment_program *prog =
ST_
CALLOC_STRUCT(st_fragment_program);
prog->serialNo = SerialNo++;
prog->serialNo = SerialNo++;
@@
-118,7
+122,8
@@
static struct gl_program *st_new_program( GLcontext *ctx,
}
default:
}
default:
- return _mesa_new_program(ctx, target, id);
+ assert(0);
+ return NULL;
}
}
}
}
@@
-138,8
+143,16
@@
st_delete_program(GLcontext *ctx, struct gl_program *prog)
stvp->driver_shader = NULL;
}
stvp->driver_shader = NULL;
}
+ if (stvp->draw_shader) {
+#if FEATURE_feedback || FEATURE_drawpix
+ /* this would only have been allocated for the RasterPos path */
+ draw_delete_vertex_shader(st->draw, stvp->draw_shader);
+ stvp->draw_shader = NULL;
+#endif
+ }
+
if (stvp->state.tokens) {
if (stvp->state.tokens) {
-
FREE
((void *) stvp->state.tokens);
+
_mesa_free
((void *) stvp->state.tokens);
stvp->state.tokens = NULL;
}
}
stvp->state.tokens = NULL;
}
}
@@
-154,7
+167,7
@@
st_delete_program(GLcontext *ctx, struct gl_program *prog)
}
if (stfp->state.tokens) {
}
if (stfp->state.tokens) {
-
FREE
((void *) stfp->state.tokens);
+
_mesa_free
((void *) stfp->state.tokens);
stfp->state.tokens = NULL;
}
stfp->state.tokens = NULL;
}
@@
-201,7
+214,7
@@
static void st_program_string_notify( GLcontext *ctx,
}
if (stfp->state.tokens) {
}
if (stfp->state.tokens) {
-
FREE
((void *) stfp->state.tokens);
+
_mesa_free
((void *) stfp->state.tokens);
stfp->state.tokens = NULL;
}
stfp->state.tokens = NULL;
}
@@
-221,12
+234,15
@@
static void st_program_string_notify( GLcontext *ctx,
}
if (stvp->draw_shader) {
}
if (stvp->draw_shader) {
+#if FEATURE_feedback || FEATURE_drawpix
+ /* this would only have been allocated for the RasterPos path */
draw_delete_vertex_shader(st->draw, stvp->draw_shader);
stvp->draw_shader = NULL;
draw_delete_vertex_shader(st->draw, stvp->draw_shader);
stvp->draw_shader = NULL;
+#endif
}
if (stvp->state.tokens) {
}
if (stvp->state.tokens) {
-
FREE
((void *) stvp->state.tokens);
+
_mesa_free
((void *) stvp->state.tokens);
stvp->state.tokens = NULL;
}
stvp->state.tokens = NULL;
}