[Mesa-dev] [PATCH] clover: use pipe_resource references

Vedran Miletić vedran at miletic.net
Wed Mar 8 11:43:17 UTC 2017


It does; this approach was actually mentioned on IRC as an option.

Good work.

Reviewed-by: Vedran Miletić <vedran at miletic.net>

On 03/08/2017 02:30 AM, Jan Vesely wrote:
> Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> ---
> Does this patch work as well?
> 
>  src/gallium/state_trackers/clover/core/resource.cpp | 21 +++++++++++++--------
>  1 file changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/src/gallium/state_trackers/clover/core/resource.cpp b/src/gallium/state_trackers/clover/core/resource.cpp
> index 06fd3f6..16525fa 100644
> --- a/src/gallium/state_trackers/clover/core/resource.cpp
> +++ b/src/gallium/state_trackers/clover/core/resource.cpp
> @@ -25,6 +25,7 @@
>  #include "pipe/p_screen.h"
>  #include "util/u_sampler.h"
>  #include "util/u_format.h"
> +#include "util/u_inlines.h"
>  
>  using namespace clover;
>  
> @@ -118,6 +119,7 @@ root_resource::root_resource(clover::device &dev, memory_obj &obj,
>                               command_queue &q, const std::string &data) :
>     resource(dev, obj) {
>     pipe_resource info {};
> +   pipe_resource *lpipe = NULL;
>     const bool user_ptr_support = dev.pipe->get_param(dev.pipe,
>           PIPE_CAP_RESOURCE_FROM_USER_MEMORY);
>  
> @@ -141,17 +143,19 @@ root_resource::root_resource(clover::device &dev, memory_obj &obj,
>     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)
> +      lpipe = dev.pipe->resource_from_user_memory(dev.pipe, &info, obj.host_ptr());
> +      if (lpipe) {
> +         pipe_resource_reference(&this->pipe, lpipe);
>           return;
> +      }
>     }
>  
>     if (obj.flags() & (CL_MEM_ALLOC_HOST_PTR | CL_MEM_USE_HOST_PTR)) {
>        info.usage = PIPE_USAGE_STAGING;
>     }
>  
> -   pipe = dev.pipe->resource_create(dev.pipe, &info);
> -   if (!pipe)
> +   lpipe = dev.pipe->resource_create(dev.pipe, &info);
> +   if (!lpipe)
>        throw error(CL_OUT_OF_RESOURCES);
>  
>     if (obj.flags() & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)) {
> @@ -159,14 +163,15 @@ root_resource::root_resource(clover::device &dev, memory_obj &obj,
>        box rect { {{ 0, 0, 0 }}, {{ info.width0, info.height0, info.depth0 }} };
>        unsigned cpp = util_format_get_blocksize(info.format);
>  
> -      if (pipe->target == PIPE_BUFFER)
> -         q.pipe->buffer_subdata(q.pipe, pipe, PIPE_TRANSFER_WRITE,
> +      if (lpipe->target == PIPE_BUFFER)
> +         q.pipe->buffer_subdata(q.pipe, lpipe, PIPE_TRANSFER_WRITE,
>                                  0, info.width0, data_ptr);
>        else
> -         q.pipe->texture_subdata(q.pipe, pipe, 0, PIPE_TRANSFER_WRITE,
> +         q.pipe->texture_subdata(q.pipe, lpipe, 0, PIPE_TRANSFER_WRITE,
>                                   rect, data_ptr, cpp * info.width0,
>                                   cpp * info.width0 * info.height0);
>     }
> +   pipe_resource_reference(&this->pipe, lpipe);
>  }
>  
>  root_resource::root_resource(clover::device &dev, memory_obj &obj,
> @@ -176,7 +181,7 @@ root_resource::root_resource(clover::device &dev, memory_obj &obj,
>  }
>  
>  root_resource::~root_resource() {
> -   device().pipe->resource_destroy(device().pipe, pipe);
> +   pipe_resource_reference(&pipe, NULL);
>  }
>  
>  sub_resource::sub_resource(resource &r, const vector &offset) :
> 

-- 
Vedran Miletić
vedran.miletic.net


More information about the mesa-dev mailing list