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 <ajax@redhat.com> Signed-off-by: Konstantin <ria.freelander@gmail.com>
This commit is contained in:
parent
81ef43dd4a
commit
ffd7151b10
|
@ -165,18 +165,22 @@ glamor_init_xv_shader(ScreenPtr screen, glamor_port_private *port_priv, int id)
|
||||||
glamor_facet_xv_planar, NULL, NULL, NULL);
|
glamor_facet_xv_planar, NULL, NULL, NULL);
|
||||||
|
|
||||||
glUseProgram(port_priv->xv_prog.prog);
|
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) {
|
switch (id) {
|
||||||
case FOURCC_YV12:
|
case FOURCC_YV12:
|
||||||
case FOURCC_I420:
|
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);
|
glUniform1i(sampler_loc, 2);
|
||||||
break;
|
break;
|
||||||
case FOURCC_NV12:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -380,6 +384,9 @@ 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_S, GL_CLAMP_TO_EDGE);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 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);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->fbo->tex);
|
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_MIN_FILTER, GL_LINEAR);
|
||||||
|
@ -387,9 +394,6 @@ 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_S, GL_CLAMP_TO_EDGE);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 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_TEXTURE2);
|
glActiveTexture(GL_TEXTURE2);
|
||||||
glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->fbo->tex);
|
glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->fbo->tex);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
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);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
break;
|
break;
|
||||||
case FOURCC_NV12:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -532,28 +542,34 @@ glamor_xv_put_image(glamor_port_private *port_priv,
|
||||||
if (port_priv->src_pix[i])
|
if (port_priv->src_pix[i])
|
||||||
glamor_destroy_pixmap(port_priv->src_pix[i]);
|
glamor_destroy_pixmap(port_priv->src_pix[i]);
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case FOURCC_YV12:
|
||||||
|
case FOURCC_I420:
|
||||||
port_priv->src_pix[0] =
|
port_priv->src_pix[0] =
|
||||||
glamor_create_pixmap(pScreen, width, height, 8,
|
glamor_create_pixmap(pScreen, width, height, 8,
|
||||||
GLAMOR_CREATE_FBO_NO_FBO);
|
GLAMOR_CREATE_FBO_NO_FBO);
|
||||||
|
|
||||||
switch (id) {
|
|
||||||
case FOURCC_YV12:
|
|
||||||
case FOURCC_I420:
|
|
||||||
port_priv->src_pix[1] =
|
port_priv->src_pix[1] =
|
||||||
glamor_create_pixmap(pScreen, width >> 1, height >> 1, 8,
|
glamor_create_pixmap(pScreen, width >> 1, height >> 1, 8,
|
||||||
GLAMOR_CREATE_FBO_NO_FBO);
|
GLAMOR_CREATE_FBO_NO_FBO);
|
||||||
port_priv->src_pix[2] =
|
port_priv->src_pix[2] =
|
||||||
glamor_create_pixmap(pScreen, width >> 1, height >> 1, 8,
|
glamor_create_pixmap(pScreen, width >> 1, height >> 1, 8,
|
||||||
GLAMOR_CREATE_FBO_NO_FBO);
|
GLAMOR_CREATE_FBO_NO_FBO);
|
||||||
if (!port_priv->src_pix[2])
|
if (!port_priv->src_pix[1] || !port_priv->src_pix[2])
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
break;
|
break;
|
||||||
case FOURCC_NV12:
|
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] =
|
port_priv->src_pix[1] =
|
||||||
glamor_create_pixmap(pScreen, width >> 1, height >> 1, 16,
|
glamor_create_pixmap(pScreen, width >> 1, height >> 1, 16,
|
||||||
GLAMOR_CREATE_FBO_NO_FBO |
|
GLAMOR_CREATE_FBO_NO_FBO |
|
||||||
GLAMOR_CREATE_FORMAT_CBCR);
|
GLAMOR_CREATE_FORMAT_CBCR);
|
||||||
port_priv->src_pix[2] = NULL;
|
port_priv->src_pix[2] = NULL;
|
||||||
|
|
||||||
|
if (!port_priv->src_pix[1])
|
||||||
|
return BadAlloc;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return BadMatch;
|
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_w = width;
|
||||||
port_priv->src_pix_h = height;
|
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;
|
return BadAlloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue