[Mesa-dev] [PATCH] radeon: Fix mjpeg issue for ARCTURUS

2019-09-04 Thread Zhu, James
ARCTURUS mjpeg is using direct register access.

Signed-off-by: James Zhu 
Reviewed-by: Boyuan Zhang 
---
 src/gallium/drivers/radeon/radeon_vcn_dec.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec.c 
b/src/gallium/drivers/radeon/radeon_vcn_dec.c
index 77bfe18..aa70802 100644
--- a/src/gallium/drivers/radeon/radeon_vcn_dec.c
+++ b/src/gallium/drivers/radeon/radeon_vcn_dec.c
@@ -1607,6 +1607,7 @@ struct pipe_video_codec *radeon_create_decoder(struct 
pipe_context *context,
dec->reg.data1 = RDECODE_VCN2_5_GPCOM_VCPU_DATA1;
dec->reg.cmd = RDECODE_VCN2_5_GPCOM_VCPU_CMD;
dec->reg.cntl = RDECODE_VCN2_5_ENGINE_CNTL;
+   dec->jpg.direct_reg = true;
} else if (sctx->family >= CHIP_NAVI10) {
dec->reg.data0 = RDECODE_VCN2_GPCOM_VCPU_DATA0;
dec->reg.data1 = RDECODE_VCN2_GPCOM_VCPU_DATA1;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH] gallium/drivers/radeonsi: Add si_bind_sampler_states unbind support

2019-04-06 Thread Zhu, James
commit a613607dc3dab2b43884a4e5891aa5939cdcfbe0 will cause segfault
during unbind sampler state. This patch will fix the issue.

Signed-off-by: James Zhu 
---
 src/gallium/drivers/radeonsi/si_descriptors.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c 
b/src/gallium/drivers/radeonsi/si_descriptors.c
index 244ba5a..883b91c 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -956,8 +956,11 @@ static void si_bind_sampler_states(struct pipe_context 
*ctx,
unsigned slot = start + i;
unsigned desc_slot = si_get_sampler_slot(slot);
 
-   if (!sstates[i] ||
-   sstates[i] == samplers->sampler_states[slot])
+   if(!sstates) {
+   samplers->sampler_states[slot] = NULL;
+   continue;
+   } else if (!sstates[i] ||
+   sstates[i] == samplers->sampler_states[slot])
continue;
 
 #ifdef DEBUG
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH v2 3/3] gallium/auxiliary/vl: Add barrier/unbind after compute shader launch.

2019-04-03 Thread Zhu, James
Add memory barrier sync for multiple launch cases, and unbind completed
resources after launch.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
index c3afe61..a659fd2 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_cs.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -292,6 +292,10 @@ cs_launch(struct vl_compositor *c,
info.grid[2] = 1;
 
ctx->launch_grid(ctx, );
+
+   /* Make the result visible to all clients. */
+   ctx->memory_barrier(ctx, PIPE_BARRIER_ALL);
+
 }
 
 static inline struct u_rect
@@ -389,6 +393,13 @@ draw_layers(struct vl_compositor   *c,
 
  cs_launch(c, layer->cs, &(drawn.area));
 
+ /* Unbind. */
+ ctx->set_shader_images(ctx, PIPE_SHADER_COMPUTE, 0, 1, NULL);
+ ctx->set_constant_buffer(ctx, PIPE_SHADER_COMPUTE, 0, NULL);
+ ctx->set_sampler_views(c->pipe, PIPE_SHADER_FRAGMENT, 0, 
num_sampler_views, NULL);
+ ctx->bind_compute_state(ctx, NULL);
+ ctx->bind_sampler_states(c->pipe, PIPE_SHADER_COMPUTE, 0, 
num_sampler_views, NULL);
+
  if (dirty) {
 struct u_rect drawn = calc_drawn_area(s, layer);
 dirty->x0 = MIN2(drawn.x0, dirty->x0);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 3/3] gallium/auxiliary/vl: Add barrier/unbind after compute shader launch.

2019-04-02 Thread Zhu, James
Add memory barrier sync and unbind resource after launch will enhance
the robustness.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
index c3afe61..f00cb65 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_cs.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -292,6 +292,17 @@ cs_launch(struct vl_compositor *c,
info.grid[2] = 1;
 
ctx->launch_grid(ctx, );
+
+   /* Make the result visible to all clients. */
+   ctx->memory_barrier(ctx, PIPE_BARRIER_ALL);
+
+   /* Unbind. */
+   ctx->set_shader_images(ctx, PIPE_SHADER_COMPUTE, 0, 1, NULL);
+   ctx->set_constant_buffer(ctx, PIPE_SHADER_COMPUTE, 0, NULL);
+   ctx->set_sampler_views(c->pipe, PIPE_SHADER_FRAGMENT, 0, 0, NULL);
+   ctx->bind_compute_state(ctx, NULL);
+   ctx->bind_sampler_states(c->pipe, PIPE_SHADER_COMPUTE, 0, 0, NULL);
+   ctx->flush(ctx, NULL, 0);
 }
 
 static inline struct u_rect
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 2/3] gallium/auxiliary/vl: Fixed blank issue with compute shader

2019-04-02 Thread Zhu, James
Multiple init buffer within one open instance will cause blank issue.
Updating viewport per frame will fix this issue.

Signed-off-by: James Zhu 
Tested-by: Bruno Milreu 
---
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
index 6336b23..c3afe61 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_cs.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -362,7 +362,6 @@ draw_layers(struct vl_compositor   *c,
 struct u_rect  *dirty)
 {
unsigned i;
-   static struct cs_viewport old_drawn;
 
assert(c);
 
@@ -381,11 +380,7 @@ draw_layers(struct vl_compositor   *c,
  drawn.translate_y = (int)layer->viewport.translate[1];
  drawn.sampler0_w = (float)layer->sampler_views[0]->texture->width0;
  drawn.sampler0_h = (float)layer->sampler_views[0]->texture->height0;
-
- if (memcmp(, _drawn, sizeof(struct cs_viewport))) {
-set_viewport(s, );
-old_drawn = drawn;
- }
+ set_viewport(s, );
 
  c->pipe->bind_sampler_states(c->pipe, PIPE_SHADER_COMPUTE, 0,
 num_sampler_views, layer->samplers);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 1/3] gallium/auxiliary/vl: Fixed blur issue with weave compute shader

2019-04-02 Thread Zhu, James
Correct wrong interpolatation with top/bottom row which caused blur issue.

Signed-off-by: James Zhu 
Tested-by: Bruno Milreu 
---
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
index bad7d5f..6336b23 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_cs.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -201,7 +201,7 @@ const char *compute_shader_weave =
  "TEX_LZ TEMP[11].y, TEMP[13], SAMP[1], 2D_ARRAY\n"
  "TEX_LZ TEMP[11].z, TEMP[13], SAMP[2], 2D_ARRAY\n"
 
- "LRP TEMP[6], TEMP[14], TEMP[11], TEMP[10]\n"
+ "LRP TEMP[6], TEMP[14], TEMP[10], TEMP[11]\n"
  "MOV TEMP[6].w, IMM[1].\n"
 
  /* Color Space Conversion */
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 0/3] Fix Bugzilla Bug 109646 - jagginess with video play

2019-03-12 Thread Zhu, James
Bug 109646 - New video compositor compute shader render glitches mpv
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109646
Fixed Problem 2,3:Jaggines caused by interpolation issue with weave de-interlace

James Zhu (3):
  gallium/auxiliary/vl: Increase shader_params size
  gallium/auxiliary/vl: Change grid setting
  gallium/auxiliary/vl: Change weave compute shader implementation

 src/gallium/auxiliary/vl/vl_compositor.c|  2 +-
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 97 ++---
 2 files changed, 76 insertions(+), 23 deletions(-)

-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 2/3] gallium/auxiliary/vl: Change grid setting

2019-03-12 Thread Zhu, James
Using draw area for grid setting instead of destination
buffer size.

