Mesa (master): ilo: PIPE_CAP_QUERY_TIMESTAMP may not be supported

Chia-I Wu olv at kemper.freedesktop.org
Mon Mar 10 08:46:19 UTC 2014


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

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Sun Mar  9 02:00:46 2014 +0800

ilo: PIPE_CAP_QUERY_TIMESTAMP may not be supported

Reading TIMESTAMP register may fail, depending on both kernel and hardware.

---

 src/gallium/drivers/ilo/ilo_common.h            |    1 +
 src/gallium/drivers/ilo/ilo_screen.c            |    4 +++-
 src/gallium/winsys/intel/drm/intel_drm_winsys.c |   11 +++++++++++
 src/gallium/winsys/intel/intel_winsys.h         |    4 ++++
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/ilo/ilo_common.h b/src/gallium/drivers/ilo/ilo_common.h
index 9145d32..cc17f76 100644
--- a/src/gallium/drivers/ilo/ilo_common.h
+++ b/src/gallium/drivers/ilo/ilo_common.h
@@ -71,6 +71,7 @@ struct ilo_dev_info {
    bool has_llc;
    bool has_gen7_sol_reset;
    bool has_address_swizzling;
+   bool has_timestamp;
 
    int gen;
    int gt;
diff --git a/src/gallium/drivers/ilo/ilo_screen.c b/src/gallium/drivers/ilo/ilo_screen.c
index 5d1243d..55bbb3a 100644
--- a/src/gallium/drivers/ilo/ilo_screen.c
+++ b/src/gallium/drivers/ilo/ilo_screen.c
@@ -404,8 +404,9 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
       /* imposed by OWord (Dual) Block Read */
       return 16;
    case PIPE_CAP_START_INSTANCE:
-   case PIPE_CAP_QUERY_TIMESTAMP:
       return true;
+   case PIPE_CAP_QUERY_TIMESTAMP:
+      return is->dev.has_timestamp;
    case PIPE_CAP_TEXTURE_MULTISAMPLE:
       return false; /* TODO */
    case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
@@ -650,6 +651,7 @@ init_dev(struct ilo_dev_info *dev, const struct intel_winsys_info *info)
    dev->has_llc = info->has_llc;
    dev->has_gen7_sol_reset = info->has_gen7_sol_reset;
    dev->has_address_swizzling = info->has_address_swizzling;
+   dev->has_timestamp = info->has_timestamp;
 
    /*
     * From the Sandy Bridge PRM, volume 4 part 2, page 18:
diff --git a/src/gallium/winsys/intel/drm/intel_drm_winsys.c b/src/gallium/winsys/intel/drm/intel_drm_winsys.c
index 12ed2e4..bd805fd 100644
--- a/src/gallium/winsys/intel/drm/intel_drm_winsys.c
+++ b/src/gallium/winsys/intel/drm/intel_drm_winsys.c
@@ -100,6 +100,14 @@ test_address_swizzling(struct intel_winsys *winsys)
 }
 
 static bool
+test_reg_read(struct intel_winsys *winsys, uint32_t reg)
+{
+   uint64_t dummy;
+
+   return !drm_intel_reg_read(winsys->bufmgr, reg, &dummy);
+}
+
+static bool
 init_info(struct intel_winsys *winsys)
 {
    struct intel_winsys_info *info = &winsys->info;
@@ -130,6 +138,9 @@ init_info(struct intel_winsys *winsys)
    get_param(winsys, I915_PARAM_HAS_LLC, &val);
    info->has_llc = val;
 
+   /* test TIMESTAMP read */
+   info->has_timestamp = test_reg_read(winsys, 0x2358);
+
    get_param(winsys, I915_PARAM_HAS_GEN7_SOL_RESET, &val);
    info->has_gen7_sol_reset = val;
 
diff --git a/src/gallium/winsys/intel/intel_winsys.h b/src/gallium/winsys/intel/intel_winsys.h
index e84c960..15f1aec 100644
--- a/src/gallium/winsys/intel/intel_winsys.h
+++ b/src/gallium/winsys/intel/intel_winsys.h
@@ -69,9 +69,13 @@ struct intel_bo;
 
 struct intel_winsys_info {
    int devid;
+
    bool has_llc;
    bool has_gen7_sol_reset;
    bool has_address_swizzling;
+
+   /* valid registers for intel_winsys_read_reg() */
+   bool has_timestamp;
 };
 
 struct intel_winsys *




More information about the mesa-commit mailing list