[Beignet] [PATCH 07/10] OCL20: add a cl_kernel pointer to gpgpu.
Yang Rong
rong.r.yang at intel.com
Thu Mar 17 10:53:55 UTC 2016
Because in flush the command queue, must check the currunt flushed
command queue has device enqueue or not, it need the cl_kernel. So store
the cl_kernel pointer to gpgpu. And add two function intel_gpgpu_set_kernel
and intel_gpgpu_get_kernel for it.
Signed-off-by: Yang Rong <rong.r.yang at intel.com>
---
src/cl_driver.h | 9 +++++++--
src/cl_driver_defs.c | 2 ++
src/intel/intel_gpgpu.c | 14 ++++++++++++++
src/intel/intel_gpgpu.h | 1 +
4 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/src/cl_driver.h b/src/cl_driver.h
index 25323ac..631b21f 100644
--- a/src/cl_driver.h
+++ b/src/cl_driver.h
@@ -117,7 +117,7 @@ typedef enum gpu_command_status {
typedef struct cl_gpgpu_kernel {
const char *name; /* kernel name and bo name */
uint32_t grf_blocks; /* register blocks kernel wants (in 8 reg blocks) */
- uint32_t curbe_sz; /* total size of all curbes */
+ uint32_t curbe_sz; /* total size of all curbes */
cl_buffer bo; /* kernel code in the proper addr space */
int32_t barrierID; /* barrierID for _this_ kernel */
uint32_t use_slm:1; /* For gen7 (automatic barrier management) */
@@ -141,6 +141,12 @@ extern cl_gpgpu_sync_cb *cl_gpgpu_sync;
typedef void (cl_gpgpu_bind_buf_cb)(cl_gpgpu, cl_buffer, uint32_t offset, uint32_t internal_offset, size_t size, uint8_t bti);
extern cl_gpgpu_bind_buf_cb *cl_gpgpu_bind_buf;
+typedef void (cl_gpgpu_set_kernel_cb)(cl_gpgpu, void *);
+extern cl_gpgpu_set_kernel_cb *cl_gpgpu_set_kernel;
+
+typedef void* (cl_gpgpu_get_kernel_cb)(cl_gpgpu);
+extern cl_gpgpu_get_kernel_cb *cl_gpgpu_get_kernel;
+
/* bind samplers defined in both kernel and kernel args. */
typedef void (cl_gpgpu_bind_sampler_cb)(cl_gpgpu, uint32_t *samplers, size_t sampler_sz);
extern cl_gpgpu_bind_sampler_cb *cl_gpgpu_bind_sampler;
@@ -289,7 +295,6 @@ typedef void (cl_gpgpu_walker_cb)(cl_gpgpu,
const size_t global_wk_sz[3],
const size_t local_wk_sz[3]);
extern cl_gpgpu_walker_cb *cl_gpgpu_walker;
-
/**************************************************************************
* Buffer
**************************************************************************/
diff --git a/src/cl_driver_defs.c b/src/cl_driver_defs.c
index ae4262d..5ab0fa4 100644
--- a/src/cl_driver_defs.c
+++ b/src/cl_driver_defs.c
@@ -99,4 +99,6 @@ LOCAL cl_gpgpu_unmap_printf_buffer_cb *cl_gpgpu_unmap_printf_buffer = NULL;
LOCAL cl_gpgpu_set_printf_info_cb *cl_gpgpu_set_printf_info = NULL;
LOCAL cl_gpgpu_get_printf_info_cb *cl_gpgpu_get_printf_info = NULL;
LOCAL cl_gpgpu_release_printf_buffer_cb *cl_gpgpu_release_printf_buffer = NULL;
+LOCAL cl_gpgpu_set_kernel_cb *cl_gpgpu_set_kernel = NULL;
+LOCAL cl_gpgpu_get_kernel_cb *cl_gpgpu_get_kernel = NULL;
diff --git a/src/intel/intel_gpgpu.c b/src/intel/intel_gpgpu.c
index 727c0fb..ea01cec 100644
--- a/src/intel/intel_gpgpu.c
+++ b/src/intel/intel_gpgpu.c
@@ -2169,6 +2169,18 @@ intel_gpgpu_get_printf_info(intel_gpgpu_t *gpgpu, size_t * global_sz, size_t *ou
return gpgpu->printf_info;
}
+static void
+intel_gpgpu_set_kernel(intel_gpgpu_t *gpgpu, void * kernel)
+{
+ gpgpu->kernel = kernel;
+}
+
+static void*
+intel_gpgpu_get_kernel(intel_gpgpu_t *gpgpu)
+{
+ return gpgpu->kernel;
+}
+
LOCAL void
intel_set_gpgpu_callbacks(int device_id)
{
@@ -2203,6 +2215,8 @@ intel_set_gpgpu_callbacks(int device_id)
cl_gpgpu_release_printf_buffer = (cl_gpgpu_release_printf_buffer_cb *)intel_gpgpu_release_printf_buf;
cl_gpgpu_set_printf_info = (cl_gpgpu_set_printf_info_cb *)intel_gpgpu_set_printf_info;
cl_gpgpu_get_printf_info = (cl_gpgpu_get_printf_info_cb *)intel_gpgpu_get_printf_info;
+ cl_gpgpu_set_kernel = (cl_gpgpu_set_kernel_cb *)intel_gpgpu_set_kernel;
+ cl_gpgpu_get_kernel = (cl_gpgpu_get_kernel_cb *)intel_gpgpu_get_kernel;
if (IS_BROADWELL(device_id) || IS_CHERRYVIEW(device_id)) {
cl_gpgpu_bind_image = (cl_gpgpu_bind_image_cb *) intel_gpgpu_bind_image_gen8;
diff --git a/src/intel/intel_gpgpu.h b/src/intel/intel_gpgpu.h
index ad7290e..84ac521 100644
--- a/src/intel/intel_gpgpu.h
+++ b/src/intel/intel_gpgpu.h
@@ -53,6 +53,7 @@ struct intel_gpgpu
uint32_t target_buf_offset[max_buf_n];/* internal offset for buffers binded for the call */
uint32_t binded_offset[max_buf_n]; /* their offsets in the curbe buffer */
uint32_t binded_n; /* number of buffers binded */
+ void *kernel; /* cl_kernel with this gpgpu */
unsigned long img_bitmap; /* image usage bitmap. */
unsigned int img_index_base; /* base index for image surface.*/
--
1.9.1
More information about the Beignet
mailing list