[Beignet] [PATCH 4/11 V2] Runtime: Apply base object to cl_device_id
junyan.he at inbox.com
junyan.he at inbox.com
Fri Sep 2 06:38:06 UTC 2016
From: Junyan He <junyan.he at intel.com>
V2:
Fix INIT_ICD, no need for that.
Signed-off-by: Junyan He <junyan.he at intel.com>
---
src/cl_device_id.c | 36 +++++++++++++++---------------------
src/cl_device_id.h | 8 +++++---
src/cl_gt_device.h | 1 -
src/cl_khr_icd.h | 2 --
4 files changed, 20 insertions(+), 27 deletions(-)
diff --git a/src/cl_device_id.c b/src/cl_device_id.c
index 08cc0c0..bc130d3 100644
--- a/src/cl_device_id.c
+++ b/src/cl_device_id.c
@@ -42,7 +42,6 @@
#endif
static struct _cl_device_id intel_ivb_gt2_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 16,
.max_thread_per_unit = 8,
.sub_slice_count = 2,
@@ -53,7 +52,6 @@ static struct _cl_device_id intel_ivb_gt2_device = {
};
static struct _cl_device_id intel_ivb_gt1_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 6,
.max_thread_per_unit = 6,
.sub_slice_count = 1,
@@ -64,7 +62,6 @@ static struct _cl_device_id intel_ivb_gt1_device = {
};
static struct _cl_device_id intel_baytrail_t_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 4,
.max_thread_per_unit = 8,
.sub_slice_count = 1,
@@ -76,7 +73,6 @@ static struct _cl_device_id intel_baytrail_t_device = {
/* XXX we clone IVB for HSW now */
static struct _cl_device_id intel_hsw_gt1_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 10,
.max_thread_per_unit = 7,
.sub_slice_count = 1,
@@ -87,7 +83,6 @@ static struct _cl_device_id intel_hsw_gt1_device = {
};
static struct _cl_device_id intel_hsw_gt2_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 20,
.max_thread_per_unit = 7,
.sub_slice_count = 2,
@@ -98,7 +93,6 @@ static struct _cl_device_id intel_hsw_gt2_device = {
};
static struct _cl_device_id intel_hsw_gt3_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 40,
.max_thread_per_unit = 7,
.sub_slice_count = 4,
@@ -110,7 +104,6 @@ static struct _cl_device_id intel_hsw_gt3_device = {
/* XXX we clone IVB for HSW now */
static struct _cl_device_id intel_brw_gt1_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 12,
.max_thread_per_unit = 7,
.sub_slice_count = 2,
@@ -121,7 +114,6 @@ static struct _cl_device_id intel_brw_gt1_device = {
};
static struct _cl_device_id intel_brw_gt2_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 24,
.max_thread_per_unit = 7,
.sub_slice_count = 3,
@@ -132,7 +124,6 @@ static struct _cl_device_id intel_brw_gt2_device = {
};
static struct _cl_device_id intel_brw_gt3_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 48,
.max_thread_per_unit = 7,
.sub_slice_count = 6,
@@ -144,7 +135,6 @@ static struct _cl_device_id intel_brw_gt3_device = {
//Cherryview has the same pciid, must get the max_compute_unit and max_thread_per_unit from drm
static struct _cl_device_id intel_chv_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 8,
.max_thread_per_unit = 7,
.sub_slice_count = 2,
@@ -156,7 +146,6 @@ static struct _cl_device_id intel_chv_device = {
/* XXX we clone brw now */
static struct _cl_device_id intel_skl_gt1_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 6,
.max_thread_per_unit = 7,
.sub_slice_count = 2,
@@ -167,7 +156,6 @@ static struct _cl_device_id intel_skl_gt1_device = {
};
static struct _cl_device_id intel_skl_gt2_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 24,
.max_thread_per_unit = 7,
.sub_slice_count = 3,
@@ -178,7 +166,6 @@ static struct _cl_device_id intel_skl_gt2_device = {
};
static struct _cl_device_id intel_skl_gt3_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 48,
.max_thread_per_unit = 7,
.sub_slice_count = 6,
@@ -189,7 +176,6 @@ static struct _cl_device_id intel_skl_gt3_device = {
};
static struct _cl_device_id intel_skl_gt4_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 72,
.max_thread_per_unit = 7,
.sub_slice_count = 9,
@@ -200,7 +186,6 @@ static struct _cl_device_id intel_skl_gt4_device = {
};
static struct _cl_device_id intel_bxt_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 18,
.max_thread_per_unit = 6,
.sub_slice_count = 3,
@@ -211,7 +196,6 @@ static struct _cl_device_id intel_bxt_device = {
};
static struct _cl_device_id intel_kbl_gt1_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 12,
.max_thread_per_unit = 7,
.sub_slice_count = 2,
@@ -222,7 +206,6 @@ static struct _cl_device_id intel_kbl_gt1_device = {
};
static struct _cl_device_id intel_kbl_gt15_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 18,
.max_thread_per_unit = 7,
.sub_slice_count = 3,
@@ -233,7 +216,6 @@ static struct _cl_device_id intel_kbl_gt15_device = {
};
static struct _cl_device_id intel_kbl_gt2_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 24,
.max_thread_per_unit = 7,
.sub_slice_count = 3,
@@ -244,7 +226,6 @@ static struct _cl_device_id intel_kbl_gt2_device = {
};
static struct _cl_device_id intel_kbl_gt3_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 48,
.max_thread_per_unit = 7,
.sub_slice_count = 6,
@@ -255,7 +236,6 @@ static struct _cl_device_id intel_kbl_gt3_device = {
};
static struct _cl_device_id intel_kbl_gt4_device = {
- INIT_ICD(dispatch)
.max_compute_unit = 72,
.max_thread_per_unit = 7,
.sub_slice_count = 9,
@@ -747,6 +727,7 @@ kbl_gt4_break:
if (ret == NULL)
return NULL;
+ CL_OBJECT_INIT_BASE(ret, CL_OBJECT_DEVICE_MAGIC);
if (!CompilerSupported()) {
ret->compiler_available = CL_FALSE;
//ret->linker_available = CL_FALSE;
@@ -1042,10 +1023,23 @@ cl_get_device_info(cl_device_id device,
DECL_FIELD(PARTITION_PROPERTIES, partition_property)
DECL_FIELD(PARTITION_AFFINITY_DOMAIN, affinity_domain)
DECL_FIELD(PARTITION_TYPE, partition_type)
- DECL_FIELD(REFERENCE_COUNT, device_reference_count)
DECL_FIELD(IMAGE_PITCH_ALIGNMENT, image_pitch_alignment)
DECL_FIELD(IMAGE_BASE_ADDRESS_ALIGNMENT, image_base_address_alignment)
+ case CL_DEVICE_REFERENCE_COUNT:
+ {
+ cl_uint dev_ref = CL_OBJECT_GET_REF(device);
+ if (param_value_size_ret) {
+ *param_value_size_ret = sizeof(cl_uint);
+ if (!param_value)
+ return CL_SUCCESS;
+ }
+ if (param_value_size < sizeof(cl_uint))
+ return CL_INVALID_VALUE;
+ memcpy(param_value, &dev_ref, sizeof(cl_uint));
+ return CL_SUCCESS;
+ }
+
case CL_DRIVER_VERSION:
if (param_value_size_ret) {
*param_value_size_ret = device->driver_version_sz;
diff --git a/src/cl_device_id.h b/src/cl_device_id.h
index 7db125b..abb6403 100644
--- a/src/cl_device_id.h
+++ b/src/cl_device_id.h
@@ -22,10 +22,10 @@
#define EXTENSTION_LENGTH 512
-#include "cl_khr_icd.h"
+#include "cl_base_object.h"
/* Store complete information about the device */
struct _cl_device_id {
- DEFINE_ICD(dispatch)
+ _cl_base_object base;
cl_device_type device_type;
cl_uint device_id;
cl_uint vendor_id;
@@ -117,7 +117,6 @@ struct _cl_device_id {
cl_device_partition_property partition_property[3];
cl_device_affinity_domain affinity_domain;
cl_device_partition_property partition_type[3];
- cl_uint device_reference_count;
uint32_t atomic_test_result;
uint32_t image_pitch_alignment;
uint32_t image_base_address_alignment;
@@ -126,6 +125,9 @@ struct _cl_device_id {
void* cmrt_device; //realtype: CmDevice*
};
+#define CL_OBJECT_DEVICE_MAGIC 0x2acaddcca8853c52LL
+#define CL_OBJECT_IS_DEVICE(obj) (((cl_base_object)obj)->magic == CL_OBJECT_DEVICE_MAGIC)
+
/* Get a device from the given platform */
extern cl_int cl_get_device_ids(cl_platform_id platform,
cl_device_type device_type,
diff --git a/src/cl_gt_device.h b/src/cl_gt_device.h
index 70a0a54..d27c1ad 100644
--- a/src/cl_gt_device.h
+++ b/src/cl_gt_device.h
@@ -127,7 +127,6 @@ DECL_INFO_STRING(spir_versions, "1.2")
.partition_property = {0},
.affinity_domain = 0,
.partition_type = {0},
-.device_reference_count = 1,
.image_pitch_alignment = 1,
.image_base_address_alignment = 4096,
.cmrt_device = NULL
diff --git a/src/cl_khr_icd.h b/src/cl_khr_icd.h
index 3985d80..58cee68 100644
--- a/src/cl_khr_icd.h
+++ b/src/cl_khr_icd.h
@@ -21,13 +21,11 @@
#define SET_ICD(dispatch) \
dispatch = &cl_khr_icd_dispatch;
-#define INIT_ICD(member) .member = &cl_khr_icd_dispatch,
#define DEFINE_ICD(member) struct _cl_icd_dispatch const *member;
extern struct _cl_icd_dispatch const cl_khr_icd_dispatch;
#else
#define SET_ICD(dispatch)
-#define INIT_ICD(member)
#define DEFINE_ICD(member)
#endif
--
2.7.4
More information about the Beignet
mailing list