Signed-off-by: James Zhu 
Tested-by: Bruno Milreu 
---
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
index 70898be..de0a3c7 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_cs.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -221,7 +221,8 @@ const char *compute_shader_rgba =
 
 static void
 cs_launch(struct vl_compositor *c,
-  void *cs)
+  void *cs,
+  const struct u_rect  *draw_area)
 {
struct pipe_context *ctx = c->pipe;
 
@@ -241,8 +242,8 @@ cs_launch(struct vl_compositor *c,
info.block[0] = 8;
info.block[1] = 8;
info.block[2] = 1;
-   info.grid[0] = DIV_ROUND_UP(c->fb_state.width, info.block[0]);
-   info.grid[1] = DIV_ROUND_UP(c->fb_state.height, info.block[1]);
+   info.grid[0] = DIV_ROUND_UP(draw_area->x1, info.block[0]);
+   info.grid[1] = DIV_ROUND_UP(draw_area->y1, info.block[1]);
info.grid[2] = 1;
 
ctx->launch_grid(ctx, );
@@ -346,7 +347,7 @@ draw_layers(struct vl_compositor   *c,
  c->pipe->set_sampler_views(c->pipe, PIPE_SHADER_COMPUTE, 0,
 num_sampler_views, samplers);
 
- cs_launch(c, layer->cs);
+ cs_launch(c, layer->cs, &(drawn.area));
 
  if (dirty) {
 struct u_rect drawn = calc_drawn_area(s, layer);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 3/3] gallium/auxiliary/vl: Change weave compute shader implementation

2019-03-12 Thread Zhu, James
Use 2D_ARRARY instead of RECT to fetch texels for weave compute
shader.

Problem 2,3: Fixed interpolation issue with weave de-interlace

Fixes: 9364d66cb7f7 (Add video compositor compute shader render)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109646
Signed-off-by: James Zhu 
Tested-by: Bruno Milreu 
---
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 79 ++---
 1 file changed, 62 insertions(+), 17 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
index de0a3c7..bad7d5f 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_cs.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -113,15 +113,16 @@ const char *compute_shader_weave =
   "DCL SV[1], BLOCK_ID\n"
 
   "DCL CONST[0..5]\n"
-  "DCL SVIEW[0..2], RECT, FLOAT\n"
+  "DCL SVIEW[0..2], 2D_ARRAY, FLOAT\n"
   "DCL SAMP[0..2]\n"
 
   "DCL IMAGE[0], 2D, WR\n"
-  "DCL TEMP[0..9]\n"
+  "DCL TEMP[0..15]\n"
 
   "IMM[0] UINT32 { 8, 8, 1, 0}\n"
   "IMM[1] FLT32 { 1.0, 2.0, 0.0, 0.0}\n"
   "IMM[2] UINT32 { 1, 2, 4, 0}\n"
+  "IMM[3] FLT32 { 0.25, 0.5, 0.125, 0.125}\n"
 
   "UMAD TEMP[0], SV[1], IMM[0], SV[0]\n"
 
@@ -137,26 +138,70 @@ const char *compute_shader_weave =
  /* Translate */
  "UADD TEMP[2].xy, TEMP[2], -CONST[5].xyxy\n"
 
- /* Texture layer */
- "UMOD TEMP[2].z, TEMP[2]., IMM[2].\n"
- "UMOD TEMP[3].z, TEMP[2]., IMM[2].\n"
- "USHR TEMP[3].z, TEMP[3]., IMM[2].\n"
+ /* Top Y */
+ "U2F TEMP[2], TEMP[2]\n"
+ "DIV TEMP[2].y, TEMP[2]., IMM[1].\n"
+ /* Down Y */
+ "MOV TEMP[12], TEMP[2]\n"
+
+ /* Top UV */
+ "MOV TEMP[3], TEMP[2]\n"
+ "DIV TEMP[3].xy, TEMP[3], IMM[1].\n"
+ /* Down UV */
+ "MOV TEMP[13], TEMP[3]\n"
+
+ /* Texture offset */
+ "ADD TEMP[2].x, TEMP[2]., IMM[3].\n"
+ "ADD TEMP[2].y, TEMP[2]., IMM[3].\n"
+ "ADD TEMP[12].x, TEMP[12]., IMM[3].\n"
+ "ADD TEMP[12].y, TEMP[12]., IMM[3].\n"
+
+ "ADD TEMP[3].x, TEMP[3]., IMM[3].\n"
+ "ADD TEMP[3].y, TEMP[3]., IMM[3].\n"
+ "ADD TEMP[13].x, TEMP[13]., IMM[3].\n"
+ "ADD TEMP[13].y, TEMP[13]., IMM[3].\n"
 
- "USHR TEMP[2].y, TEMP[2], IMM[2].\n"
- "USHR TEMP[3].xy, TEMP[2], IMM[2].\n"
+ /* Scale */
+ "DIV TEMP[2].xy, TEMP[2], CONST[3].zwzw\n"
+ "DIV TEMP[12].xy, TEMP[12], CONST[3].zwzw\n"
+ "DIV TEMP[3].xy, TEMP[3], CONST[3].zwzw\n"
+ "DIV TEMP[13].xy, TEMP[13], CONST[3].zwzw\n"
 
- "U2F TEMP[4], TEMP[2]\n"
- "U2F TEMP[5], TEMP[3]\n"
+ /* Weave offset */
+ "ADD TEMP[2].y, TEMP[2]., IMM[3].\n"
+ "ADD TEMP[12].y, TEMP[12]., -IMM[3].\n"
+ "ADD TEMP[3].y, TEMP[3]., IMM[3].\n"
+ "ADD TEMP[13].y, TEMP[13]., -IMM[3].\n"
 
- /* Scale */
- "DIV TEMP[4], TEMP[4], CONST[3].zwzw\n"
- "DIV TEMP[5], TEMP[5], CONST[3].zwzw\n"
+ /* Texture layer */
+ "MOV TEMP[14].x, TEMP[2].\n"
+ "MOV TEMP[14].yz, TEMP[3].\n"
+ "ROUND TEMP[15], TEMP[14]\n"
+ "ADD TEMP[14], TEMP[14], -TEMP[15]\n"
+ "MOV TEMP[14], |TEMP[14]|\n"
+ "MUL TEMP[14], TEMP[14], IMM[1].\n"
+
+ /* Normalize */
+ "DIV TEMP[2].xy, TEMP[2], CONST[5].zwzw\n"
+ "DIV TEMP[12].xy, TEMP[12], CONST[5].zwzw\n"
+ "DIV TEMP[15].xy, CONST[5].zwzw, IMM[1].\n"
+ "DIV TEMP[3].xy, TEMP[3], TEMP[15].xyxy\n"
+ "DIV TEMP[13].xy, TEMP[13], TEMP[15].xyxy\n"
 
  /* Fetch texels */
- "TEX_LZ TEMP[6].x, TEMP[4], SAMP[0], RECT\n"
- "TEX_LZ TEMP[6].y, TEMP[5], SAMP[1], RECT\n"
- "TEX_LZ TEMP[6].z, TEMP[5], SAMP[2], RECT\n"
-
+ "MOV TEMP[2].z, IMM[1].\n"
+ "MOV TEMP[3].z, IMM[1].\n"
+ "TEX_LZ TEMP[10].x, TEMP[2], SAMP[0], 2D_ARRAY\n"
+ "TEX_LZ TEMP[10].y, TEMP[3], SAMP[1], 2D_ARRAY\n"
+ "TEX_LZ TEMP[10].z, TEMP[3], SAMP[2], 2D_ARRAY\n"
+
+ "MOV TEMP[12].z, IMM[1].\n"
+ "MOV TEMP[13].z, IMM[1].\n"
+ "TEX_LZ TEMP[11].x, TEMP[12], SAMP[0], 2D_ARRAY\n"
+ "TEX_LZ TEMP[11].y, TEMP[13], SAMP[1], 2D_ARRAY\n"
+ "TEX_LZ TEMP[11].z, TEMP[13], SAMP[2], 2D_ARRAY\n"
+
+ "LRP TEMP[6], TEMP[14], TEMP[11], TEMP[10]\n"
  "MOV TEMP[6].w, IMM[1].\n"
 
  /* Color Space Conversion */
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH 1/3] gallium/auxiliary/vl: Increase shader_params size

2019-03-12 Thread Zhu, James
Increase shader_params size to pass sampler data to
compute shader during weave de-interlace.

Signed-off-by: James Zhu 
Tested-by: Bruno Milreu 
---
 src/gallium/auxiliary/vl/vl_compositor.c| 2 +-
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 9 -
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index a8f3620..12c58ff 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -802,7 +802,7 @@ vl_compositor_init_state(struct vl_compositor_state *s, 
struct pipe_context *pip
   pipe->screen,
   PIPE_BIND_CONSTANT_BUFFER,
   PIPE_USAGE_DEFAULT,
-  sizeof(csc_matrix) + 4*sizeof(float) + 6*sizeof(int)
+  sizeof(csc_matrix) + 6*sizeof(float) + 6*sizeof(int)
);
 
if (!s->shader_params)
diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
index 0e49c11..70898be 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_cs.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -38,6 +38,8 @@ struct cs_viewport {
struct u_rect area;
int translate_x;
int translate_y;
+   float sampler0_w;
+   float sampler0_h;
 };
 
 const char *compute_shader_video_buffer =
@@ -298,8 +300,11 @@ set_viewport(struct vl_compositor_state *s,
*ptr_int++ = drawn->area.x1;
*ptr_int++ = drawn->area.y1;
*ptr_int++ = drawn->translate_x;
-   *ptr_int = drawn->translate_y;
+   *ptr_int++ = drawn->translate_y;
 
+   ptr_float = (float *)ptr_int;
+   *ptr_float++ = drawn->sampler0_w;
+   *ptr_float = drawn->sampler0_h;
pipe_buffer_unmap(s->pipe, buf_transfer);
 
return true;
@@ -328,6 +333,8 @@ draw_layers(struct vl_compositor   *c,
  drawn.scale_y = drawn.scale_x;
  drawn.translate_x = (int)layer->viewport.translate[0];
  drawn.translate_y = (int)layer->viewport.translate[1];
+ drawn.sampler0_w = (float)layer->sampler_views[0]->texture->width0;
+ drawn.sampler0_h = (float)layer->sampler_views[0]->texture->height0;
 
  if (memcmp(, _drawn, sizeof(struct cs_viewport))) {
 set_viewport(s, );
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH v3] gallium/auxiliary/vl: Fix transparent issue on compute shader with rgba

2019-02-15 Thread Zhu, James
Fixes: 9364d66cb7f7 (Add video compositor compute shader render)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109646
Problem 1,4: they are caused by imcomplete blend comute shader
implementation. So Reverts rgba back to frament shader.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 17 +++--
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 8731ad9..a8f3620 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -100,12 +100,12 @@ init_shaders(struct vl_compositor *c)
  debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
  return false;
   }
+   }
 
-  c->fs_rgba = create_frag_shader_rgba(c);
-  if (!c->fs_rgba) {
- debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
- return false;
-  }
+   c->fs_rgba = create_frag_shader_rgba(c);
+   if (!c->fs_rgba) {
+  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+  return false;
}
 
return true;
@@ -132,8 +132,8 @@ static void cleanup_shaders(struct vl_compositor *c)
} else {
   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
-  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
}
+   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
 }
 
 static bool
@@ -642,10 +642,7 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
assert(layer < VL_COMPOSITOR_MAX_LAYERS);
 
s->used_layers |= 1 << layer;
-   if (c->pipe_compute_supported)
-  s->layers[layer].cs = c->cs_rgba;
-   else
-  s->layers[layer].fs = c->fs_rgba;
+   s->layers[layer].fs = c->fs_rgba;
s->layers[layer].samplers[0] = c->sampler_linear;
s->layers[layer].samplers[1] = NULL;
s->layers[layer].samplers[2] = NULL;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH v2] gallium/auxiliary/vl: Fix transparent issue on compute shader with rgba

2019-02-15 Thread Zhu, James
Bugzilla bug 109646 - New video compositor compute shader render glitches mpv
https://bugs.freedesktop.org/show_bug.cgi?id=109646
Problem 1,4: they are caused by imcomplete blend comute shader
implementation. So Reverts rgba back to frament shader from
commit  9364d66cb7f7deb83876a44bb4e29e8105141c16.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 17 +++--
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 8731ad9..a8f3620 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -100,12 +100,12 @@ init_shaders(struct vl_compositor *c)
  debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
  return false;
   }
+   }
 
-  c->fs_rgba = create_frag_shader_rgba(c);
-  if (!c->fs_rgba) {
- debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
- return false;
-  }
+   c->fs_rgba = create_frag_shader_rgba(c);
+   if (!c->fs_rgba) {
+  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+  return false;
}
 
return true;
@@ -132,8 +132,8 @@ static void cleanup_shaders(struct vl_compositor *c)
} else {
   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
-  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
}
+   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
 }
 
 static bool
@@ -642,10 +642,7 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
assert(layer < VL_COMPOSITOR_MAX_LAYERS);
 
s->used_layers |= 1 << layer;
-   if (c->pipe_compute_supported)
-  s->layers[layer].cs = c->cs_rgba;
-   else
-  s->layers[layer].fs = c->fs_rgba;
+   s->layers[layer].fs = c->fs_rgba;
s->layers[layer].samplers[0] = c->sampler_linear;
s->layers[layer].samplers[1] = NULL;
s->layers[layer].samplers[2] = NULL;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH] gallium/auxiliary/vl: Revert rgba back to frament shader

2019-02-15 Thread Zhu, James
Bugzilla Bug 109646 - New video compositor compute shader render glitches mpv
Problem 1,4: they are caused by imcomplete blend compute shader
implementation. So Revert rgba back to frament shader.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 17 +++--
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 8731ad9..a8f3620 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -100,12 +100,12 @@ init_shaders(struct vl_compositor *c)
  debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
  return false;
   }
+   }
 
-  c->fs_rgba = create_frag_shader_rgba(c);
-  if (!c->fs_rgba) {
- debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
- return false;
-  }
+   c->fs_rgba = create_frag_shader_rgba(c);
+   if (!c->fs_rgba) {
+  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+  return false;
}
 
return true;
@@ -132,8 +132,8 @@ static void cleanup_shaders(struct vl_compositor *c)
} else {
   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
-  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
}
+   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
 }
 
 static bool
@@ -642,10 +642,7 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
assert(layer < VL_COMPOSITOR_MAX_LAYERS);
 
s->used_layers |= 1 << layer;
-   if (c->pipe_compute_supported)
-  s->layers[layer].cs = c->cs_rgba;
-   else
-  s->layers[layer].fs = c->fs_rgba;
+   s->layers[layer].fs = c->fs_rgba;
s->layers[layer].samplers[0] = c->sampler_linear;
s->layers[layer].samplers[1] = NULL;
s->layers[layer].samplers[2] = NULL;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

[Mesa-dev] [PATCH v6 5/5] gallium/auxiliary/vl: Add video compositor compute shader render

2019-02-12 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.
Set video compositor compute shader render as default when pipe support it.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 106 +++
 src/gallium/auxiliary/vl/vl_compositor.h |   5 ++
 2 files changed, 83 insertions(+), 28 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 4509913..8731ad9 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,6 +28,7 @@
 #include "util/u_sampler.h"
 
 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"
 
 static bool
 init_shaders(struct vl_compositor *c)
@@ -40,18 +41,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_video_buffer = create_frag_shader_video_buffer(c);
-   if (!c->fs_video_buffer) {
-  debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
-  return false;
-   }
-
-   c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
-   if (!c->fs_weave_rgb) {
-  debug_printf("Unable to create YCbCr-to-RGB weave fragment shader.\n");
-  return false;
-   }
-
c->fs_yuv.weave.y = create_frag_shader_deint_yuv(c, true, true);
c->fs_yuv.weave.uv = create_frag_shader_deint_yuv(c, false, true);
c->fs_yuv.bob.y = create_frag_shader_deint_yuv(c, true, false);
@@ -74,12 +63,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_rgba = create_frag_shader_rgba(c);
-   if (!c->fs_rgba) {
-  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
-  return false;
-   }
-
c->fs_rgb_yuv.y = create_frag_shader_rgb_yuv(c, true);
c->fs_rgb_yuv.uv = create_frag_shader_rgb_yuv(c, false);
if (!c->fs_rgb_yuv.y || !c->fs_rgb_yuv.uv) {
@@ -87,6 +70,44 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
+   if (c->pipe_compute_supported) {
+  c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+  if (!c->cs_video_buffer) {
+ debug_printf("Unable to create video_buffer compute shader.\n");
+ return false;
+  }
+
+  c->cs_weave_rgb = vl_compositor_cs_create_shader(c, 
compute_shader_weave);
+  if (!c->cs_weave_rgb) {
+ debug_printf("Unable to create weave_rgb compute shader.\n");
+ return false;
+  }
+
+  c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+  if (!c->cs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+ return false;
+  }
+   } else {
+  c->fs_video_buffer = create_frag_shader_video_buffer(c);
+  if (!c->fs_video_buffer) {
+ debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
+ return false;
+  }
+
+  c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
+  if (!c->fs_weave_rgb) {
+ debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
+ return false;
+  }
+
+  c->fs_rgba = create_frag_shader_rgba(c);
+  if (!c->fs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+ return false;
+  }
+   }
+
return true;
 }
 
@@ -95,17 +116,24 @@ static void cleanup_shaders(struct vl_compositor *c)
assert(c);
 
c->pipe->delete_vs_state(c->pipe, c->vs);
-   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
-   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.yuv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.rgb);
-   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+
+   if (c->pipe_compute_supported) {
+  c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+  c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+  c->pipe->delete_compute_state(c->pipe, c->cs_rgba);
+   } else {
+  c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
+  c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
+  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
+   }
 }
 
 static bool
@@ -409,6 +437,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -532,26 +561,39 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
   float half_a_line = 

Re: [Mesa-dev] [PATCH v4 5/5] gallium/auxiliary/vl: Add video compositor compute shader render

2019-02-12 Thread Zhu, James
Thank you for the advice.


James


From: Marek Olšák 
Sent: Monday, February 11, 2019 4:56 PM
To: Zhu, James
Cc: mesa-dev@lists.freedesktop.org; jzh...@gmail.com
Subject: Re: [Mesa-dev] [PATCH v4 5/5] gallium/auxiliary/vl: Add video 
compositor compute shader render

Instead of querying PIPE_CAP_COMPUTE multiple times, you can save the returned 
value at initialization once and use that.

On Fri, Feb 8, 2019 at 2:22 PM Zhu, James 
mailto:james@amd.com>> wrote:
Add compute shader initilization, assign and cleanup in vl_compositor API.
Set video compositor compute shader render as default when pipe support it.

Signed-off-by: James Zhu mailto:james@amd.com>>
Reviewed-by: Christian König 
mailto:christian.koe...@amd.com>>
---
 src/gallium/auxiliary/vl/vl_compositor.c | 105 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |   3 +
 2 files changed, 80 insertions(+), 28 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 4509913..2d624c8 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,6 +28,7 @@
 #include "util/u_sampler.h"

 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"

 static bool
 init_shaders(struct vl_compositor *c)
@@ -40,18 +41,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}

-   c->fs_video_buffer = create_frag_shader_video_buffer(c);
-   if (!c->fs_video_buffer) {
-  debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
-  return false;
-   }
-
-   c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
-   if (!c->fs_weave_rgb) {
-  debug_printf("Unable to create YCbCr-to-RGB weave fragment shader.\n");
-  return false;
-   }
-
c->fs_yuv.weave.y = create_frag_shader_deint_yuv(c, true, true);
c->fs_yuv.weave.uv = create_frag_shader_deint_yuv(c, false, true);
c->fs_yuv.bob.y = create_frag_shader_deint_yuv(c, true, false);

If compute is used, I wouldn't like any graphics shaders to be created.

Marek

@@ -74,12 +63,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}

-   c->fs_rgba = create_frag_shader_rgba(c);
-   if (!c->fs_rgba) {
-  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
-  return false;
-   }
-
c->fs_rgb_yuv.y = create_frag_shader_rgb_yuv(c, true);
c->fs_rgb_yuv.uv = create_frag_shader_rgb_yuv(c, false);
if (!c->fs_rgb_yuv.y || !c->fs_rgb_yuv.uv) {
@@ -87,6 +70,44 @@ init_shaders(struct vl_compositor *c)
   return false;
}

+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE)) {
+  c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+  if (!c->cs_video_buffer) {
+ debug_printf("Unable to create video_buffer compute shader.\n");
+ return false;
+  }
+
+  c->cs_weave_rgb = vl_compositor_cs_create_shader(c, 
compute_shader_weave);
+  if (!c->cs_weave_rgb) {
+ debug_printf("Unable to create weave_rgb compute shader.\n");
+ return false;
+  }
+
+  c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+  if (!c->cs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+ return false;
+  }
+   } else {
+  c->fs_video_buffer = create_frag_shader_video_buffer(c);
+  if (!c->fs_video_buffer) {
+ debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
+ return false;
+  }
+
+  c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
+  if (!c->fs_weave_rgb) {
+ debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
+ return false;
+  }
+
+  c->fs_rgba = create_frag_shader_rgba(c);
+  if (!c->fs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+ return false;
+  }
+   }
+
return true;
 }

@@ -95,17 +116,24 @@ static void cleanup_shaders(struct vl_compositor *c)
assert(c);

c->pipe->delete_vs_state(c->pipe, c->vs);
-   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
-   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.yuv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.rgb);
-   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe-

[Mesa-dev] [PATCH v5 5/5] gallium/auxiliary/vl: Add video compositor compute shader render

2019-02-12 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.
Set video compositor compute shader render as default when pipe support it.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 108 +++
 src/gallium/auxiliary/vl/vl_compositor.h |   3 +
 2 files changed, 83 insertions(+), 28 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 4509913..cd404b9 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,6 +28,9 @@
 #include "util/u_sampler.h"
 
 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"
+
+static int pip_compute_supported = 0;
 
 static bool
 init_shaders(struct vl_compositor *c)
@@ -40,18 +43,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_video_buffer = create_frag_shader_video_buffer(c);
-   if (!c->fs_video_buffer) {
-  debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
-  return false;
-   }
-
-   c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
-   if (!c->fs_weave_rgb) {
-  debug_printf("Unable to create YCbCr-to-RGB weave fragment shader.\n");
-  return false;
-   }
-
c->fs_yuv.weave.y = create_frag_shader_deint_yuv(c, true, true);
c->fs_yuv.weave.uv = create_frag_shader_deint_yuv(c, false, true);
c->fs_yuv.bob.y = create_frag_shader_deint_yuv(c, true, false);
@@ -74,12 +65,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_rgba = create_frag_shader_rgba(c);
-   if (!c->fs_rgba) {
-  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
-  return false;
-   }
-
c->fs_rgb_yuv.y = create_frag_shader_rgb_yuv(c, true);
c->fs_rgb_yuv.uv = create_frag_shader_rgb_yuv(c, false);
if (!c->fs_rgb_yuv.y || !c->fs_rgb_yuv.uv) {
@@ -87,6 +72,44 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
+   if (pip_compute_supported) {
+  c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+  if (!c->cs_video_buffer) {
+ debug_printf("Unable to create video_buffer compute shader.\n");
+ return false;
+  }
+
+  c->cs_weave_rgb = vl_compositor_cs_create_shader(c, 
compute_shader_weave);
+  if (!c->cs_weave_rgb) {
+ debug_printf("Unable to create weave_rgb compute shader.\n");
+ return false;
+  }
+
+  c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+  if (!c->cs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+ return false;
+  }
+   } else {
+  c->fs_video_buffer = create_frag_shader_video_buffer(c);
+  if (!c->fs_video_buffer) {
+ debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
+ return false;
+  }
+
+  c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
+  if (!c->fs_weave_rgb) {
+ debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
+ return false;
+  }
+
+  c->fs_rgba = create_frag_shader_rgba(c);
+  if (!c->fs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+ return false;
+  }
+   }
+
return true;
 }
 
@@ -95,17 +118,24 @@ static void cleanup_shaders(struct vl_compositor *c)
assert(c);
 
c->pipe->delete_vs_state(c->pipe, c->vs);
-   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
-   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.yuv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.rgb);
-   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+
+   if (pip_compute_supported) {
+  c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+  c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+  c->pipe->delete_compute_state(c->pipe, c->cs_rgba);
+   } else {
+  c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
+  c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
+  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
+   }
 }
 
 static bool
@@ -409,6 +439,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -532,26 +563,39 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 

[Mesa-dev] [PATCH v4 5/5] gallium/auxiliary/vl: Add video compositor compute shader render

2019-02-08 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.
Set video compositor compute shader render as default when pipe support it.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 105 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |   3 +
 2 files changed, 80 insertions(+), 28 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 4509913..2d624c8 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,6 +28,7 @@
 #include "util/u_sampler.h"
 
 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"
 
 static bool
 init_shaders(struct vl_compositor *c)
@@ -40,18 +41,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_video_buffer = create_frag_shader_video_buffer(c);
-   if (!c->fs_video_buffer) {
-  debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
-  return false;
-   }
-
-   c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
-   if (!c->fs_weave_rgb) {
-  debug_printf("Unable to create YCbCr-to-RGB weave fragment shader.\n");
-  return false;
-   }
-
c->fs_yuv.weave.y = create_frag_shader_deint_yuv(c, true, true);
c->fs_yuv.weave.uv = create_frag_shader_deint_yuv(c, false, true);
c->fs_yuv.bob.y = create_frag_shader_deint_yuv(c, true, false);
@@ -74,12 +63,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_rgba = create_frag_shader_rgba(c);
-   if (!c->fs_rgba) {
-  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
-  return false;
-   }
-
c->fs_rgb_yuv.y = create_frag_shader_rgb_yuv(c, true);
c->fs_rgb_yuv.uv = create_frag_shader_rgb_yuv(c, false);
if (!c->fs_rgb_yuv.y || !c->fs_rgb_yuv.uv) {
@@ -87,6 +70,44 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE)) {
+  c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+  if (!c->cs_video_buffer) {
+ debug_printf("Unable to create video_buffer compute shader.\n");
+ return false;
+  }
+
+  c->cs_weave_rgb = vl_compositor_cs_create_shader(c, 
compute_shader_weave);
+  if (!c->cs_weave_rgb) {
+ debug_printf("Unable to create weave_rgb compute shader.\n");
+ return false;
+  }
+
+  c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+  if (!c->cs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+ return false;
+  }
+   } else {
+  c->fs_video_buffer = create_frag_shader_video_buffer(c);
+  if (!c->fs_video_buffer) {
+ debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
+ return false;
+  }
+
+  c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
+  if (!c->fs_weave_rgb) {
+ debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
+ return false;
+  }
+
+  c->fs_rgba = create_frag_shader_rgba(c);
+  if (!c->fs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+ return false;
+  }
+   }
+
return true;
 }
 
@@ -95,17 +116,24 @@ static void cleanup_shaders(struct vl_compositor *c)
assert(c);
 
c->pipe->delete_vs_state(c->pipe, c->vs);
-   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
-   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.yuv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.rgb);
-   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+
+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE)) {
+  c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+  c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+  c->pipe->delete_compute_state(c->pipe, c->cs_rgba);
+   } else {
+  c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
+  c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
+  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
+   }
 }
 
 static bool
@@ -409,6 +437,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -532,26 +561,39 @@ 

[Mesa-dev] [PATCH v4 5/5] gallium/auxiliary/vl: Add vl_compositor compute shader render

2019-02-08 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.
Set vl_compositor compute shader render as default when pipe support it.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 105 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |   3 +
 2 files changed, 80 insertions(+), 28 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 4509913..2d624c8 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,6 +28,7 @@
 #include "util/u_sampler.h"
 
 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"
 
 static bool
 init_shaders(struct vl_compositor *c)
@@ -40,18 +41,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_video_buffer = create_frag_shader_video_buffer(c);
-   if (!c->fs_video_buffer) {
-  debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
-  return false;
-   }
-
-   c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
-   if (!c->fs_weave_rgb) {
-  debug_printf("Unable to create YCbCr-to-RGB weave fragment shader.\n");
-  return false;
-   }
-
c->fs_yuv.weave.y = create_frag_shader_deint_yuv(c, true, true);
c->fs_yuv.weave.uv = create_frag_shader_deint_yuv(c, false, true);
c->fs_yuv.bob.y = create_frag_shader_deint_yuv(c, true, false);
@@ -74,12 +63,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_rgba = create_frag_shader_rgba(c);
-   if (!c->fs_rgba) {
-  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
-  return false;
-   }
-
c->fs_rgb_yuv.y = create_frag_shader_rgb_yuv(c, true);
c->fs_rgb_yuv.uv = create_frag_shader_rgb_yuv(c, false);
if (!c->fs_rgb_yuv.y || !c->fs_rgb_yuv.uv) {
@@ -87,6 +70,44 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE)) {
+  c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+  if (!c->cs_video_buffer) {
+ debug_printf("Unable to create video_buffer compute shader.\n");
+ return false;
+  }
+
+  c->cs_weave_rgb = vl_compositor_cs_create_shader(c, 
compute_shader_weave);
+  if (!c->cs_weave_rgb) {
+ debug_printf("Unable to create weave_rgb compute shader.\n");
+ return false;
+  }
+
+  c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+  if (!c->cs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+ return false;
+  }
+   } else {
+  c->fs_video_buffer = create_frag_shader_video_buffer(c);
+  if (!c->fs_video_buffer) {
+ debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
+ return false;
+  }
+
+  c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
+  if (!c->fs_weave_rgb) {
+ debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
+ return false;
+  }
+
+  c->fs_rgba = create_frag_shader_rgba(c);
+  if (!c->fs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+ return false;
+  }
+   }
+
return true;
 }
 
@@ -95,17 +116,24 @@ static void cleanup_shaders(struct vl_compositor *c)
assert(c);
 
c->pipe->delete_vs_state(c->pipe, c->vs);
-   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
-   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.yuv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.rgb);
-   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+
+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE)) {
+  c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+  c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+  c->pipe->delete_compute_state(c->pipe, c->cs_rgba);
+   } else {
+  c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
+  c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
+  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
+   }
 }
 
 static bool
@@ -409,6 +437,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -532,26 +561,39 @@ 

[Mesa-dev] [PATCH v4 5/5] gallium/auxiliary/vl: Add vl_compositor compute shader render

2019-02-08 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.
Set vl_compositor compute shader render as default when pipe support it.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 105 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |   3 +
 2 files changed, 80 insertions(+), 28 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 4509913..2d624c8 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,6 +28,7 @@
 #include "util/u_sampler.h"
 
 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"
 
 static bool
 init_shaders(struct vl_compositor *c)
@@ -40,18 +41,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_video_buffer = create_frag_shader_video_buffer(c);
-   if (!c->fs_video_buffer) {
-  debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
-  return false;
-   }
-
-   c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
-   if (!c->fs_weave_rgb) {
-  debug_printf("Unable to create YCbCr-to-RGB weave fragment shader.\n");
-  return false;
-   }
-
c->fs_yuv.weave.y = create_frag_shader_deint_yuv(c, true, true);
c->fs_yuv.weave.uv = create_frag_shader_deint_yuv(c, false, true);
c->fs_yuv.bob.y = create_frag_shader_deint_yuv(c, true, false);
@@ -74,12 +63,6 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
-   c->fs_rgba = create_frag_shader_rgba(c);
-   if (!c->fs_rgba) {
-  debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
-  return false;
-   }
-
c->fs_rgb_yuv.y = create_frag_shader_rgb_yuv(c, true);
c->fs_rgb_yuv.uv = create_frag_shader_rgb_yuv(c, false);
if (!c->fs_rgb_yuv.y || !c->fs_rgb_yuv.uv) {
@@ -87,6 +70,44 @@ init_shaders(struct vl_compositor *c)
   return false;
}
 
+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE)) {
+  c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+  if (!c->cs_video_buffer) {
+ debug_printf("Unable to create video_buffer compute shader.\n");
+ return false;
+  }
+
+  c->cs_weave_rgb = vl_compositor_cs_create_shader(c, 
compute_shader_weave);
+  if (!c->cs_weave_rgb) {
+ debug_printf("Unable to create weave_rgb compute shader.\n");
+ return false;
+  }
+
+  c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+  if (!c->cs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+ return false;
+  }
+   } else {
+  c->fs_video_buffer = create_frag_shader_video_buffer(c);
+  if (!c->fs_video_buffer) {
+ debug_printf("Unable to create YCbCr-to-RGB fragment shader.\n");
+ return false;
+  }
+
+  c->fs_weave_rgb = create_frag_shader_weave_rgb(c);
+  if (!c->fs_weave_rgb) {
+ debug_printf("Unable to create YCbCr-to-RGB weave fragment 
shader.\n");
+ return false;
+  }
+
+  c->fs_rgba = create_frag_shader_rgba(c);
+  if (!c->fs_rgba) {
+ debug_printf("Unable to create RGB-to-RGB fragment shader.\n");
+ return false;
+  }
+   }
+
return true;
 }
 
@@ -95,17 +116,24 @@ static void cleanup_shaders(struct vl_compositor *c)
assert(c);
 
c->pipe->delete_vs_state(c->pipe, c->vs);
-   c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
-   c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.weave.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.y);
c->pipe->delete_fs_state(c->pipe, c->fs_yuv.bob.uv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.yuv);
c->pipe->delete_fs_state(c->pipe, c->fs_palette.rgb);
-   c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+
+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE)) {
+  c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+  c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+  c->pipe->delete_compute_state(c->pipe, c->cs_rgba);
+   } else {
+  c->pipe->delete_fs_state(c->pipe, c->fs_video_buffer);
+  c->pipe->delete_fs_state(c->pipe, c->fs_weave_rgb);
+  c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
+   }
 }
 
 static bool
@@ -409,6 +437,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -532,26 +561,39 @@ 

[Mesa-dev] [PATCH v3 3/6] gallium/auxiliary/vl: Rename csc_matrix and increase its size.

2019-02-07 Thread Zhu, James
Rename csc_matrix to shader_params, and increase shader_params size
to store more constants for compute shader,

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 10 +-
 src/gallium/auxiliary/vl/vl_compositor.h |  2 +-
 src/gallium/auxiliary/vl/vl_compositor_gfx.c |  2 +-
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index de6cf17..4509913 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -439,7 +439,7 @@ vl_compositor_set_csc_matrix(struct vl_compositor_state *s,
 
assert(s);
 
-   float *ptr = pipe_buffer_map(s->pipe, s->csc_matrix,
+   float *ptr = pipe_buffer_map(s->pipe, s->shader_params,
PIPE_TRANSFER_WRITE | 
PIPE_TRANSFER_DISCARD_RANGE,
_transfer);
 
@@ -750,15 +750,15 @@ vl_compositor_init_state(struct vl_compositor_state *s, 
struct pipe_context *pip
 * Const buffer contains the color conversion matrix and bias vectors
 */
/* XXX: Create with IMMUTABLE/STATIC... although it does change every once 
in a long while... */
-   s->csc_matrix = pipe_buffer_create_const0
+   s->shader_params = pipe_buffer_create_const0
(
   pipe->screen,
   PIPE_BIND_CONSTANT_BUFFER,
   PIPE_USAGE_DEFAULT,
-  sizeof(csc_matrix) + 2*sizeof(float)
+  sizeof(csc_matrix) + 4*sizeof(float) + 6*sizeof(int)
);
 
-   if (!s->csc_matrix)
+   if (!s->shader_params)
   return false;
 
vl_compositor_clear_layers(s);
@@ -776,5 +776,5 @@ vl_compositor_cleanup_state(struct vl_compositor_state *s)
assert(s);
 
vl_compositor_clear_layers(s);
-   pipe_resource_reference(>csc_matrix, NULL);
+   pipe_resource_reference(>shader_params, NULL);
 }
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index aa843c3..c34bad0 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -90,7 +90,7 @@ struct vl_compositor_state
 
bool scissor_valid;
struct pipe_scissor_state scissor;
-   struct pipe_resource *csc_matrix;
+   struct pipe_resource *shader_params;
 
union pipe_color_union clear_color;
 
diff --git a/src/gallium/auxiliary/vl/vl_compositor_gfx.c 
b/src/gallium/auxiliary/vl/vl_compositor_gfx.c
index 93e418a..62db005 100644
--- a/src/gallium/auxiliary/vl/vl_compositor_gfx.c
+++ b/src/gallium/auxiliary/vl/vl_compositor_gfx.c
@@ -719,7 +719,7 @@ vl_compositor_gfx_render(struct vl_compositor_state *s,
c->pipe->bind_vs_state(c->pipe, c->vs);
c->pipe->set_vertex_buffers(c->pipe, 0, 1, >vertex_buf);
c->pipe->bind_vertex_elements_state(c->pipe, c->vertex_elems_state);
-   pipe_set_constant_buffer(c->pipe, PIPE_SHADER_FRAGMENT, 0, s->csc_matrix);
+   pipe_set_constant_buffer(c->pipe, PIPE_SHADER_FRAGMENT, 0, 
s->shader_params);
c->pipe->bind_rasterizer_state(c->pipe, c->rast);
 
draw_layers(c, s, dirty_area);
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 5/6] gallium/auxiliary/vl: Add compute shader initilization, assign and cleanup

2019-02-07 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 31 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |  3 +++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 4509913..da4b02d 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,12 +28,31 @@
 #include "util/u_sampler.h"
 
 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"
 
 static bool
 init_shaders(struct vl_compositor *c)
 {
assert(c);
 
+   c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+   if (!c->cs_video_buffer) {
+  debug_printf("Unable to create video_buffer compute shader.\n");
+  return false;
+   }
+
+   c->cs_weave_rgb = vl_compositor_cs_create_shader(c, compute_shader_weave);
+   if (!c->cs_weave_rgb) {
+  debug_printf("Unable to create weave_rgb compute shader.\n");
+  return false;
+   }
+
+   c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+   if (!c->cs_rgba) {
+  debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+  return false;
+   }
+
c->vs = create_vert_shader(c);
if (!c->vs) {
   debug_printf("Unable to create vertex shader.\n");
@@ -106,6 +125,9 @@ static void cleanup_shaders(struct vl_compositor *c)
c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+   c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+   c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+   c->pipe->delete_compute_state(c->pipe, c->cs_rgba);
 }
 
 static bool
@@ -409,6 +431,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -533,6 +556,7 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
   switch(deinterlace) {
   case VL_COMPOSITOR_WEAVE:
  s->layers[layer].fs = c->fs_weave_rgb;
+ s->layers[layer].cs = c->cs_weave_rgb;
  break;
 
   case VL_COMPOSITOR_BOB_TOP:
@@ -540,6 +564,7 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
  s->layers[layer].src.tl.y += half_a_line;
  s->layers[layer].src.br.y += half_a_line;
  s->layers[layer].fs = c->fs_video_buffer;
+ s->layers[layer].cs = c->cs_video_buffer;
  break;
 
   case VL_COMPOSITOR_BOB_BOTTOM:
@@ -547,11 +572,14 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
  s->layers[layer].src.tl.y -= half_a_line;
  s->layers[layer].src.br.y -= half_a_line;
  s->layers[layer].fs = c->fs_video_buffer;
+ s->layers[layer].cs = c->cs_video_buffer;
  break;
   }
 
-   } else
+   } else {
   s->layers[layer].fs = c->fs_video_buffer;
+  s->layers[layer].cs = c->cs_video_buffer;
+   }
 }
 
 void
@@ -601,6 +629,7 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
 
s->used_layers |= 1 << layer;
s->layers[layer].fs = c->fs_rgba;
+   s->layers[layer].cs = c->cs_rgba;
s->layers[layer].samplers[0] = c->sampler_linear;
s->layers[layer].samplers[1] = NULL;
s->layers[layer].samplers[2] = NULL;
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index 5fa1b6c..b0ed7f5 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -117,6 +117,9 @@ struct vl_compositor
void *fs_video_buffer;
void *fs_weave_rgb;
void *fs_rgba;
+   void *cs_video_buffer;
+   void *cs_weave_rgb;
+   void *cs_rgba;
 
struct {
   struct {
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 6/6] gallium/auxiliary/vl: Add video compute shader render

2019-02-07 Thread Zhu, James
Add video compute shader render and set it to default when
pipe support it.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index da4b02d..5308887 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -730,7 +730,12 @@ vl_compositor_render(struct vl_compositor_state *s,
  boolclear_dirty)
 {
assert(s);
-   vl_compositor_gfx_render(s, c, dst_surface, dirty_area, clear_dirty);
+
+   if (c->pipe->screen->get_param(c->pipe->screen, PIPE_CAP_COMPUTE) &&
+   s->layers->cs)
+  vl_compositor_cs_render(s, c, dst_surface, dirty_area, clear_dirty);
+   else
+  vl_compositor_gfx_render(s, c, dst_surface, dirty_area, clear_dirty);
 }
 
 bool
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 0/6] Add compute shader support on video compositor render

2019-02-07 Thread Zhu, James
V3:
  Rename csc_matrix to shader_params
  Remove debug option CS_COMPOSITOR_RENDER, and set compute shader video 
compositor render as default when hardware supports.

James Zhu (6):
  gallium/auxiliary/vl: Move dirty define to header file
  gallium/auxiliary/vl: Split vl_compositor graphic shaders from
vl_compositor API
  gallium/auxiliary/vl: Rename csc_matrix and increase its size.
  gallium/auxiliary/vl: Add compute shader to support video compositor
render
  gallium/auxiliary/vl: Add compute shader initilization, assign and
cleanup
  gallium/auxiliary/vl: Add video compute shader render

 src/gallium/auxiliary/Makefile.sources   |   4 +
 src/gallium/auxiliary/meson.build|   4 +
 src/gallium/auxiliary/vl/vl_compositor.c | 732 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |   8 +-
 src/gallium/auxiliary/vl/vl_compositor_cs.c  | 408 +++
 src/gallium/auxiliary/vl/vl_compositor_cs.h  |  56 ++
 src/gallium/auxiliary/vl/vl_compositor_gfx.c | 726 ++
 src/gallium/auxiliary/vl/vl_compositor_gfx.h |  88 
 8 files changed, 1332 insertions(+), 694 deletions(-)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.h
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.h

-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 2/6] gallium/auxiliary/vl: Split vl_compositor graphic shaders from vl_compositor API

2019-02-07 Thread Zhu, James
Split vl_compositor graphic shaders from vl_compositor API in order to share
vl_compositor API with vl_compositor compute shader later.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/Makefile.sources   |   2 +
 src/gallium/auxiliary/meson.build|   2 +
 src/gallium/auxiliary/vl/vl_compositor.c | 691 +
 src/gallium/auxiliary/vl/vl_compositor_gfx.c | 726 +++
 src/gallium/auxiliary/vl/vl_compositor_gfx.h |  88 
 5 files changed, 821 insertions(+), 688 deletions(-)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.h

