Simple refactor.

Cc: Keith Packard <kei...@keithp.com>
Reviewed-by: Chris Wilson <ch...@chris-wilson.co.uk>
Signed-off-by: Ben Widawsky <b...@bwidawsk.net>
---
 drivers/gpu/drm/i915/i915_gem_execbuffer.c |   82 ++++++++++++++++------------
 1 files changed, 46 insertions(+), 36 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 1589a19..a5c856b 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -954,6 +954,50 @@ i915_gem_execbuffer_retire_commands(struct drm_device *dev,
 }
 
 static int
+i915_gem_set_constant_offset(struct intel_ring_buffer *ring, int mode)
+{
+       struct drm_device *dev = ring->dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       uint32_t mask = I915_EXEC_CONSTANTS_MASK;
+       int ret;
+
+       switch (mode) {
+       case I915_EXEC_CONSTANTS_REL_GENERAL:
+       case I915_EXEC_CONSTANTS_ABSOLUTE:
+       case I915_EXEC_CONSTANTS_REL_SURFACE:
+               if (ring == &dev_priv->ring[RCS] &&
+                   mode != dev_priv->relative_constants_mode) {
+                       if (INTEL_INFO(dev)->gen < 4)
+                               return -EINVAL;
+
+                       if (INTEL_INFO(dev)->gen > 5 &&
+                           mode == I915_EXEC_CONSTANTS_REL_SURFACE)
+                               return -EINVAL;
+
+                       /* The HW changed the meaning on this bit on gen6 */
+                       if (INTEL_INFO(dev)->gen >= 6)
+                               mask &= ~I915_EXEC_CONSTANTS_REL_SURFACE;
+
+                       ret = intel_ring_begin(ring, 4);
+                       if (ret)
+                               return ret;
+
+                       intel_ring_emit(ring, MI_NOOP);
+                       intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
+                       intel_ring_emit(ring, INSTPM);
+                       intel_ring_emit(ring, mask << 16 | mode);
+                       intel_ring_advance(ring);
+
+                       dev_priv->relative_constants_mode = mode;
+               }
+               return 0;
+       default:
+               DRM_ERROR("execbuf with unknown constants: %d\n", mode);
+               return -EINVAL;
+       }
+}
+
+static int
 i915_gem_do_execbuffer(struct drm_device *dev, void *data,
                       struct drm_file *file,
                       struct drm_i915_gem_execbuffer2 *args,
@@ -967,7 +1011,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
        struct intel_ring_buffer *ring;
        u32 exec_start, exec_len;
        u32 seqno;
-       u32 mask;
        int ret, mode, i;
 
        if (!i915_gem_check_execbuffer(args)) {
@@ -1128,42 +1171,9 @@ i915_gem_do_execbuffer(struct drm_device *dev, void 
*data,
        }
 
        mode = args->flags & I915_EXEC_CONSTANTS_MASK;
-       mask = I915_EXEC_CONSTANTS_MASK;
-       switch (mode) {
-       case I915_EXEC_CONSTANTS_REL_GENERAL:
-       case I915_EXEC_CONSTANTS_ABSOLUTE:
-       case I915_EXEC_CONSTANTS_REL_SURFACE:
-               if (ring == &dev_priv->ring[RCS] &&
-                   mode != dev_priv->relative_constants_mode) {
-                       if (INTEL_INFO(dev)->gen < 4)
-                               return -EINVAL;
-
-                       if (INTEL_INFO(dev)->gen > 5 &&
-                           mode == I915_EXEC_CONSTANTS_REL_SURFACE)
-                               return -EINVAL;
-
-                       /* The HW changed the meaning on this bit on gen6 */
-                       if (INTEL_INFO(dev)->gen >= 6)
-                               mask &= ~I915_EXEC_CONSTANTS_REL_SURFACE;
-
-                       ret = intel_ring_begin(ring, 4);
-                       if (ret)
-                               goto err;
-
-                       intel_ring_emit(ring, MI_NOOP);
-                       intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
-                       intel_ring_emit(ring, INSTPM);
-                       intel_ring_emit(ring, mask << 16 | mode);
-                       intel_ring_advance(ring);
-
-                       dev_priv->relative_constants_mode = mode;
-               }
-               break;
-       default:
-               DRM_ERROR("execbuf with unknown constants: %d\n", mode);
-               ret = -EINVAL;
+       ret = i915_gem_set_constant_offset(ring, mode);
+       if (ret)
                goto err;
-       }
 
        trace_i915_gem_ring_dispatch(ring, seqno);
 
-- 
1.7.7

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to