The patchset LGTM, pushed, thanks.
> -----Original Message----- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of > yan.w...@linux.intel.com > Sent: Tuesday, June 13, 2017 15:46 > To: beignet@lists.freedesktop.org > Cc: Yan Wang <yan.w...@linux.intel.com> > Subject: [Beignet] [PATCH v5 7/7] Optimize clEnqueueWriteImageByKernel > and clEnqueuReadImageByKernel. > > From: Yan Wang <yan.w...@linux.intel.com> > > 1. Only copy the data by origin and region defined. > 2. Add clFinish to guarantee the kernel copying is finished when blocking > writing. > > Signed-off-by: Yan Wang <yan.w...@linux.intel.com> > --- > src/cl_api_mem.c | 25 ++++++++++++++++++------- > 1 file changed, 18 insertions(+), 7 deletions(-) > > diff --git a/src/cl_api_mem.c b/src/cl_api_mem.c index 00567b9..1daf403 > 100644 > --- a/src/cl_api_mem.c > +++ b/src/cl_api_mem.c > @@ -1857,23 +1857,28 @@ > clEnqueueReadImageByKernel(cl_command_queue command_queue, > if (image->tmp_ker_buf) > clReleaseMemObject(image->tmp_ker_buf); > > - image->tmp_ker_buf = clCreateBuffer(command_queue->ctx, > CL_MEM_ALLOC_HOST_PTR, > - mem->size, NULL, &err); > + size_t buf_size = region[0] * region[1] * region[2] * image->bpp; > + image->tmp_ker_buf = clCreateBuffer(command_queue->ctx, > CL_MEM_USE_HOST_PTR, > + buf_size, ptr, &err); > if (image->tmp_ker_buf == NULL || err != CL_SUCCESS) { > image->tmp_ker_buf = NULL; > return err; > } > > + cl_event e; > err = clEnqueueCopyImageToBuffer(command_queue, mem, image- > >tmp_ker_buf, origin, > - region, 0, 0, NULL, NULL); > + region, 0, num_events_in_wait_list, event_wait_list, &e); > if (err != CL_SUCCESS) { > clReleaseMemObject(image->tmp_ker_buf); > + clReleaseEvent(e); > image->tmp_ker_buf = NULL; > return err; > } > > - return clEnqueueReadBuffer(command_queue, image->tmp_ker_buf, > blocking_read, 0, > - mem->size, ptr, num_events_in_wait_list, event_wait_list, event); > + err = clEnqueueReadBuffer(command_queue, image->tmp_ker_buf, > blocking_read, 0, > + buf_size, ptr, 1, &e, event); > + clReleaseEvent(e); > + return err; > } > > cl_int > @@ -2064,14 +2069,20 @@ > clEnqueueWriteImageByKernel(cl_command_queue command_queue, > if (image->tmp_ker_buf) > clReleaseMemObject(image->tmp_ker_buf); > > - image->tmp_ker_buf = clCreateBuffer(command_queue->ctx, > CL_MEM_USE_HOST_PTR, mem->size, (void*)ptr, &err); > + size_t buf_size = region[0] * region[1] * region[2] * image->bpp; > + image->tmp_ker_buf = clCreateBuffer(command_queue->ctx, > + CL_MEM_USE_HOST_PTR, buf_size, (void*)ptr, &err); > if (image->tmp_ker_buf == NULL || err != CL_SUCCESS) { > image->tmp_ker_buf = NULL; > return err; > } > > - return clEnqueueCopyBufferToImage(command_queue, image- > >tmp_ker_buf, mem, 0, origin, region, > + err = clEnqueueCopyBufferToImage(command_queue, image- > >tmp_ker_buf, > + mem, 0, origin, region, > num_events_in_wait_list, event_wait_list, event); > + > + if (blocking_write) > + err = clFinish(command_queue); > + > + return err; > } > > cl_int > -- > 2.7.4 > > _______________________________________________ > Beignet mailing list > Beignet@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet