diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h index fbf17dea..88dc430b 100644 --- a/include/wlr/render/interface.h +++ b/include/wlr/render/interface.h @@ -57,9 +57,6 @@ struct wlr_renderer_impl { void (*destroy)(struct wlr_renderer *renderer); bool (*init_wl_display)(struct wlr_renderer *renderer, struct wl_display *wl_display); - bool (*blit_dmabuf)(struct wlr_renderer *renderer, - struct wlr_dmabuf_attributes *dst, - struct wlr_dmabuf_attributes *src); int (*get_drm_fd)(struct wlr_renderer *renderer); }; diff --git a/include/wlr/render/wlr_renderer.h b/include/wlr/render/wlr_renderer.h index 96268e38..8369e0f2 100644 --- a/include/wlr/render/wlr_renderer.h +++ b/include/wlr/render/wlr_renderer.h @@ -114,11 +114,6 @@ bool wlr_renderer_read_pixels(struct wlr_renderer *r, uint32_t fmt, uint32_t *flags, uint32_t stride, uint32_t width, uint32_t height, uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, void *data); -/** - * Blits the dmabuf in src onto the one in dst. - */ -bool wlr_renderer_blit_dmabuf(struct wlr_renderer *r, - struct wlr_dmabuf_attributes *dst, struct wlr_dmabuf_attributes *src); /** * Creates necessary shm and invokes the initialization of the implementation. * diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index eb93b3b4..1814ad07 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -530,87 +530,6 @@ static bool gles2_read_pixels(struct wlr_renderer *wlr_renderer, return glGetError() == GL_NO_ERROR; } -static bool gles2_blit_dmabuf(struct wlr_renderer *wlr_renderer, - struct wlr_dmabuf_attributes *dst_attr, - struct wlr_dmabuf_attributes *src_attr) { - struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer); - if (!renderer->procs.glEGLImageTargetRenderbufferStorageOES) { - return false; - } - - struct wlr_egl_context old_context; - wlr_egl_save_context(&old_context); - - bool r = false; - struct wlr_texture *src_tex = - wlr_texture_from_dmabuf(wlr_renderer, src_attr); - if (!src_tex) { - goto restore_context_out; - } - - // TODO: get inverted_y right - // This is to take into account y-inversion on both buffers rather than - // just the source buffer. - bool src_inverted_y = - !!(src_attr->flags & WLR_DMABUF_ATTRIBUTES_FLAGS_Y_INVERT); - bool dst_inverted_y = - !!(dst_attr->flags & WLR_DMABUF_ATTRIBUTES_FLAGS_Y_INVERT); - struct wlr_gles2_texture *gles2_src_tex = gles2_get_texture(src_tex); - gles2_src_tex->inverted_y = src_inverted_y ^ dst_inverted_y; - - if (!wlr_egl_make_current(renderer->egl)) { - goto texture_destroy_out; - } - - // TODO: The imported buffer should be checked with - // eglQueryDmaBufModifiersEXT to see if it may be modified. - bool external_only = false; - EGLImageKHR image = wlr_egl_create_image_from_dmabuf(renderer->egl, dst_attr, - &external_only); - if (image == EGL_NO_IMAGE_KHR) { - goto texture_destroy_out; - } - - GLuint rbo = 0; - glGenRenderbuffers(1, &rbo); - glBindRenderbuffer(GL_RENDERBUFFER, rbo); - renderer->procs.glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, - image); - glBindRenderbuffer(GL_RENDERBUFFER, 0); - - GLuint fbo = 0; - glGenFramebuffers(1, &fbo); - glBindFramebuffer(GL_FRAMEBUFFER, fbo); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, - GL_RENDERBUFFER, rbo); - - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (status != GL_FRAMEBUFFER_COMPLETE) { - goto out; - } - - // TODO: use ANGLE_framebuffer_blit if available - float mat[9]; - wlr_matrix_identity(mat); - - wlr_renderer_begin(wlr_renderer, dst_attr->width, dst_attr->height); - wlr_renderer_clear(wlr_renderer, (float[]){ 0.0, 0.0, 0.0, 0.0 }); - wlr_render_texture_with_matrix(wlr_renderer, src_tex, mat, 1.0f); - wlr_renderer_end(wlr_renderer); - - r = true; -out: - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glDeleteFramebuffers(1, &fbo); - glDeleteRenderbuffers(1, &rbo); - wlr_egl_destroy_image(renderer->egl, image); -texture_destroy_out: - wlr_texture_destroy(src_tex); -restore_context_out: - wlr_egl_restore_context(&old_context); - return r; -} - static bool gles2_init_wl_display(struct wlr_renderer *wlr_renderer, struct wl_display *wl_display) { struct wlr_gles2_renderer *renderer = @@ -707,7 +626,6 @@ static const struct wlr_renderer_impl renderer_impl = { .texture_from_wl_drm = gles2_texture_from_wl_drm, .texture_from_dmabuf = gles2_texture_from_dmabuf, .init_wl_display = gles2_init_wl_display, - .blit_dmabuf = gles2_blit_dmabuf, .get_drm_fd = gles2_get_drm_fd, }; diff --git a/render/wlr_renderer.c b/render/wlr_renderer.c index 027c5cf9..6ee745a6 100644 --- a/render/wlr_renderer.c +++ b/render/wlr_renderer.c @@ -200,16 +200,6 @@ bool wlr_renderer_read_pixels(struct wlr_renderer *r, uint32_t fmt, src_x, src_y, dst_x, dst_y, data); } -bool wlr_renderer_blit_dmabuf(struct wlr_renderer *r, - struct wlr_dmabuf_attributes *dst, - struct wlr_dmabuf_attributes *src) { - assert(!r->rendering); - if (!r->impl->blit_dmabuf) { - return false; - } - return r->impl->blit_dmabuf(r, dst, src); -} - bool wlr_renderer_init_wl_display(struct wlr_renderer *r, struct wl_display *wl_display) { if (wl_display_init_shm(wl_display)) {