intel: Add support for VEBOX ring (v2)
authorXiang, Haihao <haihao.xiang@intel.com>
Wed, 14 Nov 2012 04:46:39 +0000 (12:46 +0800)
committerBen Widawsky <ben@bwidawsk.net>
Sat, 27 Apr 2013 18:31:22 +0000 (11:31 -0700)
v2: Fix the test for has_vebox

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
include/drm/i915_drm.h
intel/intel_bufmgr_gem.c

index 7e9e9bd..aa983f3 100644 (file)
@@ -303,6 +303,7 @@ typedef struct drm_i915_irq_wait {
 #define I915_PARAM_HAS_LLC                      17
 #define I915_PARAM_HAS_ALIASING_PPGTT   18
 #define I915_PARAM_HAS_WAIT_TIMEOUT     19
+#define I915_PARAM_HAS_VEBOX            22
 
 typedef struct drm_i915_getparam {
        int param;
@@ -649,6 +650,7 @@ struct drm_i915_gem_execbuffer2 {
 #define I915_EXEC_RENDER                 (1<<0)
 #define I915_EXEC_BSD                    (2<<0)
 #define I915_EXEC_BLT                    (3<<0)
+#define I915_EXEC_VEBOX                  (4<<0)
 
 /* Used for switching the constants addressing mode on gen4+ RENDER ring.
  * Gen6+ only supports relative addressing to dynamic state (default) and
index d21547e..3c73068 100644 (file)
@@ -125,6 +125,7 @@ typedef struct _drm_intel_bufmgr_gem {
        unsigned int has_wait_timeout : 1;
        unsigned int bo_reuse : 1;
        unsigned int no_exec : 1;
+       unsigned int has_vebox : 1;
        bool fenced_relocs;
 
        FILE *aub_file;
@@ -2213,6 +2214,10 @@ do_exec2(drm_intel_bo *bo, int used, drm_intel_context *ctx,
                if (!bufmgr_gem->has_bsd)
                        return -EINVAL;
                break;
+       case I915_EXEC_VEBOX:
+               if (!bufmgr_gem->has_vebox)
+                       return -EINVAL;
+               break;
        case I915_EXEC_RENDER:
        case I915_EXEC_DEFAULT:
                break;
@@ -3126,6 +3131,10 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
        } else
                bufmgr_gem->has_llc = *gp.value;
 
+       gp.param = I915_PARAM_HAS_VEBOX;
+       ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
+       bufmgr_gem->has_vebox = (ret == 0) & (*gp.value > 0);
+
        if (bufmgr_gem->gen < 4) {
                gp.param = I915_PARAM_NUM_FENCES_AVAIL;
                gp.value = &bufmgr_gem->available_fences;