Module: Mesa
Branch: master
Commit: f2bdb69218829551f7c1f47a77ace122c9da619b
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f2bdb69218829551f7c1f47a77ace122c9da619b

Author: Karol Herbst <[email protected]>
Date:   Thu Oct 15 01:19:57 2020 +0200

clover: support custom driver strides

This is required by llvmpipe as it sets explicit strides on buffers and
textures.

Reviewed-by: Dave Airlie <[email protected]>
Reviewed-by: Francisco Jerez <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7069>

---

 src/gallium/frontends/clover/api/transfer.cpp  | 11 +++++++----
 src/gallium/frontends/clover/core/resource.cpp |  4 ++--
 src/gallium/frontends/clover/core/resource.hpp |  4 ++--
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/gallium/frontends/clover/api/transfer.cpp 
b/src/gallium/frontends/clover/api/transfer.cpp
index 1d9663a9d53..bb9133c8285 100644
--- a/src/gallium/frontends/clover/api/transfer.cpp
+++ b/src/gallium/frontends/clover/api/transfer.cpp
@@ -806,7 +806,7 @@ clEnqueueMapBuffer(cl_command_queue d_q, cl_mem d_mem, 
cl_bool blocking,
    validate_object(q, mem, obj_origin, obj_pitch, region);
    validate_map_flags(mem, flags);
 
-   void *map = mem.resource_in(q).add_map(q, flags, blocking, obj_origin, 
region);
+   auto *map = mem.resource_in(q).add_map(q, flags, blocking, obj_origin, 
region);
 
    auto hev = create<hard_event>(q, CL_COMMAND_MAP_BUFFER, deps);
    if (blocking)
@@ -814,7 +814,7 @@ clEnqueueMapBuffer(cl_command_queue d_q, cl_mem d_mem, 
cl_bool blocking,
 
    ret_object(rd_ev, hev);
    ret_error(r_errcode, CL_SUCCESS);
-   return map;
+   return *map;
 
 } catch (error &e) {
    ret_error(r_errcode, e);
@@ -844,7 +844,10 @@ clEnqueueMapImage(cl_command_queue d_q, cl_mem d_mem, 
cl_bool blocking,
    if (img.slice_pitch() && !slice_pitch)
       throw error(CL_INVALID_VALUE);
 
-   void *map = img.resource_in(q).add_map(q, flags, blocking, origin, region);
+   auto *map = img.resource_in(q).add_map(q, flags, blocking, origin, region);
+   *row_pitch = map->pitch()[1];
+   if (slice_pitch)
+      *slice_pitch = map->pitch()[2];
 
    auto hev = create<hard_event>(q, CL_COMMAND_MAP_IMAGE, deps);
    if (blocking)
@@ -852,7 +855,7 @@ clEnqueueMapImage(cl_command_queue d_q, cl_mem d_mem, 
cl_bool blocking,
 
    ret_object(rd_ev, hev);
    ret_error(r_errcode, CL_SUCCESS);
-   return map;
+   return *map;
 
 } catch (error &e) {
    ret_error(r_errcode, e);
diff --git a/src/gallium/frontends/clover/core/resource.cpp 
b/src/gallium/frontends/clover/core/resource.cpp
index 4315204fb35..e0f151c2df3 100644
--- a/src/gallium/frontends/clover/core/resource.cpp
+++ b/src/gallium/frontends/clover/core/resource.cpp
@@ -79,11 +79,11 @@ resource::clear(command_queue &q, const vector &origin, 
const vector &region,
    }
 }
 
-void *
+mapping *
 resource::add_map(command_queue &q, cl_map_flags flags, bool blocking,
                   const vector &origin, const vector &region) {
    maps.emplace_back(q, *this, flags, blocking, origin, region);
-   return maps.back();
+   return &maps.back();
 }
 
 void
diff --git a/src/gallium/frontends/clover/core/resource.hpp 
b/src/gallium/frontends/clover/core/resource.hpp
index 562f410c590..facf31e13bd 100644
--- a/src/gallium/frontends/clover/core/resource.hpp
+++ b/src/gallium/frontends/clover/core/resource.hpp
@@ -53,8 +53,8 @@ namespace clover {
       void clear(command_queue &q, const vector &origin, const vector &region,
                  const std::string &data);
 
-      void *add_map(command_queue &q, cl_map_flags flags, bool blocking,
-                    const vector &origin, const vector &region);
+      mapping *add_map(command_queue &q, cl_map_flags flags, bool blocking,
+                       const vector &origin, const vector &region);
       void del_map(void *p);
       unsigned map_count() const;
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to