drm/i915: Add I915_GEM_PARAM_HAS_SEMAPHORES
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 8 Aug 2012 09:23:22 +0000 (10:23 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 8 Aug 2012 12:29:12 +0000 (14:29 +0200)
Userspace tries to estimate the cost of ring switching based on whether
the GPU and GEM supports semaphores. (If we have multiple rings and no
semaphores, userspace assumes that the cost of switching rings between
batches is exorbitant and will endeavour to keep the next batch on the
active ring - as a coarse approximation to tracking both destination and
source surfaces.) Currently userspace has to guess whether semaphores
exist based on the chipset generation and the module parameter,
i915.semaphores. This is a crude and inaccurate guess as the defaults
internally depend upon other chipset features being enabled or disabled,
nor does it extend well into the future. By exporting a HAS_SEMAPHORES
parameter, we can easily query the driver and obtain an accurate answer.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_dma.c
include/drm/i915_drm.h

index 71672cee00f76572009b78896d0aee6109dff85e..d57ea167213433ef0ecd5bbb90689dac31d63574 100644 (file)
@@ -1009,6 +1009,9 @@ static int i915_getparam(struct drm_device *dev, void *data,
        case I915_PARAM_HAS_WAIT_TIMEOUT:
                value = 1;
                break;
+       case I915_PARAM_HAS_SEMAPHORES:
+               value = i915_semaphore_is_enabled(dev);
+               break;
        default:
                DRM_DEBUG_DRIVER("Unknown parameter %d\n",
                                 param->param);
index 772b0d638912ce419c77d0d4cfea641b925a20f2..d8a79bf59ae74c17f6e6c796da3c110247fa63fc 100644 (file)
@@ -311,6 +311,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_SEMAPHORES       20
 
 typedef struct drm_i915_getparam {
        int param;