<div dir="ltr">Hi Elie,<div><br></div><div>Thanks for looking at this.  I'll get a fix for this up.<div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 7, 2018 at 6:43 AM Elie Tournier <<a href="mailto:tournier.elie@gmail.com">tournier.elie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello David,<br>
<br>
I had a look to your patch.<br>
See comment below.<br>
<br>
Elie<br>
<br>
On Wed, May 30, 2018 at 11:50:19AM -0700, David Riley wrote:<br>
> Allow resources created externally (eg gbm created buffers as<br>
> dma bufs) to be used.<br>
> <br>
> Signed-off-by: David Riley <<a href="mailto:davidriley@chromium.org" target="_blank">davidriley@chromium.org</a>><br>
> ---<br>
>  src/virglrenderer.c  | 11 ++++++++++-<br>
>  src/virglrenderer.h  |  1 +<br>
>  src/vrend_renderer.c |  7 +++++--<br>
>  src/vrend_renderer.h |  2 +-<br>
>  4 files changed, 17 insertions(+), 4 deletions(-)<br>
> <br>
> diff --git a/src/virglrenderer.c b/src/virglrenderer.c<br>
> index c89cb60..7397cfa 100644<br>
> --- a/src/virglrenderer.c<br>
> +++ b/src/virglrenderer.c<br>
> @@ -60,7 +60,16 @@ static int use_context = CONTEXT_NONE;<br>
>  <br>
>  int virgl_renderer_resource_create(struct virgl_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs)<br>
>  {<br>
> -   return vrend_renderer_resource_create((struct vrend_renderer_resource_create_args *)args, iov, num_iovs);<br>
> +   return vrend_renderer_resource_create((struct vrend_renderer_resource_create_args *)args, iov, num_iovs, NULL);<br>
> +}<br>
> +<br>
> +int virgl_renderer_resource_import_eglimage(struct virgl_renderer_resource_create_args *args, void *image)<br>
> +{<br>
> +#ifdef HAVE_EPOXY_EGL_H<br>
> +   return vrend_renderer_resource_create((struct vrend_renderer_resource_create_args *)args, 0, 0, image);<br>
> +#else<br>
> +   return EINVAL;<br>
> +#endif<br>
>  }<br>
>  <br>
>  void virgl_renderer_resource_unref(uint32_t res_handle)<br>
> diff --git a/src/virglrenderer.h b/src/virglrenderer.h<br>
> index 9596dce..dc9036f 100644<br>
> --- a/src/virglrenderer.h<br>
> +++ b/src/virglrenderer.h<br>
> @@ -103,6 +103,7 @@ struct virgl_renderer_resource_create_args {<br>
>  /* new API */<br>
>  <br>
>  VIRGL_EXPORT int virgl_renderer_resource_create(struct virgl_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs);<br>
> +VIRGL_EXPORT int virgl_renderer_resource_import_eglimage(struct virgl_renderer_resource_create_args *args, void *image);<br>
>  VIRGL_EXPORT void virgl_renderer_resource_unref(uint32_t res_handle);<br>
>  <br>
>  VIRGL_EXPORT int virgl_renderer_context_create(uint32_t handle, uint32_t nlen, const char *name);<br>
> diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c<br>
> index df575b1..f8e5cda 100644<br>
> --- a/src/vrend_renderer.c<br>
> +++ b/src/vrend_renderer.c<br>
> @@ -4588,7 +4588,7 @@ static void vrend_create_buffer(struct vrend_resource *gr, uint32_t width)<br>
>     gr->is_buffer = true;<br>
>  }<br>
>  <br>
> -int vrend_renderer_resource_create(struct vrend_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs)<br>
> +int vrend_renderer_resource_create(struct vrend_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs, void *image_oes)<br>
>  {<br>
>     struct vrend_resource *gr;<br>
>     int level;<br>
> @@ -4693,7 +4693,10 @@ int vrend_renderer_resource_create(struct vrend_renderer_resource_create_args *a<br>
>           return EINVAL;<br>
>        }<br>
>  <br>
> -      if (args->nr_samples > 1) {<br>
> +      if (image_oes &&<br>
> +          epoxy_has_gl_extension("GL_OES_EGL_image_external")) {<br>
<br>
If we provide an image but the system doesn't support the extension, we fallback silently.<br>
With that fix, LGTM. (I didn't test this patch tho.)<br>
<br>
> +         glEGLImageTargetTexture2DOES(gr->target, (GLeglImageOES) image_oes);<br>
> +      } else if (args->nr_samples > 1) {<br>
>           if (vrend_state.use_gles) {<br>
>              if (gr->target == GL_TEXTURE_2D_MULTISAMPLE) {<br>
>                 glTexStorage2DMultisample(gr->target, args->nr_samples,<br>
> diff --git a/src/vrend_renderer.h b/src/vrend_renderer.h<br>
> index 0235d50..8d1488c 100644<br>
> --- a/src/vrend_renderer.h<br>
> +++ b/src/vrend_renderer.h<br>
> @@ -164,7 +164,7 @@ struct vrend_renderer_resource_create_args {<br>
>     uint32_t flags;<br>
>  };<br>
>  <br>
> -int vrend_renderer_resource_create(struct vrend_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs);<br>
> +int vrend_renderer_resource_create(struct vrend_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs, void *image_eos);<br>
>  <br>
>  void vrend_renderer_resource_unref(uint32_t handle);<br>
>  <br>
> -- <br>
> 2.7.4<br>
> <br>
> _______________________________________________<br>
> virglrenderer-devel mailing list<br>
> <a href="mailto:virglrenderer-devel@lists.freedesktop.org" target="_blank">virglrenderer-devel@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/virglrenderer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/virglrenderer-devel</a><br>
</blockquote></div></div></div></div>