From 199c02ba28e78cafb22495476a2c30e0944b5c0c Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 13 Jan 2012 13:46:16 -0800 Subject: context support! not tested at all! woooooooooo! modified by bwidawsk for updated interface Signed-off-by: Ben Widawsky --- src/mesa/drivers/dri/i965/brw_context.c | 4 ++++ src/mesa/drivers/dri/i965/brw_vtbl.c | 5 ++++- src/mesa/drivers/dri/intel/intel_batchbuffer.c | 12 +++++++++--- src/mesa/drivers/dri/intel/intel_context.c | 2 ++ src/mesa/drivers/dri/intel/intel_context.h | 2 ++ 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 65de260fdd..c41998ed64 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -295,6 +295,10 @@ brwCreateContext(int api, brw->has_negative_rhw_bug = true; } + assert(intel->bufmgr); + intel->hw_ctx = drm_intel_gem_context_create(intel->bufmgr); + assert(intel->hw_ctx); // KAYDEN: for now, just to verify it works + brw_init_state( brw ); brw->curbe.last_buf = calloc(1, 4096); diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c index 5e7345648d..0ef9fc3a6a 100644 --- a/src/mesa/drivers/dri/i965/brw_vtbl.c +++ b/src/mesa/drivers/dri/i965/brw_vtbl.c @@ -170,7 +170,10 @@ static void brw_new_batch( struct intel_context *intel ) * This is probably not as severe as on 915, since almost all of our state * is just in referenced buffers. */ - brw->state.dirty.brw |= BRW_NEW_CONTEXT | BRW_NEW_BATCH; + if (intel->hw_ctx == NULL) + brw->state.dirty.brw |= BRW_NEW_CONTEXT; + + brw->state.dirty.brw |= BRW_NEW_BATCH; /* Assume that the last command before the start of our batch was a * primitive, for safety. diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.c b/src/mesa/drivers/dri/intel/intel_batchbuffer.c index d10e00867e..1cbcfb6b0e 100644 --- a/src/mesa/drivers/dri/intel/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.c @@ -185,9 +185,15 @@ do_flush_locked(struct intel_context *intel) if (batch->needs_sol_reset) flags |= I915_EXEC_GEN7_SOL_RESET; - if (ret == 0) - ret = drm_intel_bo_mrb_exec(batch->bo, 4*batch->used, NULL, 0, 0, - flags); + if (ret == 0) { + if (intel->hw_ctx == NULL) { + ret = drm_intel_bo_mrb_exec(batch->bo, 4*batch->used, NULL, 0, 0, + flags); + } else { + ret = drm_intel_gem_bo_context_exec(batch->bo, intel->hw_ctx, + 4 * batch->used, flags); + } + } } if (unlikely(INTEL_DEBUG & DEBUG_BATCH)) diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 7b2bdadc9d..004d430e10 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -582,6 +582,8 @@ intelInitContext(struct intel_context *intel, if (intelScreen->bufmgr == NULL) return false; + intel->hw_ctx = NULL; + /* Can't rely on invalidate events, fall back to glViewport hack */ if (!driContextPriv->driScreenPriv->dri2.useInvalidate) { intel->saved_viewport = functions->Viewport; diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h index ef024b10e9..7d5ae6e297 100644 --- a/src/mesa/drivers/dri/intel/intel_context.h +++ b/src/mesa/drivers/dri/intel/intel_context.h @@ -218,6 +218,8 @@ struct intel_context int urb_size; + drm_intel_context *hw_ctx; + struct intel_batchbuffer { /** Current batchbuffer being queued up. */ drm_intel_bo *bo; -- cgit v1.2.3