* [PATCH 1/2] Add driver callback for updating device info
@ 2015-03-02 23:42 jeff.mcgee
2015-03-02 23:42 ` [PATCH 2/2] Query the driver directly for compute units and subslice jeff.mcgee
2015-03-09 0:21 ` [Beignet] [PATCH 1/2] Add driver callback for updating device info Zhigang Gong
0 siblings, 2 replies; 6+ messages in thread
From: jeff.mcgee @ 2015-03-02 23:42 UTC (permalink / raw)
To: beignet; +Cc: intel-gfx, dri-devel
From: Jeff McGee <jeff.mcgee@intel.com>
We need to update some fields of the device's cl_device_id
struct at runtime using driver-specific methods. It is best to
group all such updates into a single driver callback to avoid
opening/initing and deiniting/closing the device multiple times.
Signed-off-by: Jeff McGee <jeff.mcgee@intel.com>
---
src/cl_device_id.c | 20 ++------------------
src/cl_driver.h | 4 ++++
src/cl_driver_defs.c | 1 +
src/intel/intel_driver.c | 36 ++++++++++++++++++++++++++++++++++++
4 files changed, 43 insertions(+), 18 deletions(-)
diff --git a/src/cl_device_id.c b/src/cl_device_id.c
index 4e01c9f..fefcef3 100644
--- a/src/cl_device_id.c
+++ b/src/cl_device_id.c
@@ -506,24 +506,8 @@ skl_gt4_break:
ret->profile_sz = strlen(ret->profile) + 1;
}
-#ifdef HAS_USERPTR
- cl_driver dummy = cl_driver_new(NULL);
- cl_buffer_mgr bufmgr = cl_driver_get_bufmgr(dummy);
-
- const size_t sz = 4096;
- void* host_ptr = cl_aligned_malloc(sz, 4096);;
- if (host_ptr != NULL) {
- cl_buffer bo = cl_buffer_alloc_userptr(bufmgr, "CL memory object", host_ptr, sz, 0);
- if (bo == NULL)
- ret->host_unified_memory = CL_FALSE;
- else
- cl_buffer_unreference(bo);
- cl_free(host_ptr);
- }
- else
- ret->host_unified_memory = CL_FALSE;
- cl_driver_delete(dummy);
-#endif
+ /* Apply any driver-dependent updates to the device info */
+ cl_driver_update_device_info(ret);
struct sysinfo info;
if (sysinfo(&info) == 0) {
diff --git a/src/cl_driver.h b/src/cl_driver.h
index 16f8bba..3f54a27 100644
--- a/src/cl_driver.h
+++ b/src/cl_driver.h
@@ -376,6 +376,10 @@ extern cl_buffer_get_tiling_align_cb *cl_buffer_get_tiling_align;
typedef int (cl_driver_get_device_id_cb)(void);
extern cl_driver_get_device_id_cb *cl_driver_get_device_id;
+/* Update the device info */
+typedef void (cl_driver_update_device_info_cb)(cl_device_id device);
+extern cl_driver_update_device_info_cb *cl_driver_update_device_info;
+
/**************************************************************************
* cl_khr_gl_sharing.
**************************************************************************/
diff --git a/src/cl_driver_defs.c b/src/cl_driver_defs.c
index 2b68539..9a47210 100644
--- a/src/cl_driver_defs.c
+++ b/src/cl_driver_defs.c
@@ -26,6 +26,7 @@ LOCAL cl_driver_delete_cb *cl_driver_delete = NULL;
LOCAL cl_driver_get_bufmgr_cb *cl_driver_get_bufmgr = NULL;
LOCAL cl_driver_get_ver_cb *cl_driver_get_ver = NULL;
LOCAL cl_driver_get_device_id_cb *cl_driver_get_device_id = NULL;
+LOCAL cl_driver_update_device_info_cb *cl_driver_update_device_info = NULL;
/* Buffer */
LOCAL cl_buffer_alloc_cb *cl_buffer_alloc = NULL;
diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
index ff0cf27..d61988c 100644
--- a/src/intel/intel_driver.c
+++ b/src/intel/intel_driver.c
@@ -754,6 +754,41 @@ static int intel_buffer_set_tiling(cl_buffer bo,
return ret;
}
+static void
+intel_update_device_info(cl_device_id device)
+{
+#ifdef HAS_USERPTR
+ intel_driver_t *driver;
+ const size_t sz = 4096;
+ void *host_ptr;
+
+ driver = intel_driver_new();
+ assert(driver != NULL);
+ if (intel_driver_open(driver, NULL) != CL_SUCCESS) {
+ intel_driver_delete(driver);
+ return;
+ }
+
+ host_ptr = cl_aligned_malloc(sz, 4096);
+ if (host_ptr != NULL) {
+ cl_buffer bo = intel_buffer_alloc_userptr((cl_buffer_mgr)driver->bufmgr,
+ "CL memory object", host_ptr, sz, 0);
+ if (bo == NULL)
+ device->host_unified_memory = CL_FALSE;
+ else
+ drm_intel_bo_unreference((drm_intel_bo*)bo);
+ cl_free(host_ptr);
+ }
+ else
+ device->host_unified_memory = CL_FALSE;
+
+ intel_driver_context_destroy(driver);
+ intel_driver_close(driver);
+ intel_driver_terminate(driver);
+ intel_driver_delete(driver);
+#endif
+}
+
LOCAL void
intel_setup_callbacks(void)
{
@@ -762,6 +797,7 @@ intel_setup_callbacks(void)
cl_driver_get_ver = (cl_driver_get_ver_cb *) intel_driver_get_ver;
cl_driver_get_bufmgr = (cl_driver_get_bufmgr_cb *) intel_driver_get_bufmgr;
cl_driver_get_device_id = (cl_driver_get_device_id_cb *) intel_get_device_id;
+ cl_driver_update_device_info = (cl_driver_update_device_info_cb *) intel_update_device_info;
cl_buffer_alloc = (cl_buffer_alloc_cb *) drm_intel_bo_alloc;
cl_buffer_alloc_userptr = (cl_buffer_alloc_userptr_cb*) intel_buffer_alloc_userptr;
cl_buffer_set_tiling = (cl_buffer_set_tiling_cb *) intel_buffer_set_tiling;
--
2.3.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] Query the driver directly for compute units and subslice
2015-03-02 23:42 [PATCH 1/2] Add driver callback for updating device info jeff.mcgee
@ 2015-03-02 23:42 ` jeff.mcgee
2015-03-09 23:35 ` [PATCH 2/2 v2] " jeff.mcgee
2015-03-09 0:21 ` [Beignet] [PATCH 1/2] Add driver callback for updating device info Zhigang Gong
1 sibling, 1 reply; 6+ messages in thread
From: jeff.mcgee @ 2015-03-02 23:42 UTC (permalink / raw)
To: beignet; +Cc: intel-gfx, dri-devel
From: Jeff McGee <jeff.mcgee@intel.com>
Values of device max compute units and max subslice obtained
directly from the driver should be more accurate than our own
ID-based lookup values. This is particularly important when a
single device ID may encompass more than one configuration. If
the driver cannot provide a valid value for the given device,
we fallback on the ID-based lookup value.
Signed-off-by: Jeff McGee <jeff.mcgee@intel.com>
---
src/intel/intel_driver.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
index d61988c..d99fea9 100644
--- a/src/intel/intel_driver.c
+++ b/src/intel/intel_driver.c
@@ -757,10 +757,8 @@ static int intel_buffer_set_tiling(cl_buffer bo,
static void
intel_update_device_info(cl_device_id device)
{
-#ifdef HAS_USERPTR
intel_driver_t *driver;
- const size_t sz = 4096;
- void *host_ptr;
+ unsigned int eu_total, subslice_total;
driver = intel_driver_new();
assert(driver != NULL);
@@ -769,6 +767,10 @@ intel_update_device_info(cl_device_id device)
return;
}
+#ifdef HAS_USERPTR
+ const size_t sz = 4096;
+ void *host_ptr;
+
host_ptr = cl_aligned_malloc(sz, 4096);
if (host_ptr != NULL) {
cl_buffer bo = intel_buffer_alloc_userptr((cl_buffer_mgr)driver->bufmgr,
@@ -781,12 +783,18 @@ intel_update_device_info(cl_device_id device)
}
else
device->host_unified_memory = CL_FALSE;
+#endif
+
+ /* Prefer driver-queried value if supported */
+ if (!drm_intel_get_eu_total(driver->fd, &eu_total))
+ device->max_compute_unit = eu_total;
+ if (!drm_intel_get_subslice_total(driver->fd, &subslice_total))
+ device->sub_slice_count = subslice_total;
intel_driver_context_destroy(driver);
intel_driver_close(driver);
intel_driver_terminate(driver);
intel_driver_delete(driver);
-#endif
}
LOCAL void
--
2.3.0
_______________________________________________
Beignet mailing list
Beignet@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/beignet
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Beignet] [PATCH 1/2] Add driver callback for updating device info
2015-03-02 23:42 [PATCH 1/2] Add driver callback for updating device info jeff.mcgee
2015-03-02 23:42 ` [PATCH 2/2] Query the driver directly for compute units and subslice jeff.mcgee
@ 2015-03-09 0:21 ` Zhigang Gong
1 sibling, 0 replies; 6+ messages in thread
From: Zhigang Gong @ 2015-03-09 0:21 UTC (permalink / raw)
To: jeff.mcgee, beignet; +Cc: intel-gfx, dri-devel
This patchset is a must for beignet to support CHV. One comment is that we should
put the usage of these new libdrm APIs to conditional block thus we don't break the
build on old system.
For the other parts of the patchset:
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Thanks,
Zhigang Gong.
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces@lists.freedesktop.org] On Behalf Of
> jeff.mcgee@intel.com
> Sent: Tuesday, March 3, 2015 7:43 AM
> To: beignet@lists.freedesktop.org
> Cc: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org
> Subject: [Beignet] [PATCH 1/2] Add driver callback for updating device info
>
> From: Jeff McGee <jeff.mcgee@intel.com>
>
> We need to update some fields of the device's cl_device_id struct at runtime
> using driver-specific methods. It is best to group all such updates into a single
> driver callback to avoid opening/initing and deiniting/closing the device multiple
> times.
>
> Signed-off-by: Jeff McGee <jeff.mcgee@intel.com>
> ---
> src/cl_device_id.c | 20 ++------------------
> src/cl_driver.h | 4 ++++
> src/cl_driver_defs.c | 1 +
> src/intel/intel_driver.c | 36 ++++++++++++++++++++++++++++++++++++
> 4 files changed, 43 insertions(+), 18 deletions(-)
>
> diff --git a/src/cl_device_id.c b/src/cl_device_id.c index 4e01c9f..fefcef3 100644
> --- a/src/cl_device_id.c
> +++ b/src/cl_device_id.c
> @@ -506,24 +506,8 @@ skl_gt4_break:
> ret->profile_sz = strlen(ret->profile) + 1;
> }
>
> -#ifdef HAS_USERPTR
> - cl_driver dummy = cl_driver_new(NULL);
> - cl_buffer_mgr bufmgr = cl_driver_get_bufmgr(dummy);
> -
> - const size_t sz = 4096;
> - void* host_ptr = cl_aligned_malloc(sz, 4096);;
> - if (host_ptr != NULL) {
> - cl_buffer bo = cl_buffer_alloc_userptr(bufmgr, "CL memory object",
> host_ptr, sz, 0);
> - if (bo == NULL)
> - ret->host_unified_memory = CL_FALSE;
> - else
> - cl_buffer_unreference(bo);
> - cl_free(host_ptr);
> - }
> - else
> - ret->host_unified_memory = CL_FALSE;
> - cl_driver_delete(dummy);
> -#endif
> + /* Apply any driver-dependent updates to the device info */
> + cl_driver_update_device_info(ret);
>
> struct sysinfo info;
> if (sysinfo(&info) == 0) {
> diff --git a/src/cl_driver.h b/src/cl_driver.h index 16f8bba..3f54a27 100644
> --- a/src/cl_driver.h
> +++ b/src/cl_driver.h
> @@ -376,6 +376,10 @@ extern cl_buffer_get_tiling_align_cb
> *cl_buffer_get_tiling_align; typedef int (cl_driver_get_device_id_cb)(void);
> extern cl_driver_get_device_id_cb *cl_driver_get_device_id;
>
> +/* Update the device info */
> +typedef void (cl_driver_update_device_info_cb)(cl_device_id device);
> +extern cl_driver_update_device_info_cb *cl_driver_update_device_info;
> +
>
> /***************************************************************
> ***********
> * cl_khr_gl_sharing.
>
> ****************************************************************
> **********/
> diff --git a/src/cl_driver_defs.c b/src/cl_driver_defs.c index 2b68539..9a47210
> 100644
> --- a/src/cl_driver_defs.c
> +++ b/src/cl_driver_defs.c
> @@ -26,6 +26,7 @@ LOCAL cl_driver_delete_cb *cl_driver_delete = NULL;
> LOCAL cl_driver_get_bufmgr_cb *cl_driver_get_bufmgr = NULL; LOCAL
> cl_driver_get_ver_cb *cl_driver_get_ver = NULL; LOCAL
> cl_driver_get_device_id_cb *cl_driver_get_device_id = NULL;
> +LOCAL cl_driver_update_device_info_cb *cl_driver_update_device_info =
> +NULL;
>
> /* Buffer */
> LOCAL cl_buffer_alloc_cb *cl_buffer_alloc = NULL; diff --git
> a/src/intel/intel_driver.c b/src/intel/intel_driver.c index ff0cf27..d61988c
> 100644
> --- a/src/intel/intel_driver.c
> +++ b/src/intel/intel_driver.c
> @@ -754,6 +754,41 @@ static int intel_buffer_set_tiling(cl_buffer bo,
> return ret;
> }
>
> +static void
> +intel_update_device_info(cl_device_id device) { #ifdef HAS_USERPTR
> + intel_driver_t *driver;
> + const size_t sz = 4096;
> + void *host_ptr;
> +
> + driver = intel_driver_new();
> + assert(driver != NULL);
> + if (intel_driver_open(driver, NULL) != CL_SUCCESS) {
> + intel_driver_delete(driver);
> + return;
> + }
> +
> + host_ptr = cl_aligned_malloc(sz, 4096); if (host_ptr != NULL) {
> + cl_buffer bo = intel_buffer_alloc_userptr((cl_buffer_mgr)driver->bufmgr,
> + "CL memory object", host_ptr, sz, 0);
> + if (bo == NULL)
> + device->host_unified_memory = CL_FALSE;
> + else
> + drm_intel_bo_unreference((drm_intel_bo*)bo);
> + cl_free(host_ptr);
> + }
> + else
> + device->host_unified_memory = CL_FALSE;
> +
> + intel_driver_context_destroy(driver);
> + intel_driver_close(driver);
> + intel_driver_terminate(driver);
> + intel_driver_delete(driver);
> +#endif
> +}
> +
> LOCAL void
> intel_setup_callbacks(void)
> {
> @@ -762,6 +797,7 @@ intel_setup_callbacks(void)
> cl_driver_get_ver = (cl_driver_get_ver_cb *) intel_driver_get_ver;
> cl_driver_get_bufmgr = (cl_driver_get_bufmgr_cb *)
> intel_driver_get_bufmgr;
> cl_driver_get_device_id = (cl_driver_get_device_id_cb *)
> intel_get_device_id;
> + cl_driver_update_device_info = (cl_driver_update_device_info_cb *)
> + intel_update_device_info;
> cl_buffer_alloc = (cl_buffer_alloc_cb *) drm_intel_bo_alloc;
> cl_buffer_alloc_userptr = (cl_buffer_alloc_userptr_cb*)
> intel_buffer_alloc_userptr;
> cl_buffer_set_tiling = (cl_buffer_set_tiling_cb *) intel_buffer_set_tiling;
> --
> 2.3.0
>
> _______________________________________________
> Beignet mailing list
> Beignet@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2 v2] Query the driver directly for compute units and subslice
2015-03-02 23:42 ` [PATCH 2/2] Query the driver directly for compute units and subslice jeff.mcgee
@ 2015-03-09 23:35 ` jeff.mcgee
2015-03-12 2:08 ` [Beignet] " Zhigang Gong
0 siblings, 1 reply; 6+ messages in thread
From: jeff.mcgee @ 2015-03-09 23:35 UTC (permalink / raw)
To: beignet; +Cc: intel-gfx, dri-devel
From: Jeff McGee <jeff.mcgee@intel.com>
Values of device max compute units and max subslice obtained
directly from the driver should be more accurate than our own
ID-based lookup values. This is particularly important when a
single device ID may encompass more than one configuration. If
the driver cannot provide a valid value for the given device,
we fallback on the ID-based lookup value.
This query requires libdrm 2.4.60. For now we will consider
the use of this query to be optional and exclude it from
compilation when building against older libdrm. Later we may
want to consider requiring the query or at least warning
more strongly when it is not supported.
v2: Make feature use conditional on libdrm version (Zhigang).
Signed-off-by: Jeff McGee <jeff.mcgee@intel.com>
---
CMakeLists.txt | 9 +++++++++
src/CMakeLists.txt | 10 ++++++++++
src/intel/intel_driver.c | 25 +++++++++++++++++++++----
3 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 65f2c70..bb03566 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -131,6 +131,15 @@ IF(DRM_INTEL_FOUND)
ELSE(DRM_INTEL_VERSION VERSION_GREATER 2.4.57)
MESSAGE(STATUS "Disable userptr support")
ENDIF(DRM_INTEL_VERSION VERSION_GREATER 2.4.57)
+ IF(DRM_INTEL_VERSION VERSION_GREATER 2.4.59)
+ MESSAGE(STATUS "Enable EU total query support")
+ SET(DRM_INTEL_EU_TOTAL "enable")
+ MESSAGE(STATUS "Enable subslice total query support")
+ SET(DRM_INTEL_SUBSLICE_TOTAL "enable")
+ ELSE(DRM_INTEL_VERSION VERSION_GREATER 2.4.59)
+ MESSAGE(STATUS "Disable EU total query support")
+ MESSAGE(STATUS "Disable subslice total query support")
+ ENDIF(DRM_INTEL_VERSION VERSION_GREATER 2.4.59)
ELSE(DRM_INTEL_FOUND)
MESSAGE(FATAL_ERROR "Looking for DRM Intel (>= 2.4.52) - not found")
ENDIF(DRM_INTEL_FOUND)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d4181d8..464765f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -118,6 +118,16 @@ SET(CMAKE_CXX_FLAGS "-DHAS_USERPTR ${CMAKE_CXX_FLAGS}")
SET(CMAKE_C_FLAGS "-DHAS_USERPTR ${CMAKE_C_FLAGS}")
endif (DRM_INTEL_USERPTR)
+if (DRM_INTEL_EU_TOTAL)
+SET(CMAKE_CXX_FLAGS "-DHAS_EU_TOTAL ${CMAKE_CXX_FLAGS}")
+SET(CMAKE_C_FLAGS "-DHAS_EU_TOTAL ${CMAKE_C_FLAGS}")
+endif (DRM_INTEL_EU_TOTAL)
+
+if (DRM_INTEL_SUBSLICE_TOTAL)
+SET(CMAKE_CXX_FLAGS "-DHAS_SUBSLICE_TOTAL ${CMAKE_CXX_FLAGS}")
+SET(CMAKE_C_FLAGS "-DHAS_SUBSLICE_TOTAL ${CMAKE_C_FLAGS}")
+endif (DRM_INTEL_SUBSLICE_TOTAL)
+
set(GIT_SHA1 "git_sha1.h")
add_custom_target(${GIT_SHA1} ALL
COMMAND chmod +x ${CMAKE_CURRENT_SOURCE_DIR}/git_sha1.sh
diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
index d61988c..755ab6b 100644
--- a/src/intel/intel_driver.c
+++ b/src/intel/intel_driver.c
@@ -757,10 +757,7 @@ static int intel_buffer_set_tiling(cl_buffer bo,
static void
intel_update_device_info(cl_device_id device)
{
-#ifdef HAS_USERPTR
intel_driver_t *driver;
- const size_t sz = 4096;
- void *host_ptr;
driver = intel_driver_new();
assert(driver != NULL);
@@ -769,6 +766,10 @@ intel_update_device_info(cl_device_id device)
return;
}
+#ifdef HAS_USERPTR
+ const size_t sz = 4096;
+ void *host_ptr;
+
host_ptr = cl_aligned_malloc(sz, 4096);
if (host_ptr != NULL) {
cl_buffer bo = intel_buffer_alloc_userptr((cl_buffer_mgr)driver->bufmgr,
@@ -781,12 +782,28 @@ intel_update_device_info(cl_device_id device)
}
else
device->host_unified_memory = CL_FALSE;
+#endif
+
+#ifdef HAS_EU_TOTAL
+ unsigned int eu_total;
+
+ /* Prefer driver-queried max compute units if supported */
+ if (!drm_intel_get_eu_total(driver->fd, &eu_total))
+ device->max_compute_unit = eu_total;
+#endif
+
+#ifdef HAS_SUBSLICE_TOTAL
+ unsigned int subslice_total;
+
+ /* Prefer driver-queried subslice count if supported */
+ if (!drm_intel_get_subslice_total(driver->fd, &subslice_total))
+ device->sub_slice_count = subslice_total;
+#endif
intel_driver_context_destroy(driver);
intel_driver_close(driver);
intel_driver_terminate(driver);
intel_driver_delete(driver);
-#endif
}
LOCAL void
--
2.3.0
_______________________________________________
Beignet mailing list
Beignet@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/beignet
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Beignet] [PATCH 2/2 v2] Query the driver directly for compute units and subslice
2015-03-09 23:35 ` [PATCH 2/2 v2] " jeff.mcgee
@ 2015-03-12 2:08 ` Zhigang Gong
2015-03-12 20:52 ` Jeff McGee
0 siblings, 1 reply; 6+ messages in thread
From: Zhigang Gong @ 2015-03-12 2:08 UTC (permalink / raw)
To: jeff.mcgee, beignet; +Cc: intel-gfx, dri-devel
LGTM,
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Thanks.
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces@lists.freedesktop.org] On Behalf Of
> jeff.mcgee@intel.com
> Sent: Tuesday, March 10, 2015 7:36 AM
> To: beignet@lists.freedesktop.org
> Cc: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org
> Subject: [Beignet] [PATCH 2/2 v2] Query the driver directly for compute units
> and subslice
>
> From: Jeff McGee <jeff.mcgee@intel.com>
>
> Values of device max compute units and max subslice obtained directly from
> the driver should be more accurate than our own ID-based lookup values. This
> is particularly important when a single device ID may encompass more than
> one configuration. If the driver cannot provide a valid value for the given device,
> we fallback on the ID-based lookup value.
>
> This query requires libdrm 2.4.60. For now we will consider the use of this query
> to be optional and exclude it from compilation when building against older
> libdrm. Later we may want to consider requiring the query or at least warning
> more strongly when it is not supported.
>
> v2: Make feature use conditional on libdrm version (Zhigang).
>
> Signed-off-by: Jeff McGee <jeff.mcgee@intel.com>
> ---
> CMakeLists.txt | 9 +++++++++
> src/CMakeLists.txt | 10 ++++++++++
> src/intel/intel_driver.c | 25 +++++++++++++++++++++----
> 3 files changed, 40 insertions(+), 4 deletions(-)
>
> diff --git a/CMakeLists.txt b/CMakeLists.txt index 65f2c70..bb03566 100644
> --- a/CMakeLists.txt
> +++ b/CMakeLists.txt
> @@ -131,6 +131,15 @@ IF(DRM_INTEL_FOUND)
> ELSE(DRM_INTEL_VERSION VERSION_GREATER 2.4.57)
> MESSAGE(STATUS "Disable userptr support")
> ENDIF(DRM_INTEL_VERSION VERSION_GREATER 2.4.57)
> + IF(DRM_INTEL_VERSION VERSION_GREATER 2.4.59)
> + MESSAGE(STATUS "Enable EU total query support")
> + SET(DRM_INTEL_EU_TOTAL "enable")
> + MESSAGE(STATUS "Enable subslice total query support")
> + SET(DRM_INTEL_SUBSLICE_TOTAL "enable")
> ELSE(DRM_INTEL_VERSION
> + VERSION_GREATER 2.4.59)
> + MESSAGE(STATUS "Disable EU total query support")
> + MESSAGE(STATUS "Disable subslice total query support")
> + ENDIF(DRM_INTEL_VERSION VERSION_GREATER 2.4.59)
> ELSE(DRM_INTEL_FOUND)
> MESSAGE(FATAL_ERROR "Looking for DRM Intel (>= 2.4.52) - not found")
> ENDIF(DRM_INTEL_FOUND)
> diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d4181d8..464765f
> 100644
> --- a/src/CMakeLists.txt
> +++ b/src/CMakeLists.txt
> @@ -118,6 +118,16 @@ SET(CMAKE_CXX_FLAGS "-DHAS_USERPTR
> ${CMAKE_CXX_FLAGS}") SET(CMAKE_C_FLAGS "-DHAS_USERPTR
> ${CMAKE_C_FLAGS}") endif (DRM_INTEL_USERPTR)
>
> +if (DRM_INTEL_EU_TOTAL)
> +SET(CMAKE_CXX_FLAGS "-DHAS_EU_TOTAL ${CMAKE_CXX_FLAGS}")
> +SET(CMAKE_C_FLAGS "-DHAS_EU_TOTAL ${CMAKE_C_FLAGS}") endif
> +(DRM_INTEL_EU_TOTAL)
> +
> +if (DRM_INTEL_SUBSLICE_TOTAL)
> +SET(CMAKE_CXX_FLAGS "-DHAS_SUBSLICE_TOTAL ${CMAKE_CXX_FLAGS}")
> +SET(CMAKE_C_FLAGS "-DHAS_SUBSLICE_TOTAL ${CMAKE_C_FLAGS}") endif
> +(DRM_INTEL_SUBSLICE_TOTAL)
> +
> set(GIT_SHA1 "git_sha1.h")
> add_custom_target(${GIT_SHA1} ALL
> COMMAND chmod +x ${CMAKE_CURRENT_SOURCE_DIR}/git_sha1.sh
> diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c index
> d61988c..755ab6b 100644
> --- a/src/intel/intel_driver.c
> +++ b/src/intel/intel_driver.c
> @@ -757,10 +757,7 @@ static int intel_buffer_set_tiling(cl_buffer bo, static
> void intel_update_device_info(cl_device_id device) { -#ifdef HAS_USERPTR
> intel_driver_t *driver;
> - const size_t sz = 4096;
> - void *host_ptr;
>
> driver = intel_driver_new();
> assert(driver != NULL);
> @@ -769,6 +766,10 @@ intel_update_device_info(cl_device_id device)
> return;
> }
>
> +#ifdef HAS_USERPTR
> + const size_t sz = 4096;
> + void *host_ptr;
> +
> host_ptr = cl_aligned_malloc(sz, 4096);
> if (host_ptr != NULL) {
> cl_buffer bo = intel_buffer_alloc_userptr((cl_buffer_mgr)driver->bufmgr,
> @@ -781,12 +782,28 @@ intel_update_device_info(cl_device_id device)
> }
> else
> device->host_unified_memory = CL_FALSE;
> +#endif
> +
> +#ifdef HAS_EU_TOTAL
> + unsigned int eu_total;
> +
> + /* Prefer driver-queried max compute units if supported */
> + if (!drm_intel_get_eu_total(driver->fd, &eu_total))
> + device->max_compute_unit = eu_total; #endif
> +
> +#ifdef HAS_SUBSLICE_TOTAL
> + unsigned int subslice_total;
> +
> + /* Prefer driver-queried subslice count if supported */
> + if (!drm_intel_get_subslice_total(driver->fd, &subslice_total))
> + device->sub_slice_count = subslice_total; #endif
>
> intel_driver_context_destroy(driver);
> intel_driver_close(driver);
> intel_driver_terminate(driver);
> intel_driver_delete(driver);
> -#endif
> }
>
> LOCAL void
> --
> 2.3.0
>
> _______________________________________________
> Beignet mailing list
> Beignet@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Beignet] [PATCH 2/2 v2] Query the driver directly for compute units and subslice
2015-03-12 2:08 ` [Beignet] " Zhigang Gong
@ 2015-03-12 20:52 ` Jeff McGee
0 siblings, 0 replies; 6+ messages in thread
From: Jeff McGee @ 2015-03-12 20:52 UTC (permalink / raw)
To: Zhigang Gong; +Cc: intel-gfx, dri-devel, beignet
On Thu, Mar 12, 2015 at 10:08:54AM +0800, Zhigang Gong wrote:
> LGTM,
>
> Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
>
> Thanks.
>
Thanks for the review, Zhigang.
With beignet portion reviewed, review should be able to proceed for
the i915, libdrm, and igt parts. These are all quite simple. Can someone(s)
please review?
-Jeff
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-03-12 20:52 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-02 23:42 [PATCH 1/2] Add driver callback for updating device info jeff.mcgee
2015-03-02 23:42 ` [PATCH 2/2] Query the driver directly for compute units and subslice jeff.mcgee
2015-03-09 23:35 ` [PATCH 2/2 v2] " jeff.mcgee
2015-03-12 2:08 ` [Beignet] " Zhigang Gong
2015-03-12 20:52 ` Jeff McGee
2015-03-09 0:21 ` [Beignet] [PATCH 1/2] Add driver callback for updating device info Zhigang Gong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).