Re: [Mesa-dev] [PATCH 2/2] clover: try userptr for CL_MEM_USE_HOST_PTR

2015-05-23 Thread Grigori Goronzy
On 23.05.2015 15:53, Francisco Jerez wrote:
 diff --git a/src/gallium/state_trackers/clover/core/resource.cpp 
 b/src/gallium/state_trackers/clover/core/resource.cpp
 index 8ed4c42..8e51b3c 100644
 --- a/src/gallium/state_trackers/clover/core/resource.cpp
 +++ b/src/gallium/state_trackers/clover/core/resource.cpp
 @@ -118,6 +118,8 @@ root_resource::root_resource(clover::device dev, 
 memory_obj obj,
   command_queue q, const std::string data) :
 resource(dev, obj) {
 pipe_resource info {};
 +   bool user_ptr_support = (bool)dev.pipe-get_param(dev.pipe,
 
 Let's make this variable const, and remove the cast to bool, it
 shouldn't be necessary.  With that fixed:
 Reviewed-by: Francisco Jerez curroje...@riseup.net


Thanks for the review. Pushed with minor changes.

Grigori



signature.asc
Description: OpenPGP digital signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 2/2] clover: try userptr for CL_MEM_USE_HOST_PTR

2015-05-23 Thread Francisco Jerez
Grigori Goronzy g...@chown.ath.cx writes:

 According to spec, CL_MEM_USE_HOST_PTR should directly use host memory,
 if possible. This is just what userptr is for, so use it.

 In case the memory cannot be mapped, a fallback similar to
 CL_MEM_COPY_HOST_PTR is used.
 ---
  src/gallium/state_trackers/clover/core/memory.cpp   |  2 +-
  src/gallium/state_trackers/clover/core/resource.cpp | 17 ++---
  2 files changed, 15 insertions(+), 4 deletions(-)

 diff --git a/src/gallium/state_trackers/clover/core/memory.cpp 
 b/src/gallium/state_trackers/clover/core/memory.cpp
 index 905ebc0..055336a 100644
 --- a/src/gallium/state_trackers/clover/core/memory.cpp
 +++ b/src/gallium/state_trackers/clover/core/memory.cpp
 @@ -30,7 +30,7 @@ memory_obj::memory_obj(clover::context ctx, cl_mem_flags 
 flags,
 size_t size, void *host_ptr) :
 context(ctx), _flags(flags),
 _size(size), _host_ptr(host_ptr) {
 -   if (flags  (CL_MEM_COPY_HOST_PTR | CL_MEM_USE_HOST_PTR))
 +   if (flags  CL_MEM_COPY_HOST_PTR)
data.append((char *)host_ptr, size);
  }
  
 diff --git a/src/gallium/state_trackers/clover/core/resource.cpp 
 b/src/gallium/state_trackers/clover/core/resource.cpp
 index 8ed4c42..8e51b3c 100644
 --- a/src/gallium/state_trackers/clover/core/resource.cpp
 +++ b/src/gallium/state_trackers/clover/core/resource.cpp
 @@ -118,6 +118,8 @@ root_resource::root_resource(clover::device dev, 
 memory_obj obj,
   command_queue q, const std::string data) :
 resource(dev, obj) {
 pipe_resource info {};
 +   bool user_ptr_support = (bool)dev.pipe-get_param(dev.pipe,

Let's make this variable const, and remove the cast to bool, it
shouldn't be necessary.  With that fixed:
Reviewed-by: Francisco Jerez curroje...@riseup.net

 + PIPE_CAP_RESOURCE_FROM_USER_MEMORY);
  
 if (image *img = dynamic_castimage *(obj)) {
info.format = translate_format(img-format());
 @@ -137,7 +139,15 @@ root_resource::root_resource(clover::device dev, 
 memory_obj obj,
  PIPE_BIND_TRANSFER_READ |
  PIPE_BIND_TRANSFER_WRITE);
  
 -   if (obj.flags()  CL_MEM_ALLOC_HOST_PTR) {
 +   if (obj.flags()  CL_MEM_USE_HOST_PTR  user_ptr_support) {
 +  // Page alignment is normally required for this, just try, hope for the
 +  // best and fall back if it fails.
 +  pipe = dev.pipe-resource_from_user_memory(dev.pipe, info, 
 obj.host_ptr());
 +  if (pipe)
 + return;
 +   }
 +
 +   if (obj.flags()  (CL_MEM_ALLOC_HOST_PTR | CL_MEM_USE_HOST_PTR)) {
info.usage = PIPE_USAGE_STAGING;
 }
  
 @@ -145,12 +155,13 @@ root_resource::root_resource(clover::device dev, 
 memory_obj obj,
 if (!pipe)
throw error(CL_OUT_OF_RESOURCES);
  
 -   if (!data.empty()) {
 +   if (obj.flags()  (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)) {
 +  const void *data_ptr = !data.empty() ? data.data() : obj.host_ptr();
box rect { {{ 0, 0, 0 }}, {{ info.width0, info.height0, info.depth0 }} 
 };
unsigned cpp = util_format_get_blocksize(info.format);
  
q.pipe-transfer_inline_write(q.pipe, pipe, 0, PIPE_TRANSFER_WRITE,
 -rect, data.data(), cpp * info.width0,
 +rect, data_ptr, cpp * info.width0,
  cpp * info.width0 * info.height0);
 }
  }
 -- 
 1.9.1

 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev