From ffd7151b109b8c598cd346d34b5233558409a03a Mon Sep 17 00:00:00 2001 From: Konstantin Date: Fri, 20 Oct 2023 22:51:55 +0300 Subject: [PATCH] glamor: xv: prepare to one-plane formats As a preparation to one-plane formats (for example, UYVY), second texture definition is moved inside a format switch, and all allocations now also done inside a texture switch. No functional change. Reviewed-by: Adam Jackson Signed-off-by: Konstantin --- glamor/glamor_xv.c | 52 ++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c index eba756555..bbee58fb8 100644 --- a/glamor/glamor_xv.c +++ b/glamor/glamor_xv.c @@ -165,18 +165,22 @@ glamor_init_xv_shader(ScreenPtr screen, glamor_port_private *port_priv, int id) glamor_facet_xv_planar, NULL, NULL, NULL); glUseProgram(port_priv->xv_prog.prog); - sampler_loc = glGetUniformLocation(glamor_priv->xv_prog.prog, "y_sampler"); - glUniform1i(sampler_loc, 0); - sampler_loc = glGetUniformLocation(glamor_priv->xv_prog.prog, "u_sampler"); - glUniform1i(sampler_loc, 1); switch (id) { case FOURCC_YV12: case FOURCC_I420: - sampler_loc = glGetUniformLocation(glamor_priv->xv_prog.prog, "v_sampler"); + sampler_loc = glGetUniformLocation(port_priv->xv_prog.prog, "y_sampler"); + glUniform1i(sampler_loc, 0); + sampler_loc = glGetUniformLocation(port_priv->xv_prog.prog, "u_sampler"); + glUniform1i(sampler_loc, 1); + sampler_loc = glGetUniformLocation(port_priv->xv_prog.prog, "v_sampler"); glUniform1i(sampler_loc, 2); break; case FOURCC_NV12: + sampler_loc = glGetUniformLocation(port_priv->xv_prog.prog, "y_sampler"); + glUniform1i(sampler_loc, 0); + sampler_loc = glGetUniformLocation(port_priv->xv_prog.prog, "u_sampler"); + glUniform1i(sampler_loc, 1); break; default: break; @@ -380,16 +384,16 @@ glamor_xv_render(glamor_port_private *port_priv, int id) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->fbo->tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - switch (id) { case FOURCC_YV12: case FOURCC_I420: + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->fbo->tex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->fbo->tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -398,6 +402,12 @@ glamor_xv_render(glamor_port_private *port_priv, int id) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); break; case FOURCC_NV12: + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->fbo->tex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); break; default: break; @@ -532,28 +542,34 @@ glamor_xv_put_image(glamor_port_private *port_priv, if (port_priv->src_pix[i]) glamor_destroy_pixmap(port_priv->src_pix[i]); - port_priv->src_pix[0] = - glamor_create_pixmap(pScreen, width, height, 8, - GLAMOR_CREATE_FBO_NO_FBO); - switch (id) { case FOURCC_YV12: case FOURCC_I420: + port_priv->src_pix[0] = + glamor_create_pixmap(pScreen, width, height, 8, + GLAMOR_CREATE_FBO_NO_FBO); + port_priv->src_pix[1] = glamor_create_pixmap(pScreen, width >> 1, height >> 1, 8, GLAMOR_CREATE_FBO_NO_FBO); port_priv->src_pix[2] = glamor_create_pixmap(pScreen, width >> 1, height >> 1, 8, GLAMOR_CREATE_FBO_NO_FBO); - if (!port_priv->src_pix[2]) + if (!port_priv->src_pix[1] || !port_priv->src_pix[2]) return BadAlloc; break; case FOURCC_NV12: + port_priv->src_pix[0] = + glamor_create_pixmap(pScreen, width, height, 8, + GLAMOR_CREATE_FBO_NO_FBO); port_priv->src_pix[1] = glamor_create_pixmap(pScreen, width >> 1, height >> 1, 16, GLAMOR_CREATE_FBO_NO_FBO | GLAMOR_CREATE_FORMAT_CBCR); port_priv->src_pix[2] = NULL; + + if (!port_priv->src_pix[1]) + return BadAlloc; break; default: return BadMatch; @@ -562,7 +578,7 @@ glamor_xv_put_image(glamor_port_private *port_priv, port_priv->src_pix_w = width; port_priv->src_pix_h = height; - if (!port_priv->src_pix[0] || !port_priv->src_pix[1]) + if (!port_priv->src_pix[0]) return BadAlloc; }