summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem_context.c
diff options
context:
space:
mode:
authorMika Kuoppala2014-05-14 16:02:16 +0200
committerDaniel Vetter2014-05-14 19:16:13 +0200
commit9d0a6fa6c5e618bd978d625a215dc4a240ba3b3c (patch)
tree865a477b6df61c1c79e5154c0c91bfff189e59f7 /drivers/gpu/drm/i915/i915_gem_context.c
parentdrm/i915: Only do gtt cleanup in vma_unbind for the global vma (diff)
downloadkernel-qcow2-linux-9d0a6fa6c5e618bd978d625a215dc4a240ba3b3c.tar.gz
kernel-qcow2-linux-9d0a6fa6c5e618bd978d625a215dc4a240ba3b3c.tar.xz
kernel-qcow2-linux-9d0a6fa6c5e618bd978d625a215dc4a240ba3b3c.zip
drm/i915: add render state initialization
HW guys say that it is not a cool idea to let device go into rc6 without proper 3d pipeline state. For each new uninitialized context, generate a valid null render state to be run on context creation. This patch introduces a skeleton with empty states. v2: - No need to vmap (Chris Wilson) - use .c files for state (Daniel Vetter) - no need to flush as i915_add_request does it - remove parameter for batch alloc size - don't wait for the init (Ben Widawsky) v3: - move to cpu/gpu (Chris Wilson) Tested-by: Kristen Carlson Accardi <kristen@linux.intel.com> (v1) Tested-by: Oscar Mateo <oscar.mateo@intel.com> Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_context.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index f77b4c126465..f7ad59e71b36 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -699,6 +699,12 @@ static int do_switch(struct intel_ring_buffer *ring,
/* obj is kept alive until the next request by its active ref */
i915_gem_object_ggtt_unpin(from->obj);
i915_gem_context_unreference(from);
+ } else {
+ if (to->is_initialized == false) {
+ ret = i915_gem_render_state_init(ring);
+ if (ret)
+ DRM_ERROR("init render state: %d\n", ret);
+ }
}
to->is_initialized = true;