Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-27 Thread Francisco Jerez
Marek Olšák mar...@gmail.com writes:

 On Tue, Apr 21, 2015 at 3:50 PM, Francisco Jerez curroje...@riseup.net 
 wrote:
 Marek Olšák mar...@gmail.com writes:

 From: Marek Olšák marek.ol...@amd.com

 Hi Marek, looks mostly OK to me, a few nits inline,

 ---
  src/gallium/include/state_tracker/opencl_interop.h | 42 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
  src/gallium/state_trackers/clover/core/interop.cpp | 66 
 ++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..31a3bd3
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,42 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + 
 **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + *
 + * All functions return non-zero on success.
 + */
 +
 +typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t 
 timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(intptr_t 
 cl_event);
 +

 Just curious, is there any reason you use intptr_t here and elsewhere
 rather than cl_event or void *?  The former is an typedef of an opaque
 pointer anyway.  Using CL types would likely avoid some ugly casts
 later on.  And maybe bool as return type?

 I'll change intptr_t to void*. I don't trust that bool is the same in
 both C and C++ and int seems to be a safe choice for an ABI.

Any sensible ABI [the same thing that guarantees that C's and C++'s
int are the same type ;)] that as far as I'm aware clover has ever
been compiled for should give identical representations to C's _Bool and
C++'s bool.  Not sure what your concern is?


 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..4c2d0f3 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -22,6 +22,7 @@ CPP_SOURCES := \
   core/event.hpp \
   core/format.cpp \
   core/format.hpp \
 + core/interop.cpp \
   core/kernel.cpp \
   core/kernel.hpp \
   core/memory.cpp \
 diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
 b/src/gallium/state_trackers/clover/core/event.hpp
 index 0e1359a..28f510f 100644
 --- a/src/gallium/state_trackers/clover/core/event.hpp
 +++ b/src/gallium/state_trackers/clover/core/event.hpp
 @@ -116,6 +116,10 @@ namespace clover {

friend class command_queue;

 +  struct pipe_fence_handle *get_fence() const {

 The convention in the surrounding code is to name such accessors as the
 object they access, how about pipe_fence_handle *fence() const?

 OK.


 + return _fence;
 +  }
 +
 private:
virtual void fence(pipe_fence_handle *fence);
action profile(command_queue q, const action action) const;
 diff --git a/src/gallium/state_trackers/clover/core/interop.cpp 
 b/src/gallium/state_trackers/clover/core/interop.cpp
 new file mode 100644
 index 

[Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-27 Thread Marek Olšák
From: Marek Olšák marek.ol...@amd.com

v2: - move interop.cpp to clover/api
- change intptr_t to void* in the interface
- add a virtual function fence() to simplify some code

v3: - use bool in the interface
---
 src/gallium/include/state_tracker/opencl_interop.h | 40 +++
 src/gallium/state_trackers/clover/Makefile.sources |  1 +
 src/gallium/state_trackers/clover/api/interop.cpp  | 60 ++
 src/gallium/state_trackers/clover/core/event.hpp   |  8 +++
 src/gallium/targets/opencl/opencl.sym  |  1 +
 5 files changed, 110 insertions(+)
 create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
 create mode 100644 src/gallium/state_trackers/clover/api/interop.cpp

diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
b/src/gallium/include/state_tracker/opencl_interop.h
new file mode 100644
index 000..4983644
--- /dev/null
+++ b/src/gallium/include/state_tracker/opencl_interop.h
@@ -0,0 +1,40 @@
+/**
+ *
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * Software), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **/
+
+#ifndef OPENCL_INTEROP_H
+#define OPENCL_INTEROP_H
+
+/* dlsym these without the _t suffix. You should get the correct symbols
+ * if the OpenCL driver is loaded.
+ */
+
+typedef bool (*opencl_dri_event_add_ref_t)(void *cl_event);
+typedef bool (*opencl_dri_event_release_t)(void *cl_event);
+typedef bool (*opencl_dri_event_wait_t)(void *cl_event, uint64_t timeout);
+typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(void 
*cl_event);
+
+#endif /* OPENCL_INTEROP_H */
diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
b/src/gallium/state_trackers/clover/Makefile.sources
index 5b3344c..9e30c69 100644
--- a/src/gallium/state_trackers/clover/Makefile.sources
+++ b/src/gallium/state_trackers/clover/Makefile.sources
@@ -4,6 +4,7 @@ CPP_SOURCES := \
api/dispatch.cpp \
api/dispatch.hpp \
api/event.cpp \
+   api/interop.cpp \
api/kernel.cpp \
api/memory.cpp \
api/platform.cpp \
diff --git a/src/gallium/state_trackers/clover/api/interop.cpp 
b/src/gallium/state_trackers/clover/api/interop.cpp
new file mode 100644
index 000..8d18200
--- /dev/null
+++ b/src/gallium/state_trackers/clover/api/interop.cpp
@@ -0,0 +1,60 @@
+//
+// Copyright 2015 Advanced Micro Devices, Inc.
+// All Rights Reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the Software),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#include core/event.hpp
+#include api/util.hpp
+
+using namespace clover;
+
+extern C {
+
+PUBLIC bool
+opencl_dri_event_add_ref(cl_event event)
+{
+   return clRetainEvent(event) == CL_SUCCESS;
+}
+
+PUBLIC bool
+opencl_dri_event_release(cl_event event)
+{
+   

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-27 Thread Marek Olšák
Alright. I suppose it's okay to use bool, but hypothetically a gallium
driver could have an OpenCL stack that isn't clover and the interop
interface should work with it too.

Marek

On Mon, Apr 27, 2015 at 2:46 PM, Francisco Jerez curroje...@riseup.net wrote:
 Marek Olšák mar...@gmail.com writes:

 On Tue, Apr 21, 2015 at 3:50 PM, Francisco Jerez curroje...@riseup.net 
 wrote:
 Marek Olšák mar...@gmail.com writes:

 From: Marek Olšák marek.ol...@amd.com

 Hi Marek, looks mostly OK to me, a few nits inline,

 ---
  src/gallium/include/state_tracker/opencl_interop.h | 42 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
  src/gallium/state_trackers/clover/core/interop.cpp | 66 
 ++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..31a3bd3
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,42 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
 CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + 
 **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + *
 + * All functions return non-zero on success.
 + */
 +
 +typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t 
 timeout);
 +typedef struct pipe_fence_handle 
 *(*opencl_dri_event_get_fence_t)(intptr_t cl_event);
 +

 Just curious, is there any reason you use intptr_t here and elsewhere
 rather than cl_event or void *?  The former is an typedef of an opaque
 pointer anyway.  Using CL types would likely avoid some ugly casts
 later on.  And maybe bool as return type?

 I'll change intptr_t to void*. I don't trust that bool is the same in
 both C and C++ and int seems to be a safe choice for an ABI.

 Any sensible ABI [the same thing that guarantees that C's and C++'s
 int are the same type ;)] that as far as I'm aware clover has ever
 been compiled for should give identical representations to C's _Bool and
 C++'s bool.  Not sure what your concern is?


 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..4c2d0f3 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -22,6 +22,7 @@ CPP_SOURCES := \
   core/event.hpp \
   core/format.cpp \
   core/format.hpp \
 + core/interop.cpp \
   core/kernel.cpp \
   core/kernel.hpp \
   core/memory.cpp \
 diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
 b/src/gallium/state_trackers/clover/core/event.hpp
 index 0e1359a..28f510f 100644
 --- a/src/gallium/state_trackers/clover/core/event.hpp
 +++ b/src/gallium/state_trackers/clover/core/event.hpp
 @@ -116,6 +116,10 @@ namespace clover {

friend class command_queue;

 +  struct pipe_fence_handle *get_fence() const {

 The convention in the surrounding code is to name such accessors as the
 object they access, how about pipe_fence_handle *fence() const?

 OK.


 + return _fence;
 +  }
 +
 private:
virtual 

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-27 Thread Francisco Jerez
Marek Olšák mar...@gmail.com writes:

 From: Marek Olšák marek.ol...@amd.com

 v2: - move interop.cpp to clover/api
 - change intptr_t to void* in the interface
 - add a virtual function fence() to simplify some code

 v3: - use bool in the interface
 ---
  src/gallium/include/state_tracker/opencl_interop.h | 40 +++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/api/interop.cpp  | 60 
 ++
  src/gallium/state_trackers/clover/core/event.hpp   |  8 +++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 110 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/api/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..4983644
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,40 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + */
 +
 +typedef bool (*opencl_dri_event_add_ref_t)(void *cl_event);
 +typedef bool (*opencl_dri_event_release_t)(void *cl_event);
 +typedef bool (*opencl_dri_event_wait_t)(void *cl_event, uint64_t timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(void 
 *cl_event);
 +
 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..9e30c69 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -4,6 +4,7 @@ CPP_SOURCES := \
   api/dispatch.cpp \
   api/dispatch.hpp \
   api/event.cpp \
 + api/interop.cpp \
   api/kernel.cpp \
   api/memory.cpp \
   api/platform.cpp \
 diff --git a/src/gallium/state_trackers/clover/api/interop.cpp 
 b/src/gallium/state_trackers/clover/api/interop.cpp
 new file mode 100644
 index 000..8d18200
 --- /dev/null
 +++ b/src/gallium/state_trackers/clover/api/interop.cpp
 @@ -0,0 +1,60 @@
 +//
 +// Copyright 2015 Advanced Micro Devices, Inc.
 +// All Rights Reserved.
 +//
 +// Permission is hereby granted, free of charge, to any person obtaining a
 +// copy of this software and associated documentation files (the Software),
 +// to deal in the Software without restriction, including without limitation
 +// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 +// and/or sell copies of the Software, and to permit persons to whom the
 +// Software is furnished to do so, subject to the following conditions:
 +//
 +// The above copyright notice and this permission notice shall be included in
 +// all copies or substantial portions of the Software.
 +//
 +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 +// OTHER DEALINGS IN THE SOFTWARE.
 +//
 +
 +#include core/event.hpp
 +#include api/util.hpp
 +
 +using namespace clover;
 +
 +extern C {
 +
 +PUBLIC bool
 

[Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-27 Thread Marek Olšák
From: Marek Olšák marek.ol...@amd.com

v2: - move interop.cpp to clover/api
- change intptr_t to void* in the interface
- add a virtual function fence() to simplify some code

v3: - use bool in the interface
v4: - enclose the last two interop functions in try..catch
---
 src/gallium/include/state_tracker/opencl_interop.h | 40 ++
 src/gallium/state_trackers/clover/Makefile.sources |  1 +
 src/gallium/state_trackers/clover/api/interop.cpp  | 64 ++
 src/gallium/state_trackers/clover/core/event.hpp   |  8 +++
 src/gallium/targets/opencl/opencl.sym  |  1 +
 5 files changed, 114 insertions(+)
 create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
 create mode 100644 src/gallium/state_trackers/clover/api/interop.cpp

diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
b/src/gallium/include/state_tracker/opencl_interop.h
new file mode 100644
index 000..4983644
--- /dev/null
+++ b/src/gallium/include/state_tracker/opencl_interop.h
@@ -0,0 +1,40 @@
+/**
+ *
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * Software), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **/
+
+#ifndef OPENCL_INTEROP_H
+#define OPENCL_INTEROP_H
+
+/* dlsym these without the _t suffix. You should get the correct symbols
+ * if the OpenCL driver is loaded.
+ */
+
+typedef bool (*opencl_dri_event_add_ref_t)(void *cl_event);
+typedef bool (*opencl_dri_event_release_t)(void *cl_event);
+typedef bool (*opencl_dri_event_wait_t)(void *cl_event, uint64_t timeout);
+typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(void 
*cl_event);
+
+#endif /* OPENCL_INTEROP_H */
diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
b/src/gallium/state_trackers/clover/Makefile.sources
index 5b3344c..9e30c69 100644
--- a/src/gallium/state_trackers/clover/Makefile.sources
+++ b/src/gallium/state_trackers/clover/Makefile.sources
@@ -4,6 +4,7 @@ CPP_SOURCES := \
api/dispatch.cpp \
api/dispatch.hpp \
api/event.cpp \
+   api/interop.cpp \
api/kernel.cpp \
api/memory.cpp \
api/platform.cpp \
diff --git a/src/gallium/state_trackers/clover/api/interop.cpp 
b/src/gallium/state_trackers/clover/api/interop.cpp
new file mode 100644
index 000..ea0c7c7
--- /dev/null
+++ b/src/gallium/state_trackers/clover/api/interop.cpp
@@ -0,0 +1,64 @@
+//
+// Copyright 2015 Advanced Micro Devices, Inc.
+// All Rights Reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the Software),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#include core/event.hpp
+#include api/util.hpp
+
+using namespace clover;
+
+extern C {
+
+PUBLIC bool
+opencl_dri_event_add_ref(cl_event event)
+{
+   return clRetainEvent(event) == CL_SUCCESS;
+}
+

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-27 Thread Francisco Jerez
Marek Olšák mar...@gmail.com writes:

 From: Marek Olšák marek.ol...@amd.com

 v2: - move interop.cpp to clover/api
 - change intptr_t to void* in the interface
 - add a virtual function fence() to simplify some code

 v3: - use bool in the interface
 v4: - enclose the last two interop functions in try..catch

Looks good, thanks,
Reviewed-by: Francisco Jerez curroje...@riseup.net

 ---
  src/gallium/include/state_tracker/opencl_interop.h | 40 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/api/interop.cpp  | 64 
 ++
  src/gallium/state_trackers/clover/core/event.hpp   |  8 +++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/api/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..4983644
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,40 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + */
 +
 +typedef bool (*opencl_dri_event_add_ref_t)(void *cl_event);
 +typedef bool (*opencl_dri_event_release_t)(void *cl_event);
 +typedef bool (*opencl_dri_event_wait_t)(void *cl_event, uint64_t timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(void 
 *cl_event);
 +
 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..9e30c69 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -4,6 +4,7 @@ CPP_SOURCES := \
   api/dispatch.cpp \
   api/dispatch.hpp \
   api/event.cpp \
 + api/interop.cpp \
   api/kernel.cpp \
   api/memory.cpp \
   api/platform.cpp \
 diff --git a/src/gallium/state_trackers/clover/api/interop.cpp 
 b/src/gallium/state_trackers/clover/api/interop.cpp
 new file mode 100644
 index 000..ea0c7c7
 --- /dev/null
 +++ b/src/gallium/state_trackers/clover/api/interop.cpp
 @@ -0,0 +1,64 @@
 +//
 +// Copyright 2015 Advanced Micro Devices, Inc.
 +// All Rights Reserved.
 +//
 +// Permission is hereby granted, free of charge, to any person obtaining a
 +// copy of this software and associated documentation files (the Software),
 +// to deal in the Software without restriction, including without limitation
 +// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 +// and/or sell copies of the Software, and to permit persons to whom the
 +// Software is furnished to do so, subject to the following conditions:
 +//
 +// The above copyright notice and this permission notice shall be included in
 +// all copies or substantial portions of the Software.
 +//
 +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 +// OTHER DEALINGS IN THE SOFTWARE.
 +//
 +
 

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-26 Thread Marek Olšák
On Tue, Apr 21, 2015 at 3:50 PM, Francisco Jerez curroje...@riseup.net wrote:
 Marek Olšák mar...@gmail.com writes:

 From: Marek Olšák marek.ol...@amd.com

 Hi Marek, looks mostly OK to me, a few nits inline,

 ---
  src/gallium/include/state_tracker/opencl_interop.h | 42 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
  src/gallium/state_trackers/clover/core/interop.cpp | 66 
 ++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..31a3bd3
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,42 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + *
 + * All functions return non-zero on success.
 + */
 +
 +typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(intptr_t 
 cl_event);
 +

 Just curious, is there any reason you use intptr_t here and elsewhere
 rather than cl_event or void *?  The former is an typedef of an opaque
 pointer anyway.  Using CL types would likely avoid some ugly casts
 later on.  And maybe bool as return type?

I'll change intptr_t to void*. I don't trust that bool is the same in
both C and C++ and int seems to be a safe choice for an ABI.


 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..4c2d0f3 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -22,6 +22,7 @@ CPP_SOURCES := \
   core/event.hpp \
   core/format.cpp \
   core/format.hpp \
 + core/interop.cpp \
   core/kernel.cpp \
   core/kernel.hpp \
   core/memory.cpp \
 diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
 b/src/gallium/state_trackers/clover/core/event.hpp
 index 0e1359a..28f510f 100644
 --- a/src/gallium/state_trackers/clover/core/event.hpp
 +++ b/src/gallium/state_trackers/clover/core/event.hpp
 @@ -116,6 +116,10 @@ namespace clover {

friend class command_queue;

 +  struct pipe_fence_handle *get_fence() const {

 The convention in the surrounding code is to name such accessors as the
 object they access, how about pipe_fence_handle *fence() const?

OK.


 + return _fence;
 +  }
 +
 private:
virtual void fence(pipe_fence_handle *fence);
action profile(command_queue q, const action action) const;
 diff --git a/src/gallium/state_trackers/clover/core/interop.cpp 
 b/src/gallium/state_trackers/clover/core/interop.cpp
 new file mode 100644
 index 000..bb80cf5
 --- /dev/null
 +++ b/src/gallium/state_trackers/clover/core/interop.cpp

 This probably belongs in clover/api/, as it's technically implementing
 an API, clover/core/ is all about core data structures and such.

OK.

Marek
___
mesa-dev mailing list

[Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-26 Thread Marek Olšák
From: Marek Olšák marek.ol...@amd.com

v2: - move interop.cpp to clover/api
- change intptr_t to void* in the interface
- add a virtual function fence() to simplify some code
---
 src/gallium/include/state_tracker/opencl_interop.h | 42 +++
 src/gallium/state_trackers/clover/Makefile.sources |  1 +
 src/gallium/state_trackers/clover/api/interop.cpp  | 60 ++
 src/gallium/state_trackers/clover/core/event.hpp   |  8 +++
 src/gallium/targets/opencl/opencl.sym  |  1 +
 5 files changed, 112 insertions(+)
 create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
 create mode 100644 src/gallium/state_trackers/clover/api/interop.cpp

diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
b/src/gallium/include/state_tracker/opencl_interop.h
new file mode 100644
index 000..0c9f34a
--- /dev/null
+++ b/src/gallium/include/state_tracker/opencl_interop.h
@@ -0,0 +1,42 @@
+/**
+ *
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * Software), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **/
+
+#ifndef OPENCL_INTEROP_H
+#define OPENCL_INTEROP_H
+
+/* dlsym these without the _t suffix. You should get the correct symbols
+ * if the OpenCL driver is loaded.
+ *
+ * All functions return non-zero on success.
+ */
+
+typedef int (*opencl_dri_event_add_ref_t)(void *cl_event);
+typedef int (*opencl_dri_event_release_t)(void *cl_event);
+typedef int (*opencl_dri_event_wait_t)(void *cl_event, uint64_t timeout);
+typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(void 
*cl_event);
+
+#endif /* OPENCL_INTEROP_H */
diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
b/src/gallium/state_trackers/clover/Makefile.sources
index 5b3344c..9e30c69 100644
--- a/src/gallium/state_trackers/clover/Makefile.sources
+++ b/src/gallium/state_trackers/clover/Makefile.sources
@@ -4,6 +4,7 @@ CPP_SOURCES := \
api/dispatch.cpp \
api/dispatch.hpp \
api/event.cpp \
+   api/interop.cpp \
api/kernel.cpp \
api/memory.cpp \
api/platform.cpp \
diff --git a/src/gallium/state_trackers/clover/api/interop.cpp 
b/src/gallium/state_trackers/clover/api/interop.cpp
new file mode 100644
index 000..2bec839
--- /dev/null
+++ b/src/gallium/state_trackers/clover/api/interop.cpp
@@ -0,0 +1,60 @@
+//
+// Copyright 2015 Advanced Micro Devices, Inc.
+// All Rights Reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the Software),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#include core/event.hpp
+#include api/util.hpp
+
+using namespace clover;
+
+extern C {
+
+PUBLIC int
+opencl_dri_event_add_ref(cl_event _event)
+{
+   return clRetainEvent(_event) == CL_SUCCESS;
+}
+
+PUBLIC int
+opencl_dri_event_release(cl_event 

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-21 Thread Marek Olšák
On Tue, Apr 21, 2015 at 5:45 PM, Emil Velikov emil.l.veli...@gmail.com wrote:
 Hmm pretty sure I've read somewhere (old version of GCC's manual?) that
 such warnings are enabled by default and cannot be controlled by the
 compiler (for C++ of course). I'm not an C++ expect so it could be that
 the standard does not require declarations/prototypes for non static
 functions ?

A prototype is only required by C++ when a function is called.
Functions don't need prototypes for themselves. Only their call sites
need them.


 Seems like we're building clover without even a single -W flag - perhaps
 we could add some (not with this patch of course) ?

Yes, I agree.

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


Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-21 Thread Marek Olšák
Only C warns about that. I didn't see any warning with C++.

Marek

On Tue, Apr 21, 2015 at 3:44 PM, Emil Velikov emil.l.veli...@gmail.com wrote:
 On 14/04/15 22:19, Marek Olšák wrote:
 From: Marek Olšák marek.ol...@amd.com

 ---
  src/gallium/include/state_tracker/opencl_interop.h | 42 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
  src/gallium/state_trackers/clover/core/interop.cpp | 66 
 ++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..31a3bd3
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,42 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + *
 + * All functions return non-zero on success.
 + */
 +
 +typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(intptr_t 
 cl_event);
 +
 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..4c2d0f3 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -22,6 +22,7 @@ CPP_SOURCES := \
   core/event.hpp \
   core/format.cpp \
   core/format.hpp \
 + core/interop.cpp \
   core/kernel.cpp \
   core/kernel.hpp \
   core/memory.cpp \
 diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
 b/src/gallium/state_trackers/clover/core/event.hpp
 index 0e1359a..28f510f 100644
 --- a/src/gallium/state_trackers/clover/core/event.hpp
 +++ b/src/gallium/state_trackers/clover/core/event.hpp
 @@ -116,6 +116,10 @@ namespace clover {

friend class command_queue;

 +  struct pipe_fence_handle *get_fence() const {
 + return _fence;
 +  }
 +
 private:
virtual void fence(pipe_fence_handle *fence);
action profile(command_queue q, const action action) const;
 diff --git a/src/gallium/state_trackers/clover/core/interop.cpp 
 b/src/gallium/state_trackers/clover/core/interop.cpp
 new file mode 100644
 index 000..bb80cf5
 --- /dev/null
 +++ b/src/gallium/state_trackers/clover/core/interop.cpp
 @@ -0,0 +1,66 @@
 +//
 +// Copyright 2015 Advanced Micro Devices, Inc.
 +// All Rights Reserved.
 +//
 +// Permission is hereby granted, free of charge, to any person obtaining a
 +// copy of this software and associated documentation files (the 
 Software),
 +// to deal in the Software without restriction, including without limitation
 +// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 +// and/or sell copies of the Software, and to permit persons to whom the
 +// Software is furnished to do so, subject to the following conditions:
 +//
 +// The above copyright notice and this permission notice shall be included 
 in
 +// all copies or substantial portions of the Software.
 +//
 +// THE SOFTWARE IS PROVIDED AS 

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-21 Thread Emil Velikov
Hmm pretty sure I've read somewhere (old version of GCC's manual?) that
such warnings are enabled by default and cannot be controlled by the
compiler (for C++ of course). I'm not an C++ expect so it could be that
the standard does not require declarations/prototypes for non static
functions ?

Seems like we're building clover without even a single -W flag - perhaps
we could add some (not with this patch of course) ?

-Emil

On 21/04/15 13:13, Marek Olšák wrote:
 Only C warns about that. I didn't see any warning with C++.
 
 Marek
 
 On Tue, Apr 21, 2015 at 3:44 PM, Emil Velikov emil.l.veli...@gmail.com 
 wrote:
 On 14/04/15 22:19, Marek Olšák wrote:
 From: Marek Olšák marek.ol...@amd.com

 ---
  src/gallium/include/state_tracker/opencl_interop.h | 42 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
  src/gallium/state_trackers/clover/core/interop.cpp | 66 
 ++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..31a3bd3
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,42 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + 
 **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + *
 + * All functions return non-zero on success.
 + */
 +
 +typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t 
 timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(intptr_t 
 cl_event);
 +
 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..4c2d0f3 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -22,6 +22,7 @@ CPP_SOURCES := \
   core/event.hpp \
   core/format.cpp \
   core/format.hpp \
 + core/interop.cpp \
   core/kernel.cpp \
   core/kernel.hpp \
   core/memory.cpp \
 diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
 b/src/gallium/state_trackers/clover/core/event.hpp
 index 0e1359a..28f510f 100644
 --- a/src/gallium/state_trackers/clover/core/event.hpp
 +++ b/src/gallium/state_trackers/clover/core/event.hpp
 @@ -116,6 +116,10 @@ namespace clover {

friend class command_queue;

 +  struct pipe_fence_handle *get_fence() const {
 + return _fence;
 +  }
 +
 private:
virtual void fence(pipe_fence_handle *fence);
action profile(command_queue q, const action action) const;
 diff --git a/src/gallium/state_trackers/clover/core/interop.cpp 
 b/src/gallium/state_trackers/clover/core/interop.cpp
 new file mode 100644
 index 000..bb80cf5
 --- /dev/null
 +++ b/src/gallium/state_trackers/clover/core/interop.cpp
 @@ -0,0 +1,66 @@
 +//
 +// Copyright 2015 Advanced Micro Devices, Inc.
 +// All Rights Reserved.
 +//
 +// Permission is hereby granted, free of charge, to any person obtaining a
 +// copy of this software and associated documentation files (the 
 Software),
 +// to 

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-21 Thread Francisco Jerez
Marek Olšák mar...@gmail.com writes:

 From: Marek Olšák marek.ol...@amd.com

Hi Marek, looks mostly OK to me, a few nits inline,

 ---
  src/gallium/include/state_tracker/opencl_interop.h | 42 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
  src/gallium/state_trackers/clover/core/interop.cpp | 66 
 ++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp

 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..31a3bd3
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,42 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + *
 + * All functions return non-zero on success.
 + */
 +
 +typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(intptr_t 
 cl_event);
 +

Just curious, is there any reason you use intptr_t here and elsewhere
rather than cl_event or void *?  The former is an typedef of an opaque
pointer anyway.  Using CL types would likely avoid some ugly casts
later on.  And maybe bool as return type?

 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..4c2d0f3 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -22,6 +22,7 @@ CPP_SOURCES := \
   core/event.hpp \
   core/format.cpp \
   core/format.hpp \
 + core/interop.cpp \
   core/kernel.cpp \
   core/kernel.hpp \
   core/memory.cpp \
 diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
 b/src/gallium/state_trackers/clover/core/event.hpp
 index 0e1359a..28f510f 100644
 --- a/src/gallium/state_trackers/clover/core/event.hpp
 +++ b/src/gallium/state_trackers/clover/core/event.hpp
 @@ -116,6 +116,10 @@ namespace clover {
  
friend class command_queue;
  
 +  struct pipe_fence_handle *get_fence() const {

The convention in the surrounding code is to name such accessors as the
object they access, how about pipe_fence_handle *fence() const?

 + return _fence;
 +  }
 +
 private:
virtual void fence(pipe_fence_handle *fence);
action profile(command_queue q, const action action) const;
 diff --git a/src/gallium/state_trackers/clover/core/interop.cpp 
 b/src/gallium/state_trackers/clover/core/interop.cpp
 new file mode 100644
 index 000..bb80cf5
 --- /dev/null
 +++ b/src/gallium/state_trackers/clover/core/interop.cpp

This probably belongs in clover/api/, as it's technically implementing
an API, clover/core/ is all about core data structures and such.

 @@ -0,0 +1,66 @@
 +//
 +// Copyright 2015 Advanced Micro Devices, Inc.
 +// All Rights Reserved.
 +//
 +// Permission is hereby granted, free of charge, to any person obtaining a
 +// copy of this software and associated documentation files (the Software),
 +// to deal in the Software without restriction, 

Re: [Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-21 Thread Emil Velikov
On 14/04/15 22:19, Marek Olšák wrote:
 From: Marek Olšák marek.ol...@amd.com
 
 ---
  src/gallium/include/state_tracker/opencl_interop.h | 42 ++
  src/gallium/state_trackers/clover/Makefile.sources |  1 +
  src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
  src/gallium/state_trackers/clover/core/interop.cpp | 66 
 ++
  src/gallium/targets/opencl/opencl.sym  |  1 +
  5 files changed, 114 insertions(+)
  create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
  create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp
 
 diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
 b/src/gallium/include/state_tracker/opencl_interop.h
 new file mode 100644
 index 000..31a3bd3
 --- /dev/null
 +++ b/src/gallium/include/state_tracker/opencl_interop.h
 @@ -0,0 +1,42 @@
 +/**
 + *
 + * Copyright 2015 Advanced Micro Devices, Inc.
 + * All Rights Reserved.
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the
 + * Software), to deal in the Software without restriction, including
 + * without limitation the rights to use, copy, modify, merge, publish,
 + * distribute, sub license, and/or sell copies of the Software, and to
 + * permit persons to whom the Software is furnished to do so, subject to
 + * the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 + * next paragraph) shall be included in all copies or substantial portions
 + * of the Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + *
 + **/
 +
 +#ifndef OPENCL_INTEROP_H
 +#define OPENCL_INTEROP_H
 +
 +/* dlsym these without the _t suffix. You should get the correct symbols
 + * if the OpenCL driver is loaded.
 + *
 + * All functions return non-zero on success.
 + */
 +
 +typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
 +typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t timeout);
 +typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(intptr_t 
 cl_event);
 +
 +#endif /* OPENCL_INTEROP_H */
 diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
 b/src/gallium/state_trackers/clover/Makefile.sources
 index 5b3344c..4c2d0f3 100644
 --- a/src/gallium/state_trackers/clover/Makefile.sources
 +++ b/src/gallium/state_trackers/clover/Makefile.sources
 @@ -22,6 +22,7 @@ CPP_SOURCES := \
   core/event.hpp \
   core/format.cpp \
   core/format.hpp \
 + core/interop.cpp \
   core/kernel.cpp \
   core/kernel.hpp \
   core/memory.cpp \
 diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
 b/src/gallium/state_trackers/clover/core/event.hpp
 index 0e1359a..28f510f 100644
 --- a/src/gallium/state_trackers/clover/core/event.hpp
 +++ b/src/gallium/state_trackers/clover/core/event.hpp
 @@ -116,6 +116,10 @@ namespace clover {
  
friend class command_queue;
  
 +  struct pipe_fence_handle *get_fence() const {
 + return _fence;
 +  }
 +
 private:
virtual void fence(pipe_fence_handle *fence);
action profile(command_queue q, const action action) const;
 diff --git a/src/gallium/state_trackers/clover/core/interop.cpp 
 b/src/gallium/state_trackers/clover/core/interop.cpp
 new file mode 100644
 index 000..bb80cf5
 --- /dev/null
 +++ b/src/gallium/state_trackers/clover/core/interop.cpp
 @@ -0,0 +1,66 @@
 +//
 +// Copyright 2015 Advanced Micro Devices, Inc.
 +// All Rights Reserved.
 +//
 +// Permission is hereby granted, free of charge, to any person obtaining a
 +// copy of this software and associated documentation files (the Software),
 +// to deal in the Software without restriction, including without limitation
 +// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 +// and/or sell copies of the Software, and to permit persons to whom the
 +// Software is furnished to do so, subject to the following conditions:
 +//
 +// The above copyright notice and this permission notice shall be included in
 +// all copies or substantial portions of the Software.
 +//
 +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 +// FITNESS FOR A 

[Mesa-dev] [PATCH 09/10] gallium, clover: add OpenCL interoperability support for CL events

2015-04-14 Thread Marek Olšák
From: Marek Olšák marek.ol...@amd.com

---
 src/gallium/include/state_tracker/opencl_interop.h | 42 ++
 src/gallium/state_trackers/clover/Makefile.sources |  1 +
 src/gallium/state_trackers/clover/core/event.hpp   |  4 ++
 src/gallium/state_trackers/clover/core/interop.cpp | 66 ++
 src/gallium/targets/opencl/opencl.sym  |  1 +
 5 files changed, 114 insertions(+)
 create mode 100644 src/gallium/include/state_tracker/opencl_interop.h
 create mode 100644 src/gallium/state_trackers/clover/core/interop.cpp

diff --git a/src/gallium/include/state_tracker/opencl_interop.h 
b/src/gallium/include/state_tracker/opencl_interop.h
new file mode 100644
index 000..31a3bd3
--- /dev/null
+++ b/src/gallium/include/state_tracker/opencl_interop.h
@@ -0,0 +1,42 @@
+/**
+ *
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * Software), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **/
+
+#ifndef OPENCL_INTEROP_H
+#define OPENCL_INTEROP_H
+
+/* dlsym these without the _t suffix. You should get the correct symbols
+ * if the OpenCL driver is loaded.
+ *
+ * All functions return non-zero on success.
+ */
+
+typedef int (*opencl_dri_event_add_ref_t)(intptr_t cl_event);
+typedef int (*opencl_dri_event_release_t)(intptr_t cl_event);
+typedef int (*opencl_dri_event_wait_t)(intptr_t cl_event, uint64_t timeout);
+typedef struct pipe_fence_handle *(*opencl_dri_event_get_fence_t)(intptr_t 
cl_event);
+
+#endif /* OPENCL_INTEROP_H */
diff --git a/src/gallium/state_trackers/clover/Makefile.sources 
b/src/gallium/state_trackers/clover/Makefile.sources
index 5b3344c..4c2d0f3 100644
--- a/src/gallium/state_trackers/clover/Makefile.sources
+++ b/src/gallium/state_trackers/clover/Makefile.sources
@@ -22,6 +22,7 @@ CPP_SOURCES := \
core/event.hpp \
core/format.cpp \
core/format.hpp \
+   core/interop.cpp \
core/kernel.cpp \
core/kernel.hpp \
core/memory.cpp \
diff --git a/src/gallium/state_trackers/clover/core/event.hpp 
b/src/gallium/state_trackers/clover/core/event.hpp
index 0e1359a..28f510f 100644
--- a/src/gallium/state_trackers/clover/core/event.hpp
+++ b/src/gallium/state_trackers/clover/core/event.hpp
@@ -116,6 +116,10 @@ namespace clover {
 
   friend class command_queue;
 
+  struct pipe_fence_handle *get_fence() const {
+ return _fence;
+  }
+
private:
   virtual void fence(pipe_fence_handle *fence);
   action profile(command_queue q, const action action) const;
diff --git a/src/gallium/state_trackers/clover/core/interop.cpp 
b/src/gallium/state_trackers/clover/core/interop.cpp
new file mode 100644
index 000..bb80cf5
--- /dev/null
+++ b/src/gallium/state_trackers/clover/core/interop.cpp
@@ -0,0 +1,66 @@
+//
+// Copyright 2015 Advanced Micro Devices, Inc.
+// All Rights Reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the Software),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+// OTHER