Mesa (master): winsys/intel: test for and expose address swizzling

Chia-I Wu olv at kemper.freedesktop.org
Thu May 16 10:35:01 UTC 2013


Module: Mesa
Branch: master
Commit: 5c9b69d259def75f365998603d68d6749209f8b0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c9b69d259def75f365998603d68d6749209f8b0

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Fri May 10 14:23:33 2013 +0800

winsys/intel: test for and expose address swizzling

Without knowing whether addresses are swizzled or not, we cannot manipulate a
tiled surface in CPU.

---

 src/gallium/winsys/intel/drm/intel_drm_winsys.c |   22 ++++++++++++++++++++++
 src/gallium/winsys/intel/drm/intel_winsys.h     |    1 +
 2 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/intel/drm/intel_drm_winsys.c b/src/gallium/winsys/intel/drm/intel_drm_winsys.c
index 8c0e292..1a8d0f7 100644
--- a/src/gallium/winsys/intel/drm/intel_drm_winsys.c
+++ b/src/gallium/winsys/intel/drm/intel_drm_winsys.c
@@ -585,6 +585,26 @@ get_param(struct intel_drm_winsys *drm_ws, int param, int *value)
 }
 
 static bool
+test_address_swizzling(struct intel_drm_winsys *drm_ws)
+{
+   drm_intel_bo *bo;
+   uint32_t tiling = I915_TILING_X, swizzle;
+   unsigned long pitch;
+
+   bo = drm_intel_bo_alloc_tiled(drm_ws->bufmgr,
+         "address swizzling test", 64, 64, 4, &tiling, &pitch, 0);
+   if (bo) {
+      drm_intel_bo_get_tiling(bo, &tiling, &swizzle);
+      drm_intel_bo_unreference(bo);
+   }
+   else {
+      swizzle = I915_BIT_6_SWIZZLE_NONE;
+   }
+
+   return (swizzle != I915_BIT_6_SWIZZLE_NONE);
+}
+
+static bool
 init_info(struct intel_drm_winsys *drm_ws)
 {
    struct intel_winsys_info *info = &drm_ws->info;
@@ -605,6 +625,8 @@ init_info(struct intel_drm_winsys *drm_ws)
    get_param(drm_ws, I915_PARAM_HAS_GEN7_SOL_RESET, &val);
    info->has_gen7_sol_reset = val;
 
+   info->has_address_swizzling = test_address_swizzling(drm_ws);
+
    return true;
 }
 
diff --git a/src/gallium/winsys/intel/drm/intel_winsys.h b/src/gallium/winsys/intel/drm/intel_winsys.h
index 37ee275..90f1b49 100644
--- a/src/gallium/winsys/intel/drm/intel_winsys.h
+++ b/src/gallium/winsys/intel/drm/intel_winsys.h
@@ -74,6 +74,7 @@ struct intel_winsys_info {
    int devid;
    bool has_llc;
    bool has_gen7_sol_reset;
+   bool has_address_swizzling;
 };
 
 /**




More information about the mesa-commit mailing list