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