when call cbCreateSubBuffer when followings memory flags are not set
they should be inherited from parent buffer.
Report them when calling clGetMemObjectInfo

flags:
CL_MEM_READ_WRITE, CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY,
CL_MEM_USE_HOST_PTR, CL_MEM_ALLOC_HOST_PTR, CL_MEM_COPY_HOST_PTR,
CL_MEM_HOST_WRITE_ONLY, CL_MEM_HOST_READ_ONLY, CL_MEM_HOST_NO_ACCESS
---
 src/gallium/state_trackers/clover/api/memory.cpp | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/memory.cpp 
b/src/gallium/state_trackers/clover/api/memory.cpp
index fe01d3f..4843cff 100644
--- a/src/gallium/state_trackers/clover/api/memory.cpp
+++ b/src/gallium/state_trackers/clover/api/memory.cpp
@@ -226,9 +226,22 @@ clGetMemObjectInfo(cl_mem d_mem, cl_mem_info param,
       buf.as_scalar<cl_mem_object_type>() = mem.type();
       break;
 
-   case CL_MEM_FLAGS:
-      buf.as_scalar<cl_mem_flags>() = mem.flags();
+   case CL_MEM_FLAGS: {
+      cl_mem_flags flags = mem.flags();
+
+      //inherited flags
+      sub_buffer *sub = dynamic_cast<sub_buffer *>(&mem);
+      if (sub) {
+         flags = flags | (sub->parent().flags() &
+                 (CL_MEM_READ_WRITE | CL_MEM_READ_ONLY | CL_MEM_WRITE_ONLY |
+                  CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR |
+                  CL_MEM_COPY_HOST_PTR |
+                  CL_MEM_HOST_WRITE_ONLY | CL_MEM_HOST_READ_ONLY |
+                  CL_MEM_HOST_NO_ACCESS));
+      }
+      buf.as_scalar<cl_mem_flags>() = flags;
       break;
+   }
 
    case CL_MEM_SIZE:
       buf.as_scalar<size_t>() = mem.size();
-- 
1.9.3

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

Reply via email to