gl-renderer: remove redundant 'target'

The texture target can be uniquely inferred from the shader variant, so
do not store texture target separately.

Shortens the code a bit.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
Pekka Paalanen 2021-03-25 14:49:57 +02:00 committed by Pekka Paalanen
parent 3ddcf07b4c
commit 0e1ddc4759

View File

@ -132,7 +132,6 @@ struct dmabuf_image {
struct wl_list link;
enum import_type import_type;
GLenum target;
enum gl_shader_texture_variant shader_variant;
};
@ -182,7 +181,6 @@ struct gl_surface_state {
GLenum gl_pixel_type;
struct egl_image* images[3];
GLenum target;
int num_images;
enum gl_shader_texture_variant shader_variant;
@ -1864,7 +1862,7 @@ done:
}
static void
ensure_textures(struct gl_surface_state *gs, int num_textures)
ensure_textures(struct gl_surface_state *gs, GLenum target, int num_textures)
{
int i;
@ -1875,14 +1873,12 @@ ensure_textures(struct gl_surface_state *gs, int num_textures)
for (i = gs->num_textures; i < num_textures; i++) {
glGenTextures(1, &gs->textures[i]);
glBindTexture(gs->target, gs->textures[i]);
glTexParameteri(gs->target,
GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(gs->target,
GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(target, gs->textures[i]);
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
gs->num_textures = num_textures;
glBindTexture(gs->target, 0);
glBindTexture(target, 0);
}
static void
@ -2015,7 +2011,6 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
gs->buffer_type != BUFFER_TYPE_SHM) {
gs->pitch = pitch;
gs->height = buffer->height;
gs->target = GL_TEXTURE_2D;
gs->gl_format[0] = gl_format[0];
gs->gl_format[1] = gl_format[1];
gs->gl_format[2] = gl_format[2];
@ -2027,7 +2022,7 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
gs->surface = es;
ensure_textures(gs, num_planes);
ensure_textures(gs, GL_TEXTURE_2D, num_planes);
}
}
@ -2039,6 +2034,7 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer,
struct gl_renderer *gr = get_renderer(ec);
struct gl_surface_state *gs = get_surface_state(es);
EGLint attribs[3];
GLenum target;
int i, num_planes;
buffer->legacy_buffer = (struct wl_buffer *)buffer->resource;
@ -2054,7 +2050,6 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer,
gs->images[i] = NULL;
}
gs->num_images = 0;
gs->target = GL_TEXTURE_2D;
es->is_opaque = false;
switch (format) {
case EGL_TEXTURE_RGB:
@ -2067,7 +2062,6 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer,
break;
case EGL_TEXTURE_EXTERNAL_WL:
num_planes = 1;
gs->target = GL_TEXTURE_EXTERNAL_OES;
gs->shader_variant = SHADER_VARIANT_EXTERNAL;
break;
case EGL_TEXTURE_Y_UV_WL:
@ -2087,7 +2081,8 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer,
break;
}
ensure_textures(gs, num_planes);
target = gl_shader_texture_variant_get_target(gs->shader_variant);
ensure_textures(gs, target, num_planes);
for (i = 0; i < num_planes; i++) {
attribs[0] = EGL_WAYLAND_PLANE_WL;
attribs[1] = i;
@ -2103,9 +2098,8 @@ gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer,
gs->num_images++;
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(gs->target, gs->textures[i]);
gr->image_target_texture_2d(gs->target,
gs->images[i]->image);
glBindTexture(target, gs->textures[i]);
gr->image_target_texture_2d(target, gs->images[i]->image);
}
gs->pitch = buffer->width;
@ -2499,6 +2493,7 @@ import_dmabuf(struct gl_renderer *gr,
{
struct egl_image *egl_image;
struct dmabuf_image *image;
GLenum target;
image = dmabuf_image_create();
image->dmabuf = dmabuf;
@ -2508,9 +2503,9 @@ import_dmabuf(struct gl_renderer *gr,
image->num_images = 1;
image->images[0] = egl_image;
image->import_type = IMPORT_TYPE_DIRECT;
image->target = choose_texture_target(gr, &dmabuf->attributes);
target = choose_texture_target(gr, &dmabuf->attributes);
switch (image->target) {
switch (target) {
case GL_TEXTURE_2D:
image->shader_variant = SHADER_VARIANT_RGBA;
break;
@ -2523,7 +2518,6 @@ import_dmabuf(struct gl_renderer *gr,
return NULL;
}
image->import_type = IMPORT_TYPE_GL_CONVERSION;
image->target = GL_TEXTURE_2D;
}
return image;
@ -2713,6 +2707,7 @@ gl_renderer_attach_dmabuf(struct weston_surface *surface,
struct gl_renderer *gr = get_renderer(surface->compositor);
struct gl_surface_state *gs = get_surface_state(surface);
struct dmabuf_image *image;
GLenum target;
int i;
if (!gr->has_dmabuf_import) {
@ -2771,12 +2766,12 @@ gl_renderer_attach_dmabuf(struct weston_surface *surface,
for (i = 0; i < gs->num_images; ++i)
gs->images[i] = egl_image_ref(image->images[i]);
gs->target = image->target;
ensure_textures(gs, gs->num_images);
target = gl_shader_texture_variant_get_target(image->shader_variant);
ensure_textures(gs, target, gs->num_images);
for (i = 0; i < gs->num_images; ++i) {
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(gs->target, gs->textures[i]);
gr->image_target_texture_2d(gs->target, gs->images[i]->image);
glBindTexture(target, gs->textures[i]);
gr->image_target_texture_2d(target, gs->images[i]->image);
}
gs->shader_variant = image->shader_variant;