[Mesa-dev] [PATCH v1 3/4] freedreno/a2xx: Make fd2_program_validate return failure information.
robert.foss at collabora.com
robert.foss at collabora.com
Tue Jun 7 09:33:38 UTC 2016
From: Robert Foss <robert.foss at collabora.com>
Make fd2_program_validate return failure information to avoid de-allocated
memory from being used.
coverity: 1362467
Signed-off-by: Robert Foss <robert.foss at collabora.com>
---
src/gallium/drivers/freedreno/a2xx/fd2_program.c | 12 +++++++++---
src/gallium/drivers/freedreno/a2xx/fd2_program.h | 2 +-
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_program.c b/src/gallium/drivers/freedreno/a2xx/fd2_program.c
index 4f31772..1819c52 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_program.c
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_program.c
@@ -237,7 +237,7 @@ patch_tex_fetches(struct fd_context *ctx, struct fd2_shader_stateobj *so,
}
}
-void
+bool
fd2_program_validate(struct fd_context *ctx)
{
struct fd_program_stateobj *prog = &ctx->prog;
@@ -248,10 +248,14 @@ fd2_program_validate(struct fd_context *ctx)
* need to recompile both vert and frag shader.
*/
if (ctx->dirty & FD_SHADER_DIRTY_FP)
- compile(prog, prog->fp);
+ {
+ if (compile(prog, prog->fp) == NULL)
+ return false;
+ }
if (ctx->dirty & (FD_SHADER_DIRTY_FP | FD_SHADER_DIRTY_VP))
- compile(prog, prog->vp);
+ if (compile(prog, prog->vp) == NULL)
+ return false;
/* if necessary, fix up vertex fetch instructions: */
if (ctx->dirty & (FD_DIRTY_VTXSTATE | FD_DIRTY_PROG))
@@ -262,6 +266,8 @@ fd2_program_validate(struct fd_context *ctx)
patch_tex_fetches(ctx, prog->vp, &ctx->verttex);
patch_tex_fetches(ctx, prog->fp, &ctx->fragtex);
}
+
+ return true;
}
void
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_program.h b/src/gallium/drivers/freedreno/a2xx/fd2_program.h
index 170b22a..935661c 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_program.h
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_program.h
@@ -74,7 +74,7 @@ struct fd2_shader_stateobj {
void fd2_program_emit(struct fd_ringbuffer *ring,
struct fd_program_stateobj *prog);
-void fd2_program_validate(struct fd_context *ctx);
+bool fd2_program_validate(struct fd_context *ctx);
void fd2_prog_init(struct pipe_context *pctx);
--
2.7.4
More information about the mesa-dev
mailing list