gallium/vl: use compute preference for all multimedia, not just blit
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 17 Aug 2019 16:13:34 +0000 (12:13 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 21 Aug 2019 03:51:39 +0000 (23:51 -0400)
The compute paths in vl are a bit AMD-specific. For example, they (on
nouveau), try to use a BGRX8 image format, which is not supported.
Fixing all this is probably possible, but since the compute paths aren't
in any way better, it's difficult to care.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111213
Fixes: 9364d66cb7 (gallium/auxiliary/vl: Add video compositor compute shader render)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/auxiliary/util/u_screen.c
src/gallium/auxiliary/vl/vl_compositor.c
src/gallium/docs/source/screen.rst
src/gallium/drivers/radeonsi/si_get.c
src/gallium/include/pipe/p_defines.h
src/gallium/state_trackers/va/postproc.c

index 0b4bb067d6d6052688691ede5443941d81e2f698..88f4945e75526318209801251d901016160fa85a 100644 (file)
@@ -331,7 +331,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
    case PIPE_CAP_TGSI_ATOMFADD:
    case PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS:
    case PIPE_CAP_IMAGE_LOAD_FORMATTED:
-   case PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA:
+   case PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA:
    case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK:
    case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED:
    case PIPE_CAP_ATOMIC_FLOAT_MINMAX:
index 04808e80d84e525022971d786ff487b1ab204c08..a381af108b3d00880d1d0ebb8a0a765c69ba7d55 100644 (file)
@@ -764,7 +764,7 @@ vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe)
 
    memset(c, 0, sizeof(*c));
 
-   c->pipe_cs_composit_supported = pipe->screen->get_param(pipe->screen, PIPE_CAP_COMPUTE) &&
+   c->pipe_cs_composit_supported = pipe->screen->get_param(pipe->screen, PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA) &&
             pipe->screen->get_param(pipe->screen, PIPE_CAP_TGSI_TEX_TXF_LZ) &&
             pipe->screen->get_param(pipe->screen, PIPE_CAP_TGSI_DIV);
 
index c033321ec6670d3ce5ee2e9e8a1bfbbbcd9f014b..d149a2f4c9f7184ffad73d55600a60527fc7d112 100644 (file)
@@ -528,8 +528,8 @@ The integer capabilities:
   execution. 0 = throttling is disabled.
 * ``PIPE_CAP_DMABUF``: Whether Linux DMABUF handles are supported by
   resource_from_handle and resource_get_handle.
-* ``PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA``: Whether VDPAU, VAAPI, and
-  OpenMAX should use a compute-based blit instead of pipe_context::blit.
+* ``PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA``: Whether VDPAU, VAAPI, and
+  OpenMAX should use a compute-based blit instead of pipe_context::blit and compute pipeline for compositing images.
 * ``PIPE_CAP_FRAGMENT_SHADER_INTERLOCK``: True if fragment shader interlock
   functionality is supported.
 * ``PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED``: True if driver handles
index c9895edafb8d262d652bc268f4e5575646e0bc25..f85a53393aab9e7db714e92551236298bd312cd0 100644 (file)
@@ -156,7 +156,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
        case PIPE_CAP_FBFETCH:
        case PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK:
        case PIPE_CAP_IMAGE_LOAD_FORMATTED:
-       case PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA:
+       case PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA:
        case PIPE_CAP_TGSI_DIV:
                return 1;
 
index 0c79cac5cff1d59df73182f945be097b66bab9c1..808c2b8cfaf6b3f6ecf093b11a52621907604cd4 100644 (file)
@@ -885,7 +885,7 @@ enum pipe_cap
    PIPE_CAP_IMAGE_LOAD_FORMATTED,
    PIPE_CAP_MAX_FRAMES_IN_FLIGHT,
    PIPE_CAP_DMABUF,
-   PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA,
+   PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA,
    PIPE_CAP_FRAGMENT_SHADER_INTERLOCK,
    PIPE_CAP_FBFETCH_COHERENT,
    PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED,
index fbc55b7714b6cd73751910118fafc39f52928ccc..3431b1b48c77786b38b6d17a7807d1571afad486 100644 (file)
@@ -222,7 +222,7 @@ static VAStatus vlVaPostProcBlit(vlVaDriver *drv, vlVaContext *context,
       blit.filter = PIPE_TEX_MIPFILTER_LINEAR;
 
       if (drv->pipe->screen->get_param(drv->pipe->screen,
-                                       PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA))
+                                       PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA))
          util_compute_blit(drv->pipe, &blit, &context->blit_cs);
       else
          drv->pipe->blit(drv->pipe, &blit);