st/va: Save surface chroma format in config
authorMark Thompson <sw@jkqxz.net>
Wed, 12 Oct 2016 22:52:30 +0000 (23:52 +0100)
committerChristian König <christian.koenig@amd.com>
Fri, 14 Oct 2016 09:57:40 +0000 (11:57 +0200)
Both YUV420 and RGB32 configurations are supported, so we need to be
able to distinguish which is being used.

Reviewed-by: Christian König <christian.koenig@amd.com>
src/gallium/state_trackers/va/config.c
src/gallium/state_trackers/va/va_private.h

index 72f68baf3dfaf37d3f67cdd6482a60b327cbd6f4..2f96eb6cedf65751deb5f36e46a9b6195b81d0bc 100644 (file)
@@ -185,6 +185,16 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin
    if (profile == VAProfileNone && entrypoint == VAEntrypointVideoProc) {
       config->entrypoint = VAEntrypointVideoProc;
       config->profile = PIPE_VIDEO_PROFILE_UNKNOWN;
+      for (int i = 0; i < num_attribs; i++) {
+         if (attrib_list[i].type == VAConfigAttribRTFormat) {
+            if (attrib_list[i].value & (VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_RGB32)) {
+               config->rt_format = attrib_list[i].value;
+            } else {
+               FREE(config);
+               return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
+            }
+         }
+      }
       pipe_mutex_lock(drv->mutex);
       *config_id = handle_table_add(drv->htab, config);
       pipe_mutex_unlock(drv->mutex);
@@ -236,6 +246,14 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin
          else
             config->rc = PIPE_H264_ENC_RATE_CONTROL_METHOD_DISABLE;
       }
+      if (attrib_list[i].type == VAConfigAttribRTFormat) {
+         if (attrib_list[i].value == VA_RT_FORMAT_YUV420) {
+            config->rt_format = attrib_list[i].value;
+         } else {
+            FREE(config);
+            return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
+         }
+      }
    }
 
    pipe_mutex_lock(drv->mutex);
@@ -306,7 +324,7 @@ vlVaQueryConfigAttributes(VADriverContextP ctx, VAConfigID config_id, VAProfile
 
    *num_attribs = 1;
    attrib_list[0].type = VAConfigAttribRTFormat;
-   attrib_list[0].value = VA_RT_FORMAT_YUV420;
+   attrib_list[0].value = config->rt_format;
 
    return VA_STATUS_SUCCESS;
 }
index e9ccdbf7263147cbb992c4682d716986671b27e2..7562e14a7e114d59bcf6372f8d097a8eeea31dbe 100644 (file)
@@ -250,6 +250,7 @@ typedef struct {
    enum pipe_video_profile profile;
    enum pipe_video_entrypoint entrypoint;
    enum pipe_h264_enc_rate_control_method rc;
+   unsigned int rt_format;
 } vlVaConfig;
 
 typedef struct {