[04/11] Runtime: Apply base object to cl_device_id

Submitted by junyan.he@inbox.com on July 19, 2016, 11:25 a.m.

Details

Message ID 1468927557-5051-4-git-send-email-junyan.he@inbox.com
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in Beignet

Browsing this patch as part of:
"Series without cover letter" rev 1 in Beignet
<< prev patch [4/11] next patch >>

Commit Message

junyan.he@inbox.com July 19, 2016, 11:25 a.m.
From: Junyan He <junyan.he@intel.com>

Signed-off-by: Junyan He <junyan.he@intel.com>
---
 src/cl_device_id.c |   16 +++++++++++++++-
 src/cl_device_id.h |    8 +++++---
 src/cl_gt_device.h |    1 -
 3 files changed, 20 insertions(+), 5 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/cl_device_id.c b/src/cl_device_id.c
index 66666ea..3294f9d 100644
--- a/src/cl_device_id.c
+++ b/src/cl_device_id.c
@@ -600,6 +600,7 @@  bxt_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;
@@ -887,10 +888,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

Comments

Because the device is static variable, so it is special.
Is it safe for use-case:
clCreateDevice()
clReleaseDevice()
clCreateDevice()

clReleaseDevice do nothing, so CL_OBJECT_INIT_BASE will be called several times without CL_OBJECT_DESTROY_BASE() is called.

> -----Original Message-----

> From: Beignet [mailto:beignet-bounces@lists.freedesktop.org] On Behalf Of

> junyan.he@inbox.com

> Sent: Tuesday, July 19, 2016 19:26

> To: beignet@lists.freedesktop.org

> Subject: [Beignet] [PATCH 04/11] Runtime: Apply base object to cl_device_id

> 

> From: Junyan He <junyan.he@intel.com>

> 

> Signed-off-by: Junyan He <junyan.he@intel.com>

> ---

>  src/cl_device_id.c |   16 +++++++++++++++-

>  src/cl_device_id.h |    8 +++++---

>  src/cl_gt_device.h |    1 -

>  3 files changed, 20 insertions(+), 5 deletions(-)

> 

> diff --git a/src/cl_device_id.c b/src/cl_device_id.c index 66666ea..3294f9d

> 100644

> --- a/src/cl_device_id.c

> +++ b/src/cl_device_id.c

> @@ -600,6 +600,7 @@ bxt_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;

> @@ -887,10 +888,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

> --

> 1.7.9.5

> 

> __________________________________________________________

> __

> TRY FREE IM TOOLPACK at http://www.imtoolpack.com/default.aspx?rc=if5

> Capture screenshots, upload images, edit and send them to your friends

> through IMs, post on Twitter®, Facebook®, MySpace™, LinkedIn® – FAST!

> 

> 

> _______________________________________________

> Beignet mailing list

> Beignet@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/beignet
There are build errors:
error: unknown field ‘dispatch’ specified in initializer
   INIT_ICD(dispatch)

The other part of this patchset LGTM.

> -----Original Message-----

> From: Beignet [mailto:beignet-bounces@lists.freedesktop.org] On Behalf Of

> junyan.he@inbox.com

> Sent: Tuesday, July 19, 2016 19:26

> To: beignet@lists.freedesktop.org

> Subject: [Beignet] [PATCH 04/11] Runtime: Apply base object to cl_device_id

> 

> From: Junyan He <junyan.he@intel.com>

> 

> Signed-off-by: Junyan He <junyan.he@intel.com>

> ---

>  src/cl_device_id.c |   16 +++++++++++++++-

>  src/cl_device_id.h |    8 +++++---

>  src/cl_gt_device.h |    1 -

>  3 files changed, 20 insertions(+), 5 deletions(-)

> 

> diff --git a/src/cl_device_id.c b/src/cl_device_id.c index 66666ea..3294f9d

> 100644

> --- a/src/cl_device_id.c

> +++ b/src/cl_device_id.c

> @@ -600,6 +600,7 @@ bxt_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;

> @@ -887,10 +888,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

> --

> 1.7.9.5

> 

> __________________________________________________________

> __

> TRY FREE IM TOOLPACK at http://www.imtoolpack.com/default.aspx?rc=if5

> Capture screenshots, upload images, edit and send them to your friends

> through IMs, post on Twitter®, Facebook®, MySpace™, LinkedIn® – FAST!

> 

> 

> _______________________________________________

> Beignet mailing list

> Beignet@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/beignet