renderer: Set surface->is_opaque in the core

No need for the renderers to do this now that we know what all of the
formats are.

Signed-off-by: Daniel Stone <daniels@collabora.com>
dev
Daniel Stone 3 years ago
parent 193de3c2cf
commit c9253c0012
  1. 4
      libweston/compositor.c
  2. 2
      libweston/pixman-renderer.c
  3. 20
      libweston/renderer-gl/gl-renderer.c

@ -2656,6 +2656,7 @@ weston_surface_attach_solid(struct weston_surface *surface,
surface->is_opaque = true;
pixman_region32_init_rect(&surface->opaque, 0, 0, w, h);
} else {
surface->is_opaque = false;
pixman_region32_init(&surface->opaque);
}
}
@ -2688,6 +2689,9 @@ weston_surface_attach(struct weston_surface *surface,
weston_surface_calculate_size_from_buffer(surface);
weston_presentation_feedback_discard_list(&surface->feedback_list);
if (buffer)
surface->is_opaque = pixel_format_is_opaque(buffer->pixel_format);
}
/** weston_compositor_damage_all

@ -714,8 +714,6 @@ pixman_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
return;
}
es->is_opaque = pixel_format_is_opaque(pixel_info);
ps->image = pixman_image_create_bits(pixel_info->pixman_format,
buffer->width, buffer->height,
wl_shm_buffer_get_data(shm_buffer),

@ -1994,21 +1994,18 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 4;
gl_format[0] = GL_BGRA_EXT;
gl_pixel_type = GL_UNSIGNED_BYTE;
es->is_opaque = true;
break;
case WL_SHM_FORMAT_ARGB8888:
gb->shader_variant = SHADER_VARIANT_RGBA;
pitch = wl_shm_buffer_get_stride(shm_buffer) / 4;
gl_format[0] = GL_BGRA_EXT;
gl_pixel_type = GL_UNSIGNED_BYTE;
es->is_opaque = false;
break;
case WL_SHM_FORMAT_RGB565:
gb->shader_variant = SHADER_VARIANT_RGBX;
pitch = wl_shm_buffer_get_stride(shm_buffer) / 2;
gl_format[0] = GL_RGB;
gl_pixel_type = GL_UNSIGNED_SHORT_5_6_5;
es->is_opaque = true;
break;
#if __BYTE_ORDER == __LITTLE_ENDIAN
case WL_SHM_FORMAT_ABGR2101010:
@ -2019,7 +2016,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 4;
gl_format[0] = using_glesv2 ? GL_RGBA : GL_RGB10_A2;
gl_pixel_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT;
es->is_opaque = false;
break;
case WL_SHM_FORMAT_XBGR2101010:
if (!gr->has_texture_type_2_10_10_10_rev) {
@ -2029,7 +2025,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 4;
gl_format[0] = using_glesv2 ? GL_RGBA : GL_RGB10_A2;
gl_pixel_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT;
es->is_opaque = true;
break;
case WL_SHM_FORMAT_ABGR16161616F:
if (!gr->gl_supports_color_transforms)
@ -2038,7 +2033,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 8;
gl_format[0] = GL_RGBA16F;
gl_pixel_type = GL_HALF_FLOAT;
es->is_opaque = false;
break;
case WL_SHM_FORMAT_XBGR16161616F:
if (!gr->gl_supports_color_transforms)
@ -2047,7 +2041,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 8;
gl_format[0] = GL_RGBA16F;
gl_pixel_type = GL_HALF_FLOAT;
es->is_opaque = true;
break;
case WL_SHM_FORMAT_ABGR16161616:
if (!gr->has_texture_norm16)
@ -2056,7 +2049,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 8;
gl_format[0] = GL_RGBA16_EXT;
gl_pixel_type = GL_UNSIGNED_SHORT;
es->is_opaque = false;
break;
case WL_SHM_FORMAT_XBGR16161616:
if (!gr->has_texture_norm16)
@ -2065,7 +2057,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 8;
gl_format[0] = GL_RGBA16_EXT;
gl_pixel_type = GL_UNSIGNED_SHORT;
es->is_opaque = true;
break;
#endif
case WL_SHM_FORMAT_YUV420:
@ -2090,7 +2081,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
gl_format[1] = GL_LUMINANCE;
gl_format[2] = GL_LUMINANCE;
}
es->is_opaque = true;
break;
case WL_SHM_FORMAT_NV12:
pitch = wl_shm_buffer_get_stride(shm_buffer);
@ -2109,7 +2099,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
gl_format[0] = GL_LUMINANCE;
gl_format[1] = GL_LUMINANCE_ALPHA;
}
es->is_opaque = true;
break;
case WL_SHM_FORMAT_YUYV:
gb->shader_variant = SHADER_VARIANT_Y_XUXV;
@ -2124,7 +2113,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
else
gl_format[0] = GL_LUMINANCE_ALPHA;
gl_format[1] = GL_BGRA_EXT;
es->is_opaque = true;
break;
case WL_SHM_FORMAT_XYUV8888:
/*
@ -2135,7 +2123,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer)
pitch = wl_shm_buffer_get_stride(shm_buffer) / 4;
gl_format[0] = GL_RGBA;
gl_pixel_type = GL_UNSIGNED_BYTE;
es->is_opaque = true;
break;
default:
unsupported:
@ -2251,7 +2238,6 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
egl_image_unref(gb->images[i]);
gb->images[i] = NULL;
}
es->is_opaque = false;
if (!gr->has_bind_display ||
!gr->query_buffer(gr->egl_display, buffer->legacy_buffer,
@ -2263,7 +2249,6 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
switch (format) {
case EGL_TEXTURE_RGB:
es->is_opaque = true;
/* fallthrough */
case EGL_TEXTURE_RGBA:
default:
@ -2277,17 +2262,14 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
case EGL_TEXTURE_Y_UV_WL:
num_planes = 2;
gb->shader_variant = SHADER_VARIANT_Y_UV;
es->is_opaque = true;
break;
case EGL_TEXTURE_Y_U_V_WL:
num_planes = 3;
gb->shader_variant = SHADER_VARIANT_Y_U_V;
es->is_opaque = true;
break;
case EGL_TEXTURE_Y_XUXV_WL:
num_planes = 2;
gb->shader_variant = SHADER_VARIANT_Y_XUXV;
es->is_opaque = true;
break;
}
@ -2895,7 +2877,6 @@ gl_renderer_attach_dmabuf(struct weston_surface *surface,
gb->num_images = 0;
gb->direct_display = dmabuf->direct_display;
surface->is_opaque = pixel_format_is_opaque(buffer->pixel_format);
if (dmabuf->direct_display)
return true;
@ -3058,7 +3039,6 @@ out:
glDeleteTextures(gs->num_textures, gs->textures);
gs->num_textures = 0;
gb->direct_display = false;
es->is_opaque = false;
}
static uint32_t

Loading…
Cancel
Save