gl-renderer: Add return value to attach handlers
It's good to know if we succeeded or failed to import our buffers. This will also later make for a more smooth transition when we start returning a gl_buffer_state from them. Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
@@ -1980,7 +1980,7 @@ ensure_textures(struct gl_surface_state *gs, GLenum target, int num_textures)
|
|||||||
glBindTexture(target, 0);
|
glBindTexture(target, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
|
gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
|
||||||
struct wl_shm_buffer *shm_buffer)
|
struct wl_shm_buffer *shm_buffer)
|
||||||
{
|
{
|
||||||
@@ -2152,7 +2152,7 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
|
|||||||
unsupported:
|
unsupported:
|
||||||
weston_log("warning: unknown or unsupported shm buffer format: %08x\n",
|
weston_log("warning: unknown or unsupported shm buffer format: %08x\n",
|
||||||
wl_shm_buffer_get_format(shm_buffer));
|
wl_shm_buffer_get_format(shm_buffer));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only allocate a texture if it doesn't match existing one.
|
/* Only allocate a texture if it doesn't match existing one.
|
||||||
@@ -2180,6 +2180,8 @@ unsupported:
|
|||||||
|
|
||||||
ensure_textures(gs, GL_TEXTURE_2D, num_planes);
|
ensure_textures(gs, GL_TEXTURE_2D, num_planes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@@ -2243,7 +2245,7 @@ gl_renderer_fill_buffer_info(struct weston_compositor *ec,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
|
gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
|
||||||
{
|
{
|
||||||
struct weston_compositor *ec = es->compositor;
|
struct weston_compositor *ec = es->compositor;
|
||||||
@@ -2266,7 +2268,7 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
|
|||||||
EGL_TEXTURE_FORMAT, &format)) {
|
EGL_TEXTURE_FORMAT, &format)) {
|
||||||
weston_log("eglQueryWaylandBufferWL failed\n");
|
weston_log("eglQueryWaylandBufferWL failed\n");
|
||||||
gl_renderer_print_egl_error_state();
|
gl_renderer_print_egl_error_state();
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
@@ -2317,7 +2319,7 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
|
|||||||
weston_log("failed to create img for plane %d\n", i);
|
weston_log("failed to create img for plane %d\n", i);
|
||||||
while (--i >= 0)
|
while (--i >= 0)
|
||||||
egl_image_unref(gb->images[i]);
|
egl_image_unref(gb->images[i]);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0 + i);
|
glActiveTexture(GL_TEXTURE0 + i);
|
||||||
@@ -2329,6 +2331,8 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
|
|||||||
gb->height = buffer->height;
|
gb->height = buffer->height;
|
||||||
gb->buffer_type = BUFFER_TYPE_EGL;
|
gb->buffer_type = BUFFER_TYPE_EGL;
|
||||||
gb->y_inverted = (buffer->buffer_origin == ORIGIN_TOP_LEFT);
|
gb->y_inverted = (buffer->buffer_origin == ORIGIN_TOP_LEFT);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2889,7 +2893,7 @@ gl_renderer_import_dmabuf(struct weston_compositor *ec,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
gl_renderer_attach_dmabuf(struct weston_surface *surface,
|
gl_renderer_attach_dmabuf(struct weston_surface *surface,
|
||||||
struct weston_buffer *buffer,
|
struct weston_buffer *buffer,
|
||||||
struct linux_dmabuf_buffer *dmabuf)
|
struct linux_dmabuf_buffer *dmabuf)
|
||||||
@@ -2913,7 +2917,7 @@ gl_renderer_attach_dmabuf(struct weston_surface *surface,
|
|||||||
surface->is_opaque = pixel_format_is_opaque(buffer->pixel_format);
|
surface->is_opaque = pixel_format_is_opaque(buffer->pixel_format);
|
||||||
|
|
||||||
if (dmabuf->direct_display)
|
if (dmabuf->direct_display)
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
image = linux_dmabuf_buffer_get_user_data(dmabuf);
|
image = linux_dmabuf_buffer_get_user_data(dmabuf);
|
||||||
|
|
||||||
@@ -2933,6 +2937,8 @@ gl_renderer_attach_dmabuf(struct weston_surface *surface,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gb->shader_variant = image->shader_variant;
|
gb->shader_variant = image->shader_variant;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct weston_drm_format_array *
|
static const struct weston_drm_format_array *
|
||||||
@@ -3000,7 +3006,7 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
gl_renderer_attach_solid(struct weston_surface *surface,
|
gl_renderer_attach_solid(struct weston_surface *surface,
|
||||||
struct weston_buffer *buffer)
|
struct weston_buffer *buffer)
|
||||||
{
|
{
|
||||||
@@ -3020,6 +3026,8 @@ gl_renderer_attach_solid(struct weston_surface *surface,
|
|||||||
weston_buffer_reference(&gs->buffer_ref, NULL,
|
weston_buffer_reference(&gs->buffer_ref, NULL,
|
||||||
BUFFER_WILL_NOT_BE_ACCESSED);
|
BUFFER_WILL_NOT_BE_ACCESSED);
|
||||||
weston_buffer_release_reference(&gs->buffer_release_ref, NULL);
|
weston_buffer_release_reference(&gs->buffer_release_ref, NULL);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -3027,6 +3035,7 @@ gl_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
|
|||||||
{
|
{
|
||||||
struct gl_surface_state *gs = get_surface_state(es);
|
struct gl_surface_state *gs = get_surface_state(es);
|
||||||
struct gl_buffer_state *gb = &gs->buffer;
|
struct gl_buffer_state *gb = &gs->buffer;
|
||||||
|
bool ret = false;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
weston_buffer_reference(&gs->buffer_ref, buffer,
|
weston_buffer_reference(&gs->buffer_ref, buffer,
|
||||||
@@ -3052,21 +3061,24 @@ gl_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
|
|||||||
|
|
||||||
switch (buffer->type) {
|
switch (buffer->type) {
|
||||||
case WESTON_BUFFER_SHM:
|
case WESTON_BUFFER_SHM:
|
||||||
gl_renderer_attach_shm(es, buffer, buffer->shm_buffer);
|
ret = gl_renderer_attach_shm(es, buffer, buffer->shm_buffer);
|
||||||
return;
|
break;
|
||||||
case WESTON_BUFFER_DMABUF:
|
case WESTON_BUFFER_DMABUF:
|
||||||
gl_renderer_attach_dmabuf(es, buffer, buffer->dmabuf);
|
ret = gl_renderer_attach_dmabuf(es, buffer, buffer->dmabuf);
|
||||||
return;
|
break;
|
||||||
case WESTON_BUFFER_RENDERER_OPAQUE:
|
case WESTON_BUFFER_RENDERER_OPAQUE:
|
||||||
gl_renderer_attach_egl(es, buffer);
|
ret = gl_renderer_attach_egl(es, buffer);
|
||||||
return;
|
break;
|
||||||
case WESTON_BUFFER_SOLID:
|
case WESTON_BUFFER_SOLID:
|
||||||
gl_renderer_attach_solid(es, buffer);
|
ret = gl_renderer_attach_solid(es, buffer);
|
||||||
return;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
weston_log("unhandled buffer type!\n");
|
weston_log("unhandled buffer type!\n");
|
||||||
weston_buffer_reference(&gs->buffer_ref, NULL,
|
weston_buffer_reference(&gs->buffer_ref, NULL,
|
||||||
BUFFER_WILL_NOT_BE_ACCESSED);
|
BUFFER_WILL_NOT_BE_ACCESSED);
|
||||||
|
|||||||
Reference in New Issue
Block a user