diff --git a/src/gallium/auxiliary/Makefile.sources 
b/src/gallium/auxiliary/Makefile.sources
index 50e8808..a40917b 100644
--- a/src/gallium/auxiliary/Makefile.sources
+++ b/src/gallium/auxiliary/Makefile.sources
@@ -348,6 +348,8 @@ VL_SOURCES := \
vl/vl_bicubic_filter.h \
vl/vl_compositor.c \
vl/vl_compositor.h \
+   vl/vl_compositor_gfx.c \
+   vl/vl_compositor_gfx.h \
vl/vl_csc.c \
vl/vl_csc.h \
vl/vl_decoder.c \
diff --git a/src/gallium/auxiliary/meson.build 
b/src/gallium/auxiliary/meson.build
index 57f7e69..97063b4 100644
--- a/src/gallium/auxiliary/meson.build
+++ b/src/gallium/auxiliary/meson.build
@@ -445,6 +445,8 @@ files_libgalliumvl = files(
   'vl/vl_bicubic_filter.h',
   'vl/vl_compositor.c',
   'vl/vl_compositor.h',
+  'vl/vl_compositor_gfx.c',
+  'vl/vl_compositor_gfx.h',
   'vl/vl_csc.c',
   'vl/vl_csc.h',
   'vl/vl_decoder.c',
diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 41f9e5e..de6cf17 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -25,447 +25,9 @@
  *
  **/
 
-#include 
-
-#include "pipe/p_compiler.h"
-#include "pipe/p_context.h"
-
-#include "util/u_memory.h"
-#include "util/u_draw.h"
-#include "util/u_surface.h"
-#include "util/u_upload_mgr.h"
 #include "util/u_sampler.h"
 
-#include "tgsi/tgsi_ureg.h"
-
-#include "vl_csc.h"
-#include "vl_types.h"
-#include "vl_compositor.h"
-
-enum VS_OUTPUT
-{
-   VS_O_VPOS = 0,
-   VS_O_COLOR = 0,
-   VS_O_VTEX = 0,
-   VS_O_VTOP,
-   VS_O_VBOTTOM,
-};
-
-static void *
-create_vert_shader(struct vl_compositor *c)
-{
-   struct ureg_program *shader;
-   struct ureg_src vpos, vtex, color;
-   struct ureg_dst tmp;
-   struct ureg_dst o_vpos, o_vtex, o_color;
-   struct ureg_dst o_vtop, o_vbottom;
-
-   shader = ureg_create(PIPE_SHADER_VERTEX);
-   if (!shader)
-  return false;
-
-   vpos = ureg_DECL_vs_input(shader, 0);
-   vtex = ureg_DECL_vs_input(shader, 1);
-   color = ureg_DECL_vs_input(shader, 2);
-   tmp = ureg_DECL_temporary(shader);
-   o_vpos = ureg_DECL_output(shader, TGSI_SEMANTIC_POSITION, VS_O_VPOS);
-   o_color = ureg_DECL_output(shader, TGSI_SEMANTIC_COLOR, VS_O_COLOR);
-   o_vtex = ureg_DECL_output(shader, TGSI_SEMANTIC_GENERIC, VS_O_VTEX);
-   o_vtop = ureg_DECL_output(shader, TGSI_SEMANTIC_GENERIC, VS_O_VTOP);
-   o_vbottom = ureg_DECL_output(shader, TGSI_SEMANTIC_GENERIC, VS_O_VBOTTOM);
-
-   /*
-* o_vpos = vpos
-* o_vtex = vtex
-* o_color = color
-*/
-   ureg_MOV(shader, o_vpos, vpos);
-   ureg_MOV(shader, o_vtex, vtex);
-   ureg_MOV(shader, o_color, color);
-
-   /*
-* tmp.x = vtex.w / 2
-* tmp.y = vtex.w / 4
-*
-* o_vtop.x = vtex.x
-* o_vtop.y = vtex.y * tmp.x + 0.25f
-* o_vtop.z = vtex.y * tmp.y + 0.25f
-* o_vtop.w = 1 / tmp.x
-*
-* o_vbottom.x = vtex.x
-* o_vbottom.y = vtex.y * tmp.x - 0.25f
-* o_vbottom.z = vtex.y * tmp.y - 0.25f
-* o_vbottom.w = 1 / tmp.y
-*/
-   ureg_MUL(shader, ureg_writemask(tmp, TGSI_WRITEMASK_X),
-ureg_scalar(vtex, TGSI_SWIZZLE_W), ureg_imm1f(shader, 0.5f));
-   ureg_MUL(shader, ureg_writemask(tmp, TGSI_WRITEMASK_Y),
-ureg_scalar(vtex, TGSI_SWIZZLE_W), ureg_imm1f(shader, 0.25f));
-
-   ureg_MOV(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_X), vtex);
-   ureg_MAD(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_Y), 
ureg_scalar(vtex, TGSI_SWIZZLE_Y),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_X), ureg_imm1f(shader, 
0.25f));
-   ureg_MAD(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_Z), 
ureg_scalar(vtex, TGSI_SWIZZLE_Y),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_Y), ureg_imm1f(shader, 
0.25f));
-   ureg_RCP(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_W),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_X));
-
-   ureg_MOV(shader, ureg_writemask(o_vbottom, TGSI_WRITEMASK_X), vtex);
-   ureg_MAD(shader, ureg_writemask(o_vbottom, TGSI_WRITEMASK_Y), 
ureg_scalar(vtex, TGSI_SWIZZLE_Y),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_X), ureg_imm1f(shader, 
-0.25f));
-   ureg_MAD(shader, ureg_writemask(o_vbottom, TGSI_WRITEMASK_Z), 
ureg_scalar(vtex, 

[Mesa-dev] [PATCH v3 4/6] gallium/auxiliary/vl: Add compute shader to support video compositor render

2019-02-07 Thread Zhu, James
Add compute shader to support video compositor render.

Signed-off-by: James Zhu 
Acked-by: Christian König 
---
 src/gallium/auxiliary/Makefile.sources  |   2 +
 src/gallium/auxiliary/meson.build   |   2 +
 src/gallium/auxiliary/vl/vl_compositor.h|   1 +
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 408 
 src/gallium/auxiliary/vl/vl_compositor_cs.h |  56 
 5 files changed, 469 insertions(+)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.h

diff --git a/src/gallium/auxiliary/Makefile.sources 
b/src/gallium/auxiliary/Makefile.sources
index a40917b..02cc5df 100644
--- a/src/gallium/auxiliary/Makefile.sources
+++ b/src/gallium/auxiliary/Makefile.sources
@@ -350,6 +350,8 @@ VL_SOURCES := \
vl/vl_compositor.h \
vl/vl_compositor_gfx.c \
vl/vl_compositor_gfx.h \
+   vl/vl_compositor_cs.c \
+   vl/vl_compositor_cs.h \
vl/vl_csc.c \
vl/vl_csc.h \
vl/vl_decoder.c \
diff --git a/src/gallium/auxiliary/meson.build 
b/src/gallium/auxiliary/meson.build
index 97063b4..6e5109e 100644
--- a/src/gallium/auxiliary/meson.build
+++ b/src/gallium/auxiliary/meson.build
@@ -447,6 +447,8 @@ files_libgalliumvl = files(
   'vl/vl_compositor.h',
   'vl/vl_compositor_gfx.c',
   'vl/vl_compositor_gfx.h',
+  'vl/vl_compositor_cs.c',
+  'vl/vl_compositor_cs.h',
   'vl/vl_csc.c',
   'vl/vl_csc.h',
   'vl/vl_decoder.c',
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index c34bad0..5fa1b6c 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -72,6 +72,7 @@ struct vl_compositor_layer
struct pipe_viewport_state viewport;
 
void *fs;
+   void *cs;
void *samplers[3];
void *blend;
 
diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
new file mode 100644
index 000..8ab44f3
--- /dev/null
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -0,0 +1,408 @@
+/**
+ *
+ * Copyright 2019 Advanced Micro Devices, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: James Zhu 
+ *
+ **/
+
+#include 
+
+#include "tgsi/tgsi_text.h"
+#include "vl_compositor_cs.h"
+
+struct cs_viewport {
+   float scale_x;
+   float scale_y;
+   struct u_rect area;
+   int translate_x;
+   int translate_y;
+};
+
+char *compute_shader_video_buffer =
+  "COMP\n"
+  "PROPERTY CS_FIXED_BLOCK_WIDTH 8\n"
+  "PROPERTY CS_FIXED_BLOCK_HEIGHT 8\n"
+  "PROPERTY CS_FIXED_BLOCK_DEPTH 1\n"
+
+  "DCL SV[0], THREAD_ID\n"
+  "DCL SV[1], BLOCK_ID\n"
+
+  "DCL CONST[0..5]\n"
+  "DCL SVIEW[0..2], RECT, FLOAT\n"
+  "DCL SAMP[0..2]\n"
+
+  "DCL IMAGE[0], 2D, WR\n"
+  "DCL TEMP[0..7]\n"
+
+  "IMM[0] UINT32 { 8, 8, 1, 0}\n"
+  "IMM[1] FLT32 { 1.0, 2.0, 0.0, 0.0}\n"
+
+  "UMAD TEMP[0], SV[1], IMM[0], SV[0]\n"
+
+  /* Drawn area check */
+  "USGE TEMP[1].xy, TEMP[0].xyxy, CONST[4].xyxy\n"
+  "USLT TEMP[1].zw, TEMP[0].xyxy, CONST[4].zwzw\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+
+  "UIF TEMP[1]\n"
+ /* Translate */
+ "UADD TEMP[2].xy, TEMP[0], -CONST[5].xyxy\n"
+ "U2F TEMP[2], TEMP[2]\n"
+ "DIV TEMP[3], TEMP[2], IMM[1].\n"
+
+ /* Scale */
+ "DIV TEMP[2], TEMP[2], CONST[3].zwzw\n"
+ "DIV TEMP[3], TEMP[3], CONST[3].zwzw\n"
+
+ /* Fetch texels */
+ "TEX_LZ TEMP[4].x, TEMP[2], SAMP[0], RECT\n"
+ "TEX_LZ TEMP[4].y, TEMP[3], SAMP[1], RECT\n"

[Mesa-dev] [PATCH v3 1/6] gallium/auxiliary/vl: Move dirty define to header file

2019-02-07 Thread Zhu, James
Move dirty define to header file to share with compute shader.

Signed-off-by: James Zhu 
Reviewed-by: Christian König 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 15 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |  2 ++
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 159a295..41f9e5e 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -42,9 +42,6 @@
 #include "vl_types.h"
 #include "vl_compositor.h"
 
-#define MIN_DIRTY (0)
-#define MAX_DIRTY (1 << 15)
-
 enum VS_OUTPUT
 {
VS_O_VPOS = 0,
@@ -899,8 +896,8 @@ gen_vertex_data(struct vl_compositor *c, struct 
vl_compositor_state *s, struct u
  dirty->y1 <= drawn.y1) {
 
// We clear the dirty area anyway, no need for 
clear_render_target
-   dirty->x0 = dirty->y0 = MAX_DIRTY;
-   dirty->x1 = dirty->y1 = MIN_DIRTY;
+   dirty->x0 = dirty->y0 = VL_COMPOSITOR_MAX_DIRTY;
+   dirty->x1 = dirty->y1 = VL_COMPOSITOR_MIN_DIRTY;
 }
  }
   }
@@ -1030,8 +1027,8 @@ vl_compositor_reset_dirty_area(struct u_rect *dirty)
 {
assert(dirty);
 
-   dirty->x0 = dirty->y0 = MIN_DIRTY;
-   dirty->x1 = dirty->y1 = MAX_DIRTY;
+   dirty->x0 = dirty->y0 = VL_COMPOSITOR_MIN_DIRTY;
+   dirty->x1 = dirty->y1 = VL_COMPOSITOR_MAX_DIRTY;
 }
 
 void
@@ -1378,8 +1375,8 @@ vl_compositor_render(struct vl_compositor_state *s,
 
   c->pipe->clear_render_target(c->pipe, dst_surface, >clear_color,
0, 0, dst_surface->width, 
dst_surface->height, false);
-  dirty_area->x0 = dirty_area->y0 = MAX_DIRTY;
-  dirty_area->x1 = dirty_area->y1 = MIN_DIRTY;
+  dirty_area->x0 = dirty_area->y0 = VL_COMPOSITOR_MAX_DIRTY;
+  dirty_area->x1 = dirty_area->y1 = VL_COMPOSITOR_MIN_DIRTY;
}
 
c->pipe->set_framebuffer_state(c->pipe, >fb_state);
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index 8819176..aa843c3 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -44,6 +44,8 @@ struct pipe_context;
  */
 
 #define VL_COMPOSITOR_MAX_LAYERS 16
+#define VL_COMPOSITOR_MIN_DIRTY (0)
+#define VL_COMPOSITOR_MAX_DIRTY (1 << 15)
 
 /* deinterlace allgorithem */
 enum vl_compositor_deinterlace
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 2/7] gallium/auxiliary/vl: Split vl_compositor graphic shaders from vl_compositor API

2019-02-06 Thread Zhu, James
Split vl_compositor graphic shaders from vl_compositor API in order to share
vl_compositor API with vl_compositor compute shader later.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/Makefile.sources   |   2 +
 src/gallium/auxiliary/meson.build|   2 +
 src/gallium/auxiliary/vl/vl_compositor.c | 690 +
 src/gallium/auxiliary/vl/vl_compositor_gfx.c | 726 +++
 src/gallium/auxiliary/vl/vl_compositor_gfx.h |  88 
 5 files changed, 821 insertions(+), 687 deletions(-)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.h

diff --git a/src/gallium/auxiliary/Makefile.sources 
b/src/gallium/auxiliary/Makefile.sources
index 50e8808..a40917b 100644
--- a/src/gallium/auxiliary/Makefile.sources
+++ b/src/gallium/auxiliary/Makefile.sources
@@ -348,6 +348,8 @@ VL_SOURCES := \
vl/vl_bicubic_filter.h \
vl/vl_compositor.c \
vl/vl_compositor.h \
+   vl/vl_compositor_gfx.c \
+   vl/vl_compositor_gfx.h \
vl/vl_csc.c \
vl/vl_csc.h \
vl/vl_decoder.c \
diff --git a/src/gallium/auxiliary/meson.build 
b/src/gallium/auxiliary/meson.build
index 57f7e69..97063b4 100644
--- a/src/gallium/auxiliary/meson.build
+++ b/src/gallium/auxiliary/meson.build
@@ -445,6 +445,8 @@ files_libgalliumvl = files(
   'vl/vl_bicubic_filter.h',
   'vl/vl_compositor.c',
   'vl/vl_compositor.h',
+  'vl/vl_compositor_gfx.c',
+  'vl/vl_compositor_gfx.h',
   'vl/vl_csc.c',
   'vl/vl_csc.h',
   'vl/vl_decoder.c',
diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 41f9e5e..a40b668 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -25,447 +25,10 @@
  *
  **/
 
-#include 
-
-#include "pipe/p_compiler.h"
-#include "pipe/p_context.h"
-
-#include "util/u_memory.h"
-#include "util/u_draw.h"
-#include "util/u_surface.h"
-#include "util/u_upload_mgr.h"
 #include "util/u_sampler.h"
 
-#include "tgsi/tgsi_ureg.h"
-
-#include "vl_csc.h"
-#include "vl_types.h"
-#include "vl_compositor.h"
-
-enum VS_OUTPUT
-{
-   VS_O_VPOS = 0,
-   VS_O_COLOR = 0,
-   VS_O_VTEX = 0,
-   VS_O_VTOP,
-   VS_O_VBOTTOM,
-};
-
-static void *
-create_vert_shader(struct vl_compositor *c)
-{
-   struct ureg_program *shader;
-   struct ureg_src vpos, vtex, color;
-   struct ureg_dst tmp;
-   struct ureg_dst o_vpos, o_vtex, o_color;
-   struct ureg_dst o_vtop, o_vbottom;
-
-   shader = ureg_create(PIPE_SHADER_VERTEX);
-   if (!shader)
-  return false;
-
-   vpos = ureg_DECL_vs_input(shader, 0);
-   vtex = ureg_DECL_vs_input(shader, 1);
-   color = ureg_DECL_vs_input(shader, 2);
-   tmp = ureg_DECL_temporary(shader);
-   o_vpos = ureg_DECL_output(shader, TGSI_SEMANTIC_POSITION, VS_O_VPOS);
-   o_color = ureg_DECL_output(shader, TGSI_SEMANTIC_COLOR, VS_O_COLOR);
-   o_vtex = ureg_DECL_output(shader, TGSI_SEMANTIC_GENERIC, VS_O_VTEX);
-   o_vtop = ureg_DECL_output(shader, TGSI_SEMANTIC_GENERIC, VS_O_VTOP);
-   o_vbottom = ureg_DECL_output(shader, TGSI_SEMANTIC_GENERIC, VS_O_VBOTTOM);
-
-   /*
-* o_vpos = vpos
-* o_vtex = vtex
-* o_color = color
-*/
-   ureg_MOV(shader, o_vpos, vpos);
-   ureg_MOV(shader, o_vtex, vtex);
-   ureg_MOV(shader, o_color, color);
-
-   /*
-* tmp.x = vtex.w / 2
-* tmp.y = vtex.w / 4
-*
-* o_vtop.x = vtex.x
-* o_vtop.y = vtex.y * tmp.x + 0.25f
-* o_vtop.z = vtex.y * tmp.y + 0.25f
-* o_vtop.w = 1 / tmp.x
-*
-* o_vbottom.x = vtex.x
-* o_vbottom.y = vtex.y * tmp.x - 0.25f
-* o_vbottom.z = vtex.y * tmp.y - 0.25f
-* o_vbottom.w = 1 / tmp.y
-*/
-   ureg_MUL(shader, ureg_writemask(tmp, TGSI_WRITEMASK_X),
-ureg_scalar(vtex, TGSI_SWIZZLE_W), ureg_imm1f(shader, 0.5f));
-   ureg_MUL(shader, ureg_writemask(tmp, TGSI_WRITEMASK_Y),
-ureg_scalar(vtex, TGSI_SWIZZLE_W), ureg_imm1f(shader, 0.25f));
-
-   ureg_MOV(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_X), vtex);
-   ureg_MAD(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_Y), 
ureg_scalar(vtex, TGSI_SWIZZLE_Y),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_X), ureg_imm1f(shader, 
0.25f));
-   ureg_MAD(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_Z), 
ureg_scalar(vtex, TGSI_SWIZZLE_Y),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_Y), ureg_imm1f(shader, 
0.25f));
-   ureg_RCP(shader, ureg_writemask(o_vtop, TGSI_WRITEMASK_W),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_X));
-
-   ureg_MOV(shader, ureg_writemask(o_vbottom, TGSI_WRITEMASK_X), vtex);
-   ureg_MAD(shader, ureg_writemask(o_vbottom, TGSI_WRITEMASK_Y), 
ureg_scalar(vtex, TGSI_SWIZZLE_Y),
-ureg_scalar(ureg_src(tmp), TGSI_SWIZZLE_X), ureg_imm1f(shader, 
-0.25f));
-   ureg_MAD(shader, ureg_writemask(o_vbottom, TGSI_WRITEMASK_Z), 
ureg_scalar(vtex, TGSI_SWIZZLE_Y),
-

[Mesa-dev] [PATCH v2 5/7] gallium/auxiliary/vl: Add compute shader initilization, assign and cleanup

2019-02-06 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 31 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |  3 +++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 7d701d5..5b6c3bd 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -28,6 +28,7 @@
 #include "util/u_sampler.h"
 
 #include "vl_compositor_gfx.h"
+#include "vl_compositor_cs.h"
 
 
 static bool
@@ -35,6 +36,24 @@ init_shaders(struct vl_compositor *c)
 {
assert(c);
 
+   c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+   if (!c->cs_video_buffer) {
+  debug_printf("Unable to create video_buffer compute shader.\n");
+  return false;
+   }
+
+   c->cs_weave_rgb = vl_compositor_cs_create_shader(c, compute_shader_weave);
+   if (!c->cs_weave_rgb) {
+  debug_printf("Unable to create weave_rgb compute shader.\n");
+  return false;
+   }
+
+   c->cs_rgba = vl_compositor_cs_create_shader(c, compute_shader_rgba);
+   if (!c->cs_rgba) {
+  debug_printf("Unable to create RGB-to-RGB compute shader.\n");
+  return false;
+   }
+
c->vs = create_vert_shader(c);
if (!c->vs) {
   debug_printf("Unable to create vertex shader.\n");
@@ -107,6 +126,9 @@ static void cleanup_shaders(struct vl_compositor *c)
c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+   c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+   c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+   c->pipe->delete_compute_state(c->pipe, c->cs_rgba);
 }
 
 static bool
@@ -410,6 +432,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -534,6 +557,7 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
   switch(deinterlace) {
   case VL_COMPOSITOR_WEAVE:
  s->layers[layer].fs = c->fs_weave_rgb;
+ s->layers[layer].cs = c->cs_weave_rgb;
  break;
 
   case VL_COMPOSITOR_BOB_TOP:
@@ -541,6 +565,7 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
  s->layers[layer].src.tl.y += half_a_line;
  s->layers[layer].src.br.y += half_a_line;
  s->layers[layer].fs = c->fs_video_buffer;
+ s->layers[layer].cs = c->cs_video_buffer;
  break;
 
   case VL_COMPOSITOR_BOB_BOTTOM:
@@ -548,11 +573,14 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
  s->layers[layer].src.tl.y -= half_a_line;
  s->layers[layer].src.br.y -= half_a_line;
  s->layers[layer].fs = c->fs_video_buffer;
+ s->layers[layer].cs = c->cs_video_buffer;
  break;
   }
 
-   } else
+   } else {
   s->layers[layer].fs = c->fs_video_buffer;
+  s->layers[layer].cs = c->cs_video_buffer;
+   }
 }
 
 void
