summaryrefslogtreecommitdiff
path: root/src/intel_batchbuffer.c
diff options
context:
space:
mode:
authorroot <root@xiaowei-hsw.(none)>2012-10-18 09:51:49 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2012-10-29 12:39:34 +0800
commit8e9991edb66b1ace51615c6f6ea13c39ea2313a3 (patch)
tree99bae4ff482f4b2c9dc7a62f7f9f9479bb05f16e /src/intel_batchbuffer.c
parentf033e72cc4a4e3ae2e84fa80be7b311f75f2c542 (diff)
downloadlibva-intel-driver-8e9991edb66b1ace51615c6f6ea13c39ea2313a3.tar.gz
Add special macro and command for vebox batch buffer execution.
Signed-off-by Li,Xiaowei <xiaowei.a.li@intel.com>
Diffstat (limited to 'src/intel_batchbuffer.c')
-rw-r--r--src/intel_batchbuffer.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c
index 14c94529..6ae1a352 100644
--- a/src/intel_batchbuffer.c
+++ b/src/intel_batchbuffer.c
@@ -39,7 +39,8 @@ intel_batchbuffer_reset(struct intel_batchbuffer *batch)
assert(batch->flag == I915_EXEC_RENDER ||
batch->flag == I915_EXEC_BLT ||
- batch->flag == I915_EXEC_BSD);
+ batch->flag == I915_EXEC_BSD ||
+ batch->flag == I915_EXEC_VEBOX);
dri_bo_unreference(batch->buffer);
batch->buffer = dri_bo_alloc(intel->bufmgr,
@@ -68,7 +69,8 @@ intel_batchbuffer_new(struct intel_driver_data *intel, int flag)
struct intel_batchbuffer *batch = calloc(1, sizeof(*batch));
assert(flag == I915_EXEC_RENDER ||
flag == I915_EXEC_BSD ||
- flag == I915_EXEC_BLT);
+ flag == I915_EXEC_BLT ||
+ flag == I915_EXEC_VEBOX);
batch->intel = intel;
batch->flag = flag;
@@ -188,6 +190,13 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch)
OUT_BLT_BATCH(batch, 0);
OUT_BLT_BATCH(batch, 0);
ADVANCE_BLT_BATCH(batch);
+ }else if (batch->flag == I915_EXEC_VEBOX) {
+ BEGIN_VEB_BATCH(batch, 4);
+ OUT_VEB_BATCH(batch, MI_FLUSH_DW);
+ OUT_VEB_BATCH(batch, 0);
+ OUT_VEB_BATCH(batch, 0);
+ OUT_VEB_BATCH(batch, 0);
+ ADVANCE_VEB_BATCH(batch);
} else {
assert(batch->flag == I915_EXEC_BSD);
BEGIN_BCS_BATCH(batch, 4);
@@ -202,8 +211,8 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch)
if (batch->flag == I915_EXEC_RENDER) {
BEGIN_BATCH(batch, 1);
OUT_BATCH(batch, MI_FLUSH | MI_FLUSH_STATE_INSTRUCTION_CACHE_INVALIDATE);
- ADVANCE_BATCH(batch);
- } else {
+ ADVANCE_BATCH(batch);
+ } else {
assert(batch->flag == I915_EXEC_BSD);
BEGIN_BCS_BATCH(batch, 1);
OUT_BCS_BATCH(batch, MI_FLUSH | MI_FLUSH_STATE_INSTRUCTION_CACHE_INVALIDATE);
@@ -230,7 +239,8 @@ intel_batchbuffer_check_batchbuffer_flag(struct intel_batchbuffer *batch, int fl
{
if (flag != I915_EXEC_RENDER &&
flag != I915_EXEC_BLT &&
- flag != I915_EXEC_BSD)
+ flag != I915_EXEC_BSD &&
+ flag != I915_EXEC_VEBOX)
return;
if (batch->flag == flag)
@@ -276,6 +286,13 @@ intel_batchbuffer_start_atomic_bcs(struct intel_batchbuffer *batch, unsigned int
}
void
+intel_batchbuffer_start_atomic_veb(struct intel_batchbuffer *batch, unsigned int size)
+{
+ intel_batchbuffer_start_atomic_helper(batch, I915_EXEC_VEBOX, size);
+}
+
+
+void
intel_batchbuffer_end_atomic(struct intel_batchbuffer *batch)
{
assert(batch->atomic);