[Mesa-dev] [PATCH 11/11] clover: Use PIPE_TRANSFER_MAP_DIRECTLY when writing/reading buffers

Bruno Jiménez brunojimen at gmail.com
Wed Jun 18 08:02:01 PDT 2014


Note: This is just a proof of concept.
---
 src/gallium/state_trackers/clover/api/transfer.cpp  | 4 ++--
 src/gallium/state_trackers/clover/core/object.hpp   | 4 ++++
 src/gallium/state_trackers/clover/core/resource.cpp | 2 ++
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/transfer.cpp b/src/gallium/state_trackers/clover/api/transfer.cpp
index 404ceb0..f34ae8b 100644
--- a/src/gallium/state_trackers/clover/api/transfer.cpp
+++ b/src/gallium/state_trackers/clover/api/transfer.cpp
@@ -174,8 +174,8 @@ namespace {
       static mapping
       get(command_queue &q, T obj, cl_map_flags flags,
           size_t offset, size_t size) {
-         return { q, obj->resource(q), flags, true,
-                  {{ offset }}, {{ size, 1, 1 }} };
+         return { q, obj->resource(q), flags | CLOVER_TRANSFER_MAP_DIRECTLY,
+                  true, {{ offset }}, {{ size, 1, 1 }} };
       }
    };
 
diff --git a/src/gallium/state_trackers/clover/core/object.hpp b/src/gallium/state_trackers/clover/core/object.hpp
index 697565c..7d5adf9 100644
--- a/src/gallium/state_trackers/clover/core/object.hpp
+++ b/src/gallium/state_trackers/clover/core/object.hpp
@@ -33,6 +33,10 @@
 #include "core/property.hpp"
 #include "api/dispatch.hpp"
 
+#ifndef CLOVER_TRANSFER_MAP_DIRECTLY
+#define CLOVER_TRANSFER_MAP_DIRECTLY (1<<8)
+#endif
+
 ///
 /// Main namespace of the CL state tracker.
 ///
diff --git a/src/gallium/state_trackers/clover/core/resource.cpp b/src/gallium/state_trackers/clover/core/resource.cpp
index 7b8a40a..c8e97db 100644
--- a/src/gallium/state_trackers/clover/core/resource.cpp
+++ b/src/gallium/state_trackers/clover/core/resource.cpp
@@ -174,6 +174,8 @@ mapping::mapping(command_queue &q, resource &r,
    pctx(q.pipe) {
    unsigned usage = ((flags & CL_MAP_WRITE ? PIPE_TRANSFER_WRITE : 0 ) |
                      (flags & CL_MAP_READ ? PIPE_TRANSFER_READ : 0 ) |
+                     (flags & CLOVER_TRANSFER_MAP_DIRECTLY ?
+                              PIPE_TRANSFER_MAP_DIRECTLY : 0 ) |
                      (!blocking ? PIPE_TRANSFER_UNSYNCHRONIZED : 0));
 
    p = pctx->transfer_map(pctx, r.pipe, 0, usage,
-- 
2.0.0



More information about the mesa-dev mailing list