[Mesa-dev] [PATCH 1/2] Revert "st/va: Implement vaExportSurfaceHandle()"

Leo Liu leo.liu at amd.com
Sun Oct 15 19:06:14 UTC 2017



On 2017-10-15 07:23 AM, Mark Thompson wrote:
> This reverts commit c4ed39f85b1ebd062eaa51880fcc79cfbcb4e5c3.

Can we just leave the code there, and gated by "#if 0" for now? so it 
would be easier for testing purpose.

Thanks,
Leo


> ---
> Apparently the feature set of libva 2.0 was finalised inside Intel several weeks ago without communicating it externally, and this was not included.  Therefore revert support for it here.  This should be applied before the Mesa 17.3 branchpoint.
>
> It is now scheduled to appear in libva 2.1 - given previous release cadence, this will probably be in around 6-12 months time.  I will continue to use it locally, and 2/2 here is a suitable testing patch if anyone else wants to, but it shouldn't be reapplied until closer to the time in case of further difficulties.
>
> Apologies for the trouble with this,
>
> - Mark
>
>
>   src/gallium/state_trackers/va/context.c    |   5 +-
>   src/gallium/state_trackers/va/surface.c    | 148 -----------------------------
>   src/gallium/state_trackers/va/va_private.h |   1 -
>   3 files changed, 1 insertion(+), 153 deletions(-)
>
> diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c
> index 1207499a78..f2cb37aa22 100644
> --- a/src/gallium/state_trackers/va/context.c
> +++ b/src/gallium/state_trackers/va/context.c
> @@ -88,10 +88,7 @@ static struct VADriverVTable vtable =
>      &vlVaCreateSurfaces2,
>      &vlVaQuerySurfaceAttributes,
>      &vlVaAcquireBufferHandle,
> -   &vlVaReleaseBufferHandle,
> -#if VA_CHECK_VERSION(1, 0, 0)
> -   &vlVaExportSurfaceHandle,
> -#endif
> +   &vlVaReleaseBufferHandle
>   };
>   
>   static struct VADriverVTableVPP vtable_vpp =
> diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c
> index 76e562717a..4c2f4b5452 100644
> --- a/src/gallium/state_trackers/va/surface.c
> +++ b/src/gallium/state_trackers/va/surface.c
> @@ -44,7 +44,6 @@
>   #include "va_private.h"
>   
>   #include <va/va_drmcommon.h>
> -#include <drm-uapi/drm_fourcc.h>
>   
>   static const enum pipe_format vpp_surface_formats[] = {
>      PIPE_FORMAT_B8G8R8A8_UNORM, PIPE_FORMAT_R8G8B8A8_UNORM,
> @@ -902,150 +901,3 @@ vlVaQueryVideoProcPipelineCaps(VADriverContextP ctx, VAContextID context,
>   
>      return VA_STATUS_SUCCESS;
>   }
> -
> -#if VA_CHECK_VERSION(1, 0, 0)
> -VAStatus
> -vlVaExportSurfaceHandle(VADriverContextP ctx,
> -                        VASurfaceID surface_id,
> -                        uint32_t mem_type,
> -                        uint32_t flags,
> -                        void *descriptor)
> -{
> -   vlVaDriver *drv;
> -   vlVaSurface *surf;
> -   struct pipe_surface **surfaces;
> -   struct pipe_screen *screen;
> -   VAStatus ret;
> -   unsigned int usage;
> -   int i, p;
> -
> -   VADRMPRIMESurfaceDescriptor *desc = descriptor;
> -
> -   if (mem_type != VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2)
> -      return VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE;
> -   if (flags & VA_EXPORT_SURFACE_COMPOSED_LAYERS)
> -      return VA_STATUS_ERROR_INVALID_SURFACE;
> -
> -   drv    = VL_VA_DRIVER(ctx);
> -   screen = VL_VA_PSCREEN(ctx);
> -   mtx_lock(&drv->mutex);
> -
> -   surf = handle_table_get(drv->htab, surface_id);
> -   if (!surf || !surf->buffer) {
> -      mtx_unlock(&drv->mutex);
> -      return VA_STATUS_ERROR_INVALID_SURFACE;
> -   }
> -
> -   if (surf->buffer->interlaced) {
> -      struct pipe_video_buffer *interlaced = surf->buffer;
> -      struct u_rect src_rect, dst_rect;
> -
> -      surf->templat.interlaced = false;
> -
> -      ret = vlVaHandleSurfaceAllocate(drv, surf, &surf->templat);
> -      if (ret != VA_STATUS_SUCCESS) {
> -         mtx_unlock(&drv->mutex);
> -         return VA_STATUS_ERROR_ALLOCATION_FAILED;
> -      }
> -
> -      src_rect.x0 = dst_rect.x0 = 0;
> -      src_rect.y0 = dst_rect.y0 = 0;
> -      src_rect.x1 = dst_rect.x1 = surf->templat.width;
> -      src_rect.y1 = dst_rect.y1 = surf->templat.height;
> -
> -      vl_compositor_yuv_deint_full(&drv->cstate, &drv->compositor,
> -                                   interlaced, surf->buffer,
> -                                   &src_rect, &dst_rect,
> -                                   VL_COMPOSITOR_WEAVE);
> -
> -      interlaced->destroy(interlaced);
> -   }
> -
> -   surfaces = surf->buffer->get_surfaces(surf->buffer);
> -
> -   usage = 0;
> -   if (flags & VA_EXPORT_SURFACE_READ_ONLY)
> -      usage |= PIPE_HANDLE_USAGE_READ;
> -   if (flags & VA_EXPORT_SURFACE_WRITE_ONLY)
> -      usage |= PIPE_HANDLE_USAGE_WRITE;
> -
> -   desc->fourcc = PipeFormatToVaFourcc(surf->buffer->buffer_format);
> -   desc->width  = surf->buffer->width;
> -   desc->height = surf->buffer->height;
> -
> -   for (p = 0; p < VL_MAX_SURFACES; p++) {
> -      struct winsys_handle whandle;
> -      struct pipe_resource *resource;
> -      uint32_t drm_format;
> -
> -      if (!surfaces[p])
> -         break;
> -
> -      resource = surfaces[p]->texture;
> -
> -      switch (resource->format) {
> -      case PIPE_FORMAT_R8_UNORM:
> -         drm_format = DRM_FORMAT_R8;
> -         break;
> -      case PIPE_FORMAT_R8G8_UNORM:
> -         drm_format = DRM_FORMAT_GR88;
> -         break;
> -      case PIPE_FORMAT_R16_UNORM:
> -         drm_format = DRM_FORMAT_R16;
> -         break;
> -      case PIPE_FORMAT_R16G16_UNORM:
> -         drm_format = DRM_FORMAT_GR1616;
> -         break;
> -      case PIPE_FORMAT_B8G8R8A8_UNORM:
> -         drm_format = DRM_FORMAT_ARGB8888;
> -         break;
> -      case PIPE_FORMAT_R8G8B8A8_UNORM:
> -         drm_format = DRM_FORMAT_ABGR8888;
> -         break;
> -      case PIPE_FORMAT_B8G8R8X8_UNORM:
> -         drm_format = DRM_FORMAT_XRGB8888;
> -         break;
> -      case PIPE_FORMAT_R8G8B8X8_UNORM:
> -         drm_format = DRM_FORMAT_XBGR8888;
> -         break;
> -      default:
> -         ret = VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE;
> -         goto fail;
> -      }
> -
> -      memset(&whandle, 0, sizeof(whandle));
> -      whandle.type = DRM_API_HANDLE_TYPE_FD;
> -
> -      if (!screen->resource_get_handle(screen, drv->pipe, resource,
> -                                       &whandle, usage)) {
> -         ret = VA_STATUS_ERROR_INVALID_SURFACE;
> -         goto fail;
> -      }
> -
> -      desc->objects[p].fd   = (int)whandle.handle;
> -      desc->objects[p].size = 0;
> -      desc->objects[p].drm_format_modifier = whandle.modifier;
> -
> -      desc->layers[p].drm_format      = drm_format;
> -      desc->layers[p].num_planes      = 1;
> -      desc->layers[p].object_index[0] = p;
> -      desc->layers[p].offset[0]       = whandle.offset;
> -      desc->layers[p].pitch[0]        = whandle.stride;
> -   }
> -
> -   desc->num_objects = p;
> -   desc->num_layers  = p;
> -
> -   mtx_unlock(&drv->mutex);
> -
> -   return VA_STATUS_SUCCESS;
> -
> -fail:
> -   for (i = 0; i < p; i++)
> -      close(desc->objects[i].fd);
> -
> -   mtx_unlock(&drv->mutex);
> -
> -   return ret;
> -}
> -#endif
> diff --git a/src/gallium/state_trackers/va/va_private.h b/src/gallium/state_trackers/va/va_private.h
> index 46f6ba66f2..61712ce913 100644
> --- a/src/gallium/state_trackers/va/va_private.h
> +++ b/src/gallium/state_trackers/va/va_private.h
> @@ -394,7 +394,6 @@ VAStatus vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config, VAS
>   
>   VAStatus vlVaAcquireBufferHandle(VADriverContextP ctx, VABufferID buf_id, VABufferInfo *out_buf_info);
>   VAStatus vlVaReleaseBufferHandle(VADriverContextP ctx, VABufferID buf_id);
> -VAStatus vlVaExportSurfaceHandle(VADriverContextP ctx, VASurfaceID surface_id, uint32_t mem_type, uint32_t flags, void *descriptor);
>   
>   VAStatus vlVaQueryVideoProcFilters(VADriverContextP ctx, VAContextID context, VAProcFilterType *filters,
>                                      unsigned int *num_filters);



More information about the mesa-dev mailing list