@@ -602,6 +630,7 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
 
s->used_layers |= 1 << layer;
s->layers[layer].fs = c->fs_rgba;
+   s->layers[layer].cs = c->cs_rgba;
s->layers[layer].samplers[0] = c->sampler_linear;
s->layers[layer].samplers[1] = NULL;
s->layers[layer].samplers[2] = NULL;
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index e6549f0..e611c8c 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -117,6 +117,9 @@ struct vl_compositor
void *fs_video_buffer;
void *fs_weave_rgb;
void *fs_rgba;
+   void *cs_video_buffer;
+   void *cs_weave_rgb;
+   void *cs_rgba;
 
struct {
   struct {
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 6/7] gallium/auxiliary/vl: Add debug option CS_COMPOSITOR_RENDER

2019-02-06 Thread Zhu, James
Add debug option CS_COMPOSITOR_RENDER to enable/diable video
compositor compute shader render through system environment

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 5b6c3bd..e50e253 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -30,6 +30,7 @@
 #include "vl_compositor_gfx.h"
 #include "vl_compositor_cs.h"
 
+static bool cs_compositor_render_enable = FALSE;
 
 static bool
 init_shaders(struct vl_compositor *c)
@@ -739,6 +740,9 @@ vl_compositor_init(struct vl_compositor *c, struct 
pipe_context *pipe)
 {
assert(c);
 
+   if (debug_get_bool_option("CS_COMPOSITOR_RENDER", false))
+  cs_compositor_render_enable = true;
+
memset(c, 0, sizeof(*c));
 
c->pipe = pipe;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 3/7] gallium/auxiliary/vl: Increase csc_matrix size

2019-02-06 Thread Zhu, James
Increase csc_matrix size to store more constants for compute shader.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index a40b668..7d701d5 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -756,7 +756,7 @@ vl_compositor_init_state(struct vl_compositor_state *s, 
struct pipe_context *pip
   pipe->screen,
   PIPE_BIND_CONSTANT_BUFFER,
   PIPE_USAGE_DEFAULT,
-  sizeof(csc_matrix) + 2*sizeof(float)
+  sizeof(csc_matrix) + 4*sizeof(float) + 6*sizeof(int)
);
 
if (!s->csc_matrix)
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 7/7] gallium/auxiliary/vl: Add video compute shader render

2019-02-06 Thread Zhu, James
Add video compute shader render. export CS_COMPOSITOR_RENDER=true
to enable video compute shader render.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index e50e253..394b6ac 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -732,7 +732,11 @@ vl_compositor_render(struct vl_compositor_state *s,
  boolclear_dirty)
 {
assert(s);
-   vl_compositor_gfx_render(s, c, dst_surface, dirty_area, clear_dirty);
+
+   if (cs_compositor_render_enable && s->layers->cs)
+  vl_compositor_cs_render(s, c, dst_surface, dirty_area, clear_dirty);
+   else
+  vl_compositor_gfx_render(s, c, dst_surface, dirty_area, clear_dirty);
 }
 
 bool
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 0/7] Add compute shader support on video compositor render

2019-02-06 Thread Zhu, James
V2:
  Split vl_compositor graphic shaders from vl_compositor API
  replace compute_shader_sub_pic with compute_shader_rgba
  Add VL_COMPOSITOR prefix in front of dirty define
  replace backslashes in the commit title with forward slashes

James Zhu (7):
  gallium/auxiliary/vl: Move dirty define to header file
  gallium/auxiliary/vl: Split vl_compositor graphic shaders from
vl_compositor API
  gallium/auxiliary/vl: Increase csc_matrix size
  gallium/auxiliary/vl: Add compute shader to support video compositor
render
  gallium/auxiliary/vl: Add compute shader initilization, assign and
cleanup
  gallium/auxiliary/vl: Add debug option CS_COMPOSITOR_RENDER
  gallium/auxiliary/vl: Add video compute shader render

 src/gallium/auxiliary/Makefile.sources   |   4 +
 src/gallium/auxiliary/meson.build|   4 +
 src/gallium/auxiliary/vl/vl_compositor.c | 726 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |   6 +
 src/gallium/auxiliary/vl/vl_compositor_cs.c  | 408 +++
 src/gallium/auxiliary/vl/vl_compositor_cs.h  |  56 +++
 src/gallium/auxiliary/vl/vl_compositor_gfx.c | 726 +++
 src/gallium/auxiliary/vl/vl_compositor_gfx.h |  88 
 8 files changed, 1330 insertions(+), 688 deletions(-)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.h
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_gfx.h

-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 1/7] gallium/auxiliary/vl: Move dirty define to header file

2019-02-06 Thread Zhu, James
Move dirty define to header file to share with compute shader.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 15 ++-
 src/gallium/auxiliary/vl/vl_compositor.h |  2 ++
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 159a295..41f9e5e 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -42,9 +42,6 @@
 #include "vl_types.h"
 #include "vl_compositor.h"
 
-#define MIN_DIRTY (0)
-#define MAX_DIRTY (1 << 15)
-
 enum VS_OUTPUT
 {
VS_O_VPOS = 0,
@@ -899,8 +896,8 @@ gen_vertex_data(struct vl_compositor *c, struct 
vl_compositor_state *s, struct u
  dirty->y1 <= drawn.y1) {
 
// We clear the dirty area anyway, no need for 
clear_render_target
-   dirty->x0 = dirty->y0 = MAX_DIRTY;
-   dirty->x1 = dirty->y1 = MIN_DIRTY;
+   dirty->x0 = dirty->y0 = VL_COMPOSITOR_MAX_DIRTY;
+   dirty->x1 = dirty->y1 = VL_COMPOSITOR_MIN_DIRTY;
 }
  }
   }
