Mesa (master): mesa/st: Allocate the gl_context with 16-byte alignment.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jan 29 23:16:07 UTC 2021
Module: Mesa
Branch: master
Commit: 55e853d823e860dd232a8be0378bd0519e35b6bd
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=55e853d823e860dd232a8be0378bd0519e35b6bd
Author: Eric Anholt <eric at anholt.net>
Date: Fri Jan 29 09:59:34 2021 -0800
mesa/st: Allocate the gl_context with 16-byte alignment.
The _ModelProjectMatrix matrix embedded inside has members inside of it
marked as 16-byte aligned, and so the context also has to be 16-byte
aligned or access to those members would be invalid. I believe the
compiler used this to use better 16-byte-aligned load/stores to other
members of the context, breaking when the context's alignment was only 8
(as normal mallocs guarantee).
Fixes: 3175b63a0dfa ("mesa: don't allocate matrices with malloc")
Tested-by: Rob Clark <robdclark at chromium.org>
Reviewed-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8783>
---
src/mesa/state_tracker/st_context.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index e5ca9de1288..815125afca9 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -1026,12 +1026,14 @@ st_create_context(gl_api api, struct pipe_context *pipe,
if (pipe->set_context_param)
funcs.PinDriverToL3Cache = st_pin_driver_to_l3_cache;
- ctx = calloc(1, sizeof(struct gl_context));
+ /* gl_context must be 16-byte aligned due to the alignment on GLmatrix. */
+ ctx = align_malloc(sizeof(struct gl_context), 16);
if (!ctx)
return NULL;
+ memset(ctx, 0, sizeof(*ctx));
if (!_mesa_initialize_context(ctx, api, visual, shareCtx, &funcs)) {
- free(ctx);
+ align_free(ctx);
return NULL;
}
@@ -1164,7 +1166,7 @@ st_destroy_context(struct st_context *st)
_mesa_destroy_debug_output(ctx);
- free(ctx);
+ align_free(ctx);
if (save_ctx == ctx) {
/* unbind the context we just deleted */
More information about the mesa-commit
mailing list