Message ID | 20250325234115.1332883-5-vivek.kasireddy@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | ui/spice: Enable gl=on option for non-local or remote clients | expand |
On 3/26/25 02:39, Vivek Kasireddy wrote: > +void surface_gl_create_texture_from_fd(DisplaySurface *surface, > + int fd, GLuint *texture) > +{ > + unsigned long size = surface_stride(surface) * surface_height(surface); > + GLuint mem_obj; > + > + if (!epoxy_has_gl_extension("GL_EXT_memory_object") || > + !epoxy_has_gl_extension("GL_EXT_memory_object_fd")) { > + return; > + } > + > +#ifdef GL_EXT_memory_object_fd > + glCreateMemoryObjectsEXT(1, &mem_obj); > + glImportMemoryFdEXT(mem_obj, size, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd); > + if (!glIsMemoryObjectEXT(mem_obj)) { This check should always succeed. glGetError() should be used for glImportMemoryFdEXT() failure checking. Won't hurt to print error messages instead of failing silently.
Hi Dmitry, > Subject: Re: [PATCH v2 4/6] ui/console-gl: Add a helper to create a texture > with linear memory layout > > On 3/26/25 02:39, Vivek Kasireddy wrote: > > +void surface_gl_create_texture_from_fd(DisplaySurface *surface, > > + int fd, GLuint *texture) > > +{ > > + unsigned long size = surface_stride(surface) * surface_height(surface); > > + GLuint mem_obj; > > + > > + if (!epoxy_has_gl_extension("GL_EXT_memory_object") || > > + !epoxy_has_gl_extension("GL_EXT_memory_object_fd")) { > > + return; > > + } > > + > > +#ifdef GL_EXT_memory_object_fd > > + glCreateMemoryObjectsEXT(1, &mem_obj); > > + glImportMemoryFdEXT(mem_obj, size, > GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd); > > + if (!glIsMemoryObjectEXT(mem_obj)) { > > This check should always succeed. glGetError() should be used for > glImportMemoryFdEXT() failure checking. > > Won't hurt to print error messages instead of failing silently. Makes sense; will add glGetError() and error messages in the next version. Thanks, Vivek > > -- > Best regards, > Dmitry
diff --git a/include/ui/console.h b/include/ui/console.h index 46b3128185..fa2dd53e2e 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -422,6 +422,8 @@ bool console_gl_check_format(DisplayChangeListener *dcl, pixman_format_code_t format); void surface_gl_create_texture(QemuGLShader *gls, DisplaySurface *surface); +void surface_gl_create_texture_from_fd(DisplaySurface *surface, + int fd, GLuint *texture); void surface_gl_update_texture(QemuGLShader *gls, DisplaySurface *surface, int x, int y, int w, int h); diff --git a/ui/console-gl.c b/ui/console-gl.c index 103b954017..8ee882bc3c 100644 --- a/ui/console-gl.c +++ b/ui/console-gl.c @@ -96,6 +96,32 @@ void surface_gl_create_texture(QemuGLShader *gls, glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } +void surface_gl_create_texture_from_fd(DisplaySurface *surface, + int fd, GLuint *texture) +{ + unsigned long size = surface_stride(surface) * surface_height(surface); + GLuint mem_obj; + + if (!epoxy_has_gl_extension("GL_EXT_memory_object") || + !epoxy_has_gl_extension("GL_EXT_memory_object_fd")) { + return; + } + +#ifdef GL_EXT_memory_object_fd + glCreateMemoryObjectsEXT(1, &mem_obj); + glImportMemoryFdEXT(mem_obj, size, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd); + if (!glIsMemoryObjectEXT(mem_obj)) { + return; + } + + glGenTextures(1, texture); + glBindTexture(GL_TEXTURE_2D, *texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_TILING_EXT, GL_LINEAR_TILING_EXT); + glTexStorageMem2DEXT(GL_TEXTURE_2D, 1, GL_RGBA8, surface_width(surface), + surface_height(surface), mem_obj, 0); +#endif +} + void surface_gl_update_texture(QemuGLShader *gls, DisplaySurface *surface, int x, int y, int w, int h)
There are cases where we do not want the memory layout of a texture to be tiled as the component processing the texture would not know how to de-tile either via software or hardware. Therefore, ensuring that the memory backing the texture has a linear layout is absolutely necessary in these situations. Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com> Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> --- include/ui/console.h | 2 ++ ui/console-gl.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+)