@@ -1030,8 +1027,8 @@ vl_compositor_reset_dirty_area(struct u_rect *dirty)
 {
assert(dirty);
 
-   dirty->x0 = dirty->y0 = MIN_DIRTY;
-   dirty->x1 = dirty->y1 = MAX_DIRTY;
+   dirty->x0 = dirty->y0 = VL_COMPOSITOR_MIN_DIRTY;
+   dirty->x1 = dirty->y1 = VL_COMPOSITOR_MAX_DIRTY;
 }
 
 void
@@ -1378,8 +1375,8 @@ vl_compositor_render(struct vl_compositor_state *s,
 
   c->pipe->clear_render_target(c->pipe, dst_surface, >clear_color,
0, 0, dst_surface->width, 
dst_surface->height, false);
-  dirty_area->x0 = dirty_area->y0 = MAX_DIRTY;
-  dirty_area->x1 = dirty_area->y1 = MIN_DIRTY;
+  dirty_area->x0 = dirty_area->y0 = VL_COMPOSITOR_MAX_DIRTY;
+  dirty_area->x1 = dirty_area->y1 = VL_COMPOSITOR_MIN_DIRTY;
}
 
c->pipe->set_framebuffer_state(c->pipe, >fb_state);
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index 8819176..aa843c3 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -44,6 +44,8 @@ struct pipe_context;
  */
 
 #define VL_COMPOSITOR_MAX_LAYERS 16
+#define VL_COMPOSITOR_MIN_DIRTY (0)
+#define VL_COMPOSITOR_MAX_DIRTY (1 << 15)
 
 /* deinterlace allgorithem */
 enum vl_compositor_deinterlace
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v2 4/7] gallium/auxiliary/vl: Add compute shader to support video compositor render

2019-02-06 Thread Zhu, James
Add compute shader to support video compositor render.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/Makefile.sources  |   2 +
 src/gallium/auxiliary/meson.build   |   2 +
 src/gallium/auxiliary/vl/vl_compositor.h|   1 +
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 408 
 src/gallium/auxiliary/vl/vl_compositor_cs.h |  56 
 5 files changed, 469 insertions(+)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.h

diff --git a/src/gallium/auxiliary/Makefile.sources 
b/src/gallium/auxiliary/Makefile.sources
index a40917b..02cc5df 100644
--- a/src/gallium/auxiliary/Makefile.sources
+++ b/src/gallium/auxiliary/Makefile.sources
@@ -350,6 +350,8 @@ VL_SOURCES := \
vl/vl_compositor.h \
vl/vl_compositor_gfx.c \
vl/vl_compositor_gfx.h \
+   vl/vl_compositor_cs.c \
+   vl/vl_compositor_cs.h \
vl/vl_csc.c \
vl/vl_csc.h \
vl/vl_decoder.c \
diff --git a/src/gallium/auxiliary/meson.build 
b/src/gallium/auxiliary/meson.build
index 97063b4..6e5109e 100644
--- a/src/gallium/auxiliary/meson.build
+++ b/src/gallium/auxiliary/meson.build
@@ -447,6 +447,8 @@ files_libgalliumvl = files(
   'vl/vl_compositor.h',
   'vl/vl_compositor_gfx.c',
   'vl/vl_compositor_gfx.h',
+  'vl/vl_compositor_cs.c',
+  'vl/vl_compositor_cs.h',
   'vl/vl_csc.c',
   'vl/vl_csc.h',
   'vl/vl_decoder.c',
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index aa843c3..e6549f0 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -72,6 +72,7 @@ struct vl_compositor_layer
struct pipe_viewport_state viewport;
 
void *fs;
+   void *cs;
void *samplers[3];
void *blend;
 
diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
new file mode 100644
index 000..4e8fd2a
--- /dev/null
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -0,0 +1,408 @@
+/**
+ *
+ * Copyright 2019 Advanced Micro Devices, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: James Zhu 
+ *
+ **/
+
+#include 
+
+#include "tgsi/tgsi_text.h"
+#include "vl_compositor_cs.h"
+
+struct cs_viewport {
+   float scale_x;
+   float scale_y;
+   struct u_rect area;
+   int translate_x;
+   int translate_y;
+};
+
+char *compute_shader_video_buffer =
+  "COMP\n"
+  "PROPERTY CS_FIXED_BLOCK_WIDTH 8\n"
+  "PROPERTY CS_FIXED_BLOCK_HEIGHT 8\n"
+  "PROPERTY CS_FIXED_BLOCK_DEPTH 1\n"
+
+  "DCL SV[0], THREAD_ID\n"
+  "DCL SV[1], BLOCK_ID\n"
+
+  "DCL CONST[0..5]\n"
+  "DCL SVIEW[0..2], RECT, FLOAT\n"
+  "DCL SAMP[0..2]\n"
+
+  "DCL IMAGE[0], 2D, WR\n"
+  "DCL TEMP[0..7]\n"
+
+  "IMM[0] UINT32 { 8, 8, 1, 0}\n"
+  "IMM[1] FLT32 { 1.0, 2.0, 0.0, 0.0}\n"
+
+  "UMAD TEMP[0], SV[1], IMM[0], SV[0]\n"
+
+  /* Drawn area check */
+  "USGE TEMP[1].xy, TEMP[0].xyxy, CONST[4].xyxy\n"
+  "USLT TEMP[1].zw, TEMP[0].xyxy, CONST[4].zwzw\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+
+  "UIF TEMP[1]\n"
+ /* Translate */
+ "UADD TEMP[2].xy, TEMP[0], -CONST[5].xyxy\n"
+ "U2F TEMP[2], TEMP[2]\n"
+ "DIV TEMP[3], TEMP[2], IMM[1].\n"
+
+ /* Scale */
+ "DIV TEMP[2], TEMP[2], CONST[3].zwzw\n"
+ "DIV TEMP[3], TEMP[3], CONST[3].zwzw\n"
+
+ /* Fetch texels */
+ "TEX_LZ TEMP[4].x, TEMP[2], SAMP[0], RECT\n"
+ "TEX_LZ TEMP[4].y, TEMP[3], SAMP[1], RECT\n"
+ "TEX_LZ 

[Mesa-dev] [PATCH 1/6] gallium\auxiliary\vl: Move dirty define to header file

2019-02-01 Thread Zhu, James
Move dirty define to header file to share with compute shader.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 3 ---
 src/gallium/auxiliary/vl/vl_compositor.h | 2 ++
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 159a295..2c6d585 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -42,9 +42,6 @@
 #include "vl_types.h"
 #include "vl_compositor.h"
 
-#define MIN_DIRTY (0)
-#define MAX_DIRTY (1 << 15)
-
 enum VS_OUTPUT
 {
VS_O_VPOS = 0,
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index 8819176..d51b5f5 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -44,6 +44,8 @@ struct pipe_context;
  */
 
 #define VL_COMPOSITOR_MAX_LAYERS 16
+#define MIN_DIRTY (0)
+#define MAX_DIRTY (1 << 15)
 
 /* deinterlace allgorithem */
 enum vl_compositor_deinterlace
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 0/6] Add compute shader support on video compositor render

2019-02-01 Thread Zhu, James
Initially add compute shader support on video compositor render process.
These patches include only normal video buffer, weave and video sub-pictures
compute shader for video compositor render. export CS_COMPOSITOR_RENDER=true
to enable compuet shader video compositor render.

James Zhu (6):
  gallium\auxiliary\vl: Move dirty define to header file
  gallium\auxiliary\vl: Increase csc_matrix size
  gallium\auxiliary\vl: Add compute shader to support video compositor
render
  gallium\auxiliary\vl: Add compute shader initilization, assign and
cleanup
  gallium\auxiliary\vl: Add debug option CS_COMPOSITOR_RENDER
  gallium\auxiliary\vl: Add video compute shader render

 src/gallium/auxiliary/Makefile.sources  |   2 +
 src/gallium/auxiliary/meson.build   |   2 +
 src/gallium/auxiliary/vl/vl_compositor.c|  59 +++-
 src/gallium/auxiliary/vl/vl_compositor.h|   6 +
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 414 
 src/gallium/auxiliary/vl/vl_compositor_cs.h |  56 
 6 files changed, 532 insertions(+), 7 deletions(-)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.h

-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/6] gallium\auxiliary\vl: Increase csc_matrix size

2019-02-01 Thread Zhu, James
Increase csc_matrix size to store more constants for compute shader.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 2c6d585..6ab4a60 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -1440,7 +1440,7 @@ vl_compositor_init_state(struct vl_compositor_state *s, 
struct pipe_context *pip
   pipe->screen,
   PIPE_BIND_CONSTANT_BUFFER,
   PIPE_USAGE_DEFAULT,
-  sizeof(csc_matrix) + 2*sizeof(float)
+  sizeof(csc_matrix) + 4*sizeof(float) + 6*sizeof(int)
);
 
if (!s->csc_matrix)
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 4/6] gallium\auxiliary\vl: Add compute shader initilization, assign and cleanup

2019-02-01 Thread Zhu, James
Add compute shader initilization, assign and cleanup in vl_compositor API.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 30 +-
 src/gallium/auxiliary/vl/vl_compositor.h |  4 
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 6ab4a60..85fbab4 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -41,6 +41,7 @@
 #include "vl_csc.h"
 #include "vl_types.h"
 #include "vl_compositor.h"
+#include "vl_compositor_cs.h"
 
 enum VS_OUTPUT
 {
@@ -472,6 +473,24 @@ init_shaders(struct vl_compositor *c)
 {
assert(c);
 
+   c->cs_video_buffer = vl_compositor_cs_create_shader(c, 
compute_shader_video_buffer);
+   if (!c->cs_video_buffer) {
+  debug_printf("Unable to create video_buffer compute shader.\n");
+  return false;
+   }
+
+   c->cs_weave_rgb = vl_compositor_cs_create_shader(c, compute_shader_weave);
+   if (!c->cs_weave_rgb) {
+  debug_printf("Unable to create weave_rgb compute shader.\n");
+  return false;
+   }
+
+   c->cs_sub_pic = vl_compositor_cs_create_shader(c, compute_shader_sub_pic);
+   if (!c->cs_sub_pic) {
+  debug_printf("Unable to create sub-pictures compute shader.\n");
+  return false;
+   }
+
c->vs = create_vert_shader(c);
if (!c->vs) {
   debug_printf("Unable to create vertex shader.\n");
@@ -544,6 +563,9 @@ static void cleanup_shaders(struct vl_compositor *c)
c->pipe->delete_fs_state(c->pipe, c->fs_rgba);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.y);
c->pipe->delete_fs_state(c->pipe, c->fs_rgb_yuv.uv);
+   c->pipe->delete_compute_state(c->pipe, c->cs_video_buffer);
+   c->pipe->delete_compute_state(c->pipe, c->cs_weave_rgb);
+   c->pipe->delete_compute_state(c->pipe, c->cs_sub_pic);
 }
 
 static bool
@@ -1062,6 +1084,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
   s->layers[i].clearing = i ? false : true;
   s->layers[i].blend = NULL;
   s->layers[i].fs = NULL;
+  s->layers[i].cs = NULL;
   s->layers[i].viewport.scale[2] = 1;
   s->layers[i].viewport.translate[2] = 0;
   s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
@@ -1186,6 +1209,7 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
   switch(deinterlace) {
   case VL_COMPOSITOR_WEAVE:
  s->layers[layer].fs = c->fs_weave_rgb;
+ s->layers[layer].cs = c->cs_weave_rgb;
  break;
 
   case VL_COMPOSITOR_BOB_TOP:
@@ -1193,6 +1217,7 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state 
*s,
  s->layers[layer].src.tl.y += half_a_line;
  s->layers[layer].src.br.y += half_a_line;
  s->layers[layer].fs = c->fs_video_buffer;
+ s->layers[layer].cs = c->cs_video_buffer;
  break;
 
   case VL_COMPOSITOR_BOB_BOTTOM:
@@ -1200,11 +1225,14 @@ vl_compositor_set_buffer_layer(struct 
vl_compositor_state *s,
  s->layers[layer].src.tl.y -= half_a_line;
  s->layers[layer].src.br.y -= half_a_line;
  s->layers[layer].fs = c->fs_video_buffer;
+ s->layers[layer].cs = c->cs_video_buffer;
  break;
   }
 
-   } else
+   } else {
   s->layers[layer].fs = c->fs_video_buffer;
+  s->layers[layer].cs = c->cs_video_buffer;
+   }
 }
 
 void
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index d51b5f5..2fe70f3 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -72,6 +72,7 @@ struct vl_compositor_layer
struct pipe_viewport_state viewport;
 
void *fs;
+   void *cs;
void *samplers[3];
void *blend;
 
@@ -116,6 +117,9 @@ struct vl_compositor
void *fs_video_buffer;
void *fs_weave_rgb;
void *fs_rgba;
+   void *cs_video_buffer;
+   void *cs_weave_rgb;
+   void *cs_sub_pic;
 
