msm: kgsl: Add support for the preamble context flag
Userspace will set a flag in the context if preambles are in use. If
they are, we can safely skip save and restore commands for the
context. GMEM save/restore is still required. To improve performance,
preamble commands are skipped when the context hasn't changed since
the last issueibcmds.
Change-Id: I21bb8996d62651122dbebcf7a79543679109e1f9
Signed-off-by: Vijay Krishnamoorthy <adivarah@codeaurora.org>
diff --git a/drivers/gpu/msm/adreno_drawctxt.c b/drivers/gpu/msm/adreno_drawctxt.c
index b7b0ea4..206a678 100644
--- a/drivers/gpu/msm/adreno_drawctxt.c
+++ b/drivers/gpu/msm/adreno_drawctxt.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2002,2007-2011, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2002,2007-2012, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -139,27 +139,19 @@
drawctxt->pagetable = pagetable;
drawctxt->bin_base_offset = 0;
- /* FIXME: Deal with preambles */
+ if (flags & KGSL_CONTEXT_PREAMBLE)
+ drawctxt->flags |= CTXT_FLAGS_PREAMBLE;
- ret = adreno_dev->gpudev->ctxt_gpustate_shadow(adreno_dev, drawctxt);
+ if (flags & KGSL_CONTEXT_NO_GMEM_ALLOC)
+ drawctxt->flags |= CTXT_FLAGS_NOGMEMALLOC;
+
+ ret = adreno_dev->gpudev->ctxt_create(adreno_dev, drawctxt);
if (ret)
goto err;
- /* Save the shader instruction memory on context switching */
- drawctxt->flags |= CTXT_FLAGS_SHADER_SAVE;
-
- if (!(flags & KGSL_CONTEXT_NO_GMEM_ALLOC)) {
- /* create gmem shadow */
- ret = adreno_dev->gpudev->ctxt_gmem_shadow(adreno_dev,
- drawctxt);
- if (ret != 0)
- goto err;
- }
-
context->devctxt = drawctxt;
return 0;
err:
- kgsl_sharedmem_free(&drawctxt->gpustate);
kfree(drawctxt);
return ret;
}