summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2014-02-06 18:21:58 -0700
committerBrian Paul <[email protected]>2014-02-08 11:27:58 -0700
commit6e8d04ac3e9074bffe25a1ef9e6b198caaa30385 (patch)
tree6a87d17345066d4e42398c21a4a7b7ee8963d3d9 /src/mesa/state_tracker
parent31b2625cb50da6c6ac40ca1c9f2729e846b1e371 (diff)
mesa: allocate gl_debug_state on demand
We don't need to allocate all the state related to GL_ARB_debug_output until some aspect of that extension is actually needed. The sizeof(gl_debug_state) is huge (~285KB on 64-bit systems), not even counting the 54(!) hash tables and lists that it contains. This change reduces the size of gl_context alone from 431KB bytes to 145KB bytes on 64-bit systems and from 277KB bytes to 78KB bytes on 32-bit systems. Reviewed-by: Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_manager.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
index 215b27634f5..6a776a8a236 100644
--- a/src/mesa/state_tracker/st_manager.c
+++ b/src/mesa/state_tracker/st_manager.c
@@ -30,6 +30,7 @@
#include "main/texobj.h"
#include "main/teximage.h"
#include "main/texstate.h"
+#include "main/errors.h"
#include "main/framebuffer.h"
#include "main/fbobject.h"
#include "main/renderbuffer.h"
@@ -626,10 +627,14 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
return NULL;
}
- st->ctx->Debug.DebugOutput = GL_FALSE;
if (attribs->flags & ST_CONTEXT_FLAG_DEBUG){
+ struct gl_debug_state *debug = _mesa_get_debug_state(st->ctx);
+ if (!debug) {
+ *error = ST_CONTEXT_ERROR_NO_MEMORY;
+ return NULL;
+ }
st->ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
- st->ctx->Debug.DebugOutput = GL_TRUE;
+ debug->DebugOutput = GL_TRUE;
}
if (attribs->flags & ST_CONTEXT_FLAG_FORWARD_COMPATIBLE)