Module: Mesa Branch: main Commit: 1fe5ffd60ef42d0b4e5bd6f3ab4fe1a880e3ea14 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1fe5ffd60ef42d0b4e5bd6f3ab4fe1a880e3ea14
Author: Thong Thai <[email protected]> Date: Fri Feb 3 20:11:13 2023 -0500 gallium/auxiliary/vl: add crop to compute shader Add a parameter for cropping, seperate from the translate parameter, to the progressive compute shader. Fixes: 4c46e4a5da5 ("gallium/auxiliary/vl: fix scale and translate parameters") Fixes: 56eac722bd7 ("gallium/auxiliary/vl: compute shaders for progressive yuv") Signed-off-by: Thong Thai <[email protected]> Tested-by: Veerabadhran Gopalakrishnan <[email protected]> Tested-by: Suresh Guttula <[email protected]> Acked-by: Veerabadhran Gopalakrishnan <[email protected]> Acked-by: Leo Liu <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21165> --- src/gallium/auxiliary/vl/vl_compositor_cs.c | 44 ++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c b/src/gallium/auxiliary/vl/vl_compositor_cs.c index 743b3538825..0685073b518 100644 --- a/src/gallium/auxiliary/vl/vl_compositor_cs.c +++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c @@ -36,7 +36,9 @@ struct cs_viewport { float scale_x; float scale_y; struct u_rect area; - int translate_x; + int crop_x; /* src */ + int crop_y; + int translate_x; /* dst */ int translate_y; float sampler0_w; float sampler0_h; @@ -593,7 +595,7 @@ static const char *compute_shader_yuv_y = "DCL SV[0], THREAD_ID\n" "DCL SV[1], BLOCK_ID\n" - "DCL CONST[0..5]\n" + "DCL CONST[0..6]\n" "DCL SVIEW[0..2], RECT, FLOAT\n" "DCL SAMP[0..2]\n" @@ -614,14 +616,17 @@ static const char *compute_shader_yuv_y = "UIF TEMP[1]\n" "MOV TEMP[2], TEMP[0]\n" + + /* Translate */ + "UADD TEMP[2].xy, TEMP[2], -CONST[5].xyxy\n" "U2F TEMP[2], TEMP[2]\n" /* Scale */ "DIV TEMP[2], TEMP[2], CONST[3].zwzw\n" - /* Translate */ - "MOV TEMP[4].xy, CONST[5]\n" - "I2F TEMP[4], -TEMP[4]\n" + /* Crop */ + "MOV TEMP[4].xy, CONST[6].zwww\n" + "I2F TEMP[4], TEMP[4]\n" "ADD TEMP[2], TEMP[2], TEMP[4]\n" "ADD TEMP[2].y, TEMP[2].yyyy, IMM[1].xxxx\n" @@ -644,7 +649,7 @@ static const char *compute_shader_yuv_uv = "DCL SV[0], THREAD_ID\n" "DCL SV[1], BLOCK_ID\n" - "DCL CONST[0..5]\n" + "DCL CONST[0..6]\n" "DCL SVIEW[0..2], RECT, FLOAT\n" "DCL SAMP[0..2]\n" @@ -665,14 +670,17 @@ static const char *compute_shader_yuv_uv = "UIF TEMP[1]\n" "MOV TEMP[2], TEMP[0]\n" + + /* Translate */ + "UADD TEMP[2].xy, TEMP[2], -CONST[5].xyxy\n" "U2F TEMP[2], TEMP[2]\n" /* Scale */ "DIV TEMP[2], TEMP[2], CONST[3].zwzw\n" - /* Translate */ - "MOV TEMP[4].xy, CONST[5]\n" - "I2F TEMP[4], -TEMP[4]\n" + /* Crop */ + "MOV TEMP[4].xy, CONST[6].zwww\n" + "I2F TEMP[4], TEMP[4]\n" "ADD TEMP[2], TEMP[2], TEMP[4]\n" "ADD TEMP[2].y, TEMP[2].yyyy, IMM[1].xxxx\n" @@ -775,8 +783,8 @@ set_viewport(struct vl_compositor_state *s, *ptr_int++ = drawn->area.y0; *ptr_int++ = drawn->area.x1; *ptr_int++ = drawn->area.y1; - *ptr_int++ = -drawn->translate_x; - *ptr_int++ = -drawn->translate_y; + *ptr_int++ = drawn->translate_x; + *ptr_int++ = drawn->translate_y; ptr_float = (float *)ptr_int; *ptr_float++ = drawn->sampler0_w; @@ -793,6 +801,14 @@ set_viewport(struct vl_compositor_state *s, (float) samplers[0]->texture->height0; *ptr_float++ = v_ratio; } + else { + ptr_float++; + ptr_float++; + } + ptr_int = (int *)ptr_float; + *ptr_int++ = drawn->crop_x; + *ptr_int++ = drawn->crop_y; + pipe_buffer_unmap(s->pipe, buf_transfer); return true; @@ -822,8 +838,10 @@ draw_layers(struct vl_compositor *c, ((float)layer->sampler_views[0]->texture->height0 * (s->interlaced ? 2.0 : 1.0) * (layer->src.br.y - layer->src.tl.y)); - drawn.translate_x = (int)(layer->src.tl.x * layer->sampler_views[0]->texture->width0); - drawn.translate_y = (int)(layer->src.tl.y * layer->sampler_views[0]->texture->height0); + drawn.crop_x = (int)(layer->src.tl.x * layer->sampler_views[0]->texture->width0); + drawn.translate_x = layer->viewport.translate[0]; + drawn.crop_y = (int)(layer->src.tl.y * layer->sampler_views[0]->texture->height0); + drawn.translate_y = layer->viewport.translate[1]; drawn.sampler0_w = (float)layer->sampler_views[0]->texture->width0; drawn.sampler0_h = (float)layer->sampler_views[0]->texture->height0; set_viewport(s, &drawn, samplers);