struct {
   struct {
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 3/6] gallium\auxiliary\vl: Add compute shader to support video compositor render

2019-02-01 Thread Zhu, James
Add compute shader to support video compositor render.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/Makefile.sources  |   2 +
 src/gallium/auxiliary/meson.build   |   2 +
 src/gallium/auxiliary/vl/vl_compositor_cs.c | 414 
 src/gallium/auxiliary/vl/vl_compositor_cs.h |  56 
 4 files changed, 474 insertions(+)
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.c
 create mode 100644 src/gallium/auxiliary/vl/vl_compositor_cs.h

diff --git a/src/gallium/auxiliary/Makefile.sources 
b/src/gallium/auxiliary/Makefile.sources
index 50e8808..df000f6 100644
--- a/src/gallium/auxiliary/Makefile.sources
+++ b/src/gallium/auxiliary/Makefile.sources
@@ -348,6 +348,8 @@ VL_SOURCES := \
vl/vl_bicubic_filter.h \
vl/vl_compositor.c \
vl/vl_compositor.h \
+   vl/vl_compositor_cs.c \
+   vl/vl_compositor_cs.h \
vl/vl_csc.c \
vl/vl_csc.h \
vl/vl_decoder.c \
diff --git a/src/gallium/auxiliary/meson.build 
b/src/gallium/auxiliary/meson.build
index 57f7e69..74e4b48 100644
--- a/src/gallium/auxiliary/meson.build
+++ b/src/gallium/auxiliary/meson.build
@@ -445,6 +445,8 @@ files_libgalliumvl = files(
   'vl/vl_bicubic_filter.h',
   'vl/vl_compositor.c',
   'vl/vl_compositor.h',
+  'vl/vl_compositor_cs.c',
+  'vl/vl_compositor_cs.h',
   'vl/vl_csc.c',
   'vl/vl_csc.h',
   'vl/vl_decoder.c',
diff --git a/src/gallium/auxiliary/vl/vl_compositor_cs.c 
b/src/gallium/auxiliary/vl/vl_compositor_cs.c
new file mode 100644
index 000..3cd1a76
--- /dev/null
+++ b/src/gallium/auxiliary/vl/vl_compositor_cs.c
@@ -0,0 +1,414 @@
+/**
+ *
+ * Copyright 2019 Advanced Micro Devices, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: James Zhu 
+ *
+ **/
+
+#include 
+
+#include "tgsi/tgsi_text.h"
+#include "vl_compositor_cs.h"
+
+struct cs_viewport {
+   float scale_x;
+   float scale_y;
+   int translate_x;
+   int translate_y;
+   struct u_rect area;
+};
+
+char *compute_shader_video_buffer =
+  "COMP\n"
+  "PROPERTY CS_FIXED_BLOCK_WIDTH 8\n"
+  "PROPERTY CS_FIXED_BLOCK_HEIGHT 8\n"
+  "PROPERTY CS_FIXED_BLOCK_DEPTH 1\n"
+
+  "DCL SV[0], THREAD_ID\n"
+  "DCL SV[1], BLOCK_ID\n"
+
+  "DCL CONST[0..5]\n"
+  "DCL SVIEW[0..2], RECT, FLOAT\n"
+  "DCL SAMP[0..2]\n"
+
+  "DCL IMAGE[0], 2D, WR\n"
+  "DCL TEMP[0..7]\n"
+
+  "IMM[0] UINT32 { 8, 8, 1, 0}\n"
+  "IMM[1] FLT32 { 1.0, 2.0, 0.0, 0.0}\n"
+
+  "UMAD TEMP[0], SV[1], IMM[0], SV[0]\n"
+
+  /* Drawn area check */
+  "USGE TEMP[1].xy, TEMP[0].xyxy, CONST[4].xyxy\n"
+  "USLT TEMP[1].zw, TEMP[0].xyxy, CONST[4].zwzw\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+  "AND TEMP[1].x, TEMP[1]., TEMP[1].\n"
+
+  "UIF TEMP[1]\n"
+ /* Translate */
+ "UADD TEMP[2].xy, TEMP[0], -CONST[5].xyxy\n"
+ "U2F TEMP[2], TEMP[2]\n"
+ "DIV TEMP[3], TEMP[2], IMM[1].\n"
+
+ /* Scale */
+ "DIV TEMP[2], TEMP[2], CONST[3].zwzw\n"
+ "DIV TEMP[3], TEMP[3], CONST[3].zwzw\n"
+
+ /* Fetch texels */
+ "TEX_LZ TEMP[4].x, TEMP[2], SAMP[0], RECT\n"
+ "TEX_LZ TEMP[4].y, TEMP[3], SAMP[1], RECT\n"
+ "TEX_LZ TEMP[4].z, TEMP[3], SAMP[2], RECT\n"
+
+ "MOV TEMP[4].w, IMM[1].\n"
+
+ /* Color Space Conversion */
+ "DP4 TEMP[7].x, CONST[0], TEMP[4]\n"
+ "DP4 TEMP[7].y, CONST[1], TEMP[4]\n"
+ "DP4 TEMP[7].z, CONST[2], TEMP[4]\n"
+
+ "MOV TEMP[5].w, TEMP[4].\n"
+ "SLE TEMP[6].w, TEMP[5], CONST[3].\n"
+ "SGT TEMP[5].w, TEMP[5], CONST[3].\n"
+
+ "MAX TEMP[7].w, TEMP[5], 

[Mesa-dev] [PATCH 6/6] gallium\auxiliary\vl: Add video compute shader render

2019-02-01 Thread Zhu, James
Add video compute shader render. export CS_COMPOSITOR_RENDER=true
to enable video compute shader render.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 19 +--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 7ee8402..66a8fc9 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -1376,8 +1376,8 @@ vl_compositor_convert_rgb_to_yuv(struct 
vl_compositor_state *s,
s->pipe->flush(s->pipe, NULL, 0);
 }
 
-void
-vl_compositor_render(struct vl_compositor_state *s,
+static void
+vl_compositor_gfx_render(struct vl_compositor_state *s,
  struct vl_compositor   *c,
  struct pipe_surface*dst_surface,
  struct u_rect  *dirty_area,
@@ -1419,6 +1419,21 @@ vl_compositor_render(struct vl_compositor_state *s,
draw_layers(c, s, dirty_area);
 }
 
+void
+vl_compositor_render(struct vl_compositor_state *s,
+ struct vl_compositor   *c,
+ struct pipe_surface*dst_surface,
+ struct u_rect  *dirty_area,
+ boolclear_dirty)
+{
+   assert(s);
+
+   if (cs_compositor_render_enable && s->layers->cs)
+  vl_compositor_cs_render(s, c, dst_surface, dirty_area, clear_dirty);
+   else
+  vl_compositor_gfx_render(s, c, dst_surface, dirty_area, clear_dirty);
+}
+
 bool
 vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe)
 {
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 5/6] gallium\auxiliary\vl: Add debug option CS_COMPOSITOR_RENDER

2019-02-01 Thread Zhu, James
Add debug option CS_COMPOSITOR_RENDER to enable/diable video
compositor compute shader render through system environment
variable.

Signed-off-by: James Zhu 
---
 src/gallium/auxiliary/vl/vl_compositor.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 85fbab4..7ee8402 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -52,6 +52,8 @@ enum VS_OUTPUT
VS_O_VBOTTOM,
 };
 
+static bool cs_compositor_render_enable = FALSE;
+
 static void *
 create_vert_shader(struct vl_compositor *c)
 {
@@ -1422,6 +1424,9 @@ vl_compositor_init(struct vl_compositor *c, struct 
pipe_context *pipe)
 {
assert(c);
 
+   if (debug_get_bool_option("CS_COMPOSITOR_RENDER", false))
+  cs_compositor_render_enable = true;
+
memset(c, 0, sizeof(*c));
 
c->pipe = pipe;
-- 
2.7.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2 0/8] The 2nd version for UVD HEVC encode

2018-02-12 Thread Zhu, James


On 2018-02-10 11:06 AM, Mark Thompson wrote:

On 08/02/18 23:05, Mark Thompson wrote:


On 08/02/18 22:37, Alex Deucher wrote:


On Thu, Feb 8, 2018 at 5:28 PM, Mark Thompson 
 wrote:


On 06/02/18 20:05, James Zhu wrote:


The whole series are the updated version. Changes are made mainly based
on the comments from prevous code review from Alex, Leo and Boyuan

James Zhu (8):
  amd/common:add uvd hevc enc support check in hw query
  winsys/amdgpu:add uvd hevc enc support in amdgpu cs
  radeon/uvd:add uvd hevc enc hw interface header
  radeon/uvd:add uvd hevc enc hw ib implementation
  radeon/uvd:add uvd hevc enc functions
  radeon/uvd:add uvd hevc enc files in Makefile list
  radeonsi:create uvd hevc enc entry
  radeonsi: enable uvd encode for HEVC main

 src/amd/common/ac_gpu_info.c|   10 +-
 src/amd/common/ac_gpu_info.h|1 +
 src/gallium/drivers/radeon/Makefile.sources |3 +
 src/gallium/drivers/radeon/radeon_uvd_enc.c |  370 
 src/gallium/drivers/radeon/radeon_uvd_enc.h |  471 ++
 src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c | 1115 +++
 src/gallium/drivers/radeonsi/si_get.c   |4 +-
 src/gallium/drivers/radeonsi/si_uvd.c   |   15 +-
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.c   |6 +
 9 files changed, 1990 insertions(+), 5 deletions(-)
 create mode 100644 src/gallium/drivers/radeon/radeon_uvd_enc.c
 create mode 100644 src/gallium/drivers/radeon/radeon_uvd_enc.h
 create mode 100644 src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c



Can you explain what the requirements are for using this (hardware, firmware, 
software)?

>From what I can find it should be on Polaris and Vega, but I haven't succeeded 
>in getting it working on Polaris.


Yes, polaris and vega10.  For polaris, you'll need a kernel that
enables the uvd enc rings.  Patches went upstream last year, 4.14 I
think?  4.15 is a good bet.


Ah, that's where I'm going wrong - despite the dates it's not actually in 4.14, 
so I need 4.15.



 As for the polaris firmware, you'll need
version FW_1_130_16 or newer:
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=2a713be25a44bd6cec90d8affc54b246a2ca9c7b


Right, I have the encoder working with 4.15.2 on an RX 460 / Polaris 11 with 
firmware 1.130_16.

There seems to be some issue with using both encode and playback at the same 
time?  It hangs the amdgpu driver and all userspaces processes interacting with 
it become stuck and unkillable, requiring a reboot to recover.  It's completely 
repeatable, and only needs a few seconds to die when both mpv (playback) and 
ffmpeg (transcode) are running at the same time.

There is no message at all from the stuck driver, but I end up with hung tasks 
like:

[ 1209.317130] INFO: task kworker/u24:0:5 blocked for more than 120 seconds.
[ 1209.317132]   Not tainted 4.15.2 #2
[ 1209.317133] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this 
message.
[ 1209.317133] kworker/u24:0   D0 5  2 0x8000
[ 1209.317137] Workqueue: events_unbound commit_work
[ 1209.317138] Call Trace:
[ 1209.317142]  ? __schedule+0x26b/0x840
[ 1209.317144]  ? __update_load_avg_se.isra.37+0x1b6/0x1c0
[ 1209.317145]  schedule+0x28/0x80
[ 1209.317146]  schedule_timeout+0x1de/0x360
[ 1209.317177]  ? dce110_timing_generator_get_position+0x51/0x60 [amdgpu]
[ 1209.317199]  ? dce110_timing_generator_get_crtc_scanoutpos+0x6b/0xa0 [amdgpu]
[ 1209.317201]  dma_fence_default_wait+0x1f6/0x280
[ 1209.317203]  ? dma_fence_release+0x90/0x90
[ 1209.317204]  dma_fence_wait_timeout+0x33/0xe0
[ 1209.317205]  reservation_object_wait_timeout_rcu+0x198/0x340
[ 1209.317227]  amdgpu_dm_do_flip+0x112/0x350 [amdgpu]
[ 1209.317248]  amdgpu_dm_atomic_commit_tail+0x8a4/0x9a0 [amdgpu]
[ 1209.317250]  ? pick_next_task_fair+0x14f/0x5f0
[ 1209.317251]  commit_tail+0x3a/0x70
[ 1209.317252]  process_one_work+0x17c/0x370
[ 1209.317253]  worker_thread+0x2e/0x370
[ 1209.317255]  ? process_one_work+0x370/0x370
[ 1209.317256]  kthread+0x111/0x130
[ 1209.317257]  ? kthread_create_worker_on_cpu+0x70/0x70
[ 1209.317258]  ret_from_fork+0x1f/0x30
[ 1330.152054] INFO: task kworker/u24:0:5 blocked for more than 120 seconds.
[ 1330.152056]   Not tainted 4.15.2 #2
[ 1330.152056] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this 
message.
[ 1330.152057] kworker/u24:0   D0 5  2 0x8000
[ 1330.152059] Workqueue: events_unbound commit_work
[ 1330.152060] Call Trace:
[ 1330.152063]  ? __schedule+0x26b/0x840
[ 1330.152065]  ? __update_load_avg_se.isra.37+0x1b6/0x1c0
[ 1330.152066]  schedule+0x28/0x80
[ 1330.152067]  schedule_timeout+0x1de/0x360
[ 1330.152108]  ? dce110_timing_generator_get_position+0x51/0x60 [amdgpu]
[ 1330.152130]  ? dce110_timing_generator_get_crtc_scanoutpos+0x6b/0xa0 [amdgpu]
[ 1330.152132]  dma_fence_default_wait+0x1f6/0x280
[