Mesa (master): mesa: don't allocate local parameters in fetch_state
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jan 21 22:16:31 UTC 2021
Module: Mesa
Branch: master
Commit: 293526a273304ea6e500270f1f78bd78ad38dc41
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=293526a273304ea6e500270f1f78bd78ad38dc41
Author: Marek Olšák <marek.olsak at amd.com>
Date: Fri Dec 11 21:00:29 2020 -0500
mesa: don't allocate local parameters in fetch_state
It's better to return what the user expects: the initial value.
Reviewed-by: Zoltán Böszörményi <zboszor at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8183>
---
src/mesa/program/prog_statevars.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/src/mesa/program/prog_statevars.c b/src/mesa/program/prog_statevars.c
index b3e596ee788..9094ce13cd3 100644
--- a/src/mesa/program/prog_statevars.c
+++ b/src/mesa/program/prog_statevars.c
@@ -382,17 +382,18 @@ fetch_state(struct gl_context *ctx, const gl_state_index16 state[],
return;
}
case STATE_FRAGMENT_PROGRAM_LOCAL: {
- if (!ctx->FragmentProgram.Current->arb.LocalParams) {
- ctx->FragmentProgram.Current->arb.LocalParams =
- rzalloc_array_size(ctx->FragmentProgram.Current, sizeof(float[4]),
- MAX_PROGRAM_LOCAL_PARAMS);
- if (!ctx->FragmentProgram.Current->arb.LocalParams)
- return;
+ float (*params)[4] = ctx->FragmentProgram.Current->arb.LocalParams;
+ if (unlikely(!params)) {
+ /* Local parameters haven't been allocated yet.
+ * ARB_fragment_program says that local parameters are
+ * "initially set to (0,0,0,0)." Return that.
+ */
+ memset(value, 0, sizeof(float) * 4);
+ return;
}
const int idx = (int) state[1];
- COPY_4V(value,
- ctx->FragmentProgram.Current->arb.LocalParams[idx]);
+ COPY_4V(value, params[idx]);
return;
}
case STATE_VERTEX_PROGRAM_ENV: {
@@ -401,16 +402,18 @@ fetch_state(struct gl_context *ctx, const gl_state_index16 state[],
return;
}
case STATE_VERTEX_PROGRAM_LOCAL: {
- if (!ctx->VertexProgram.Current->arb.LocalParams) {
- ctx->VertexProgram.Current->arb.LocalParams =
- rzalloc_array_size(ctx->VertexProgram.Current, sizeof(float[4]),
- MAX_PROGRAM_LOCAL_PARAMS);
- if (!ctx->VertexProgram.Current->arb.LocalParams)
- return;
+ float (*params)[4] = ctx->VertexProgram.Current->arb.LocalParams;
+ if (unlikely(!params)) {
+ /* Local parameters haven't been allocated yet.
+ * ARB_vertex_program says that local parameters are
+ * "initially set to (0,0,0,0)." Return that.
+ */
+ memset(value, 0, sizeof(float) * 4);
+ return;
}
const int idx = (int) state[1];
- COPY_4V(value, ctx->VertexProgram.Current->arb.LocalParams[idx]);
+ COPY_4V(value, params[idx]);
return;
}
More information about the mesa-commit
mailing list