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.y...@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 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet