Index: vdpau-video-0.7.4/src/vdpau_driver_template.h
===================================================================
--- vdpau-video-0.7.4.orig/src/vdpau_driver_template.h
+++ vdpau-video-0.7.4/src/vdpau_driver_template.h
@@ -115,6 +115,13 @@ struct VA_DRIVER_VTABLE {
 		int *num_attribs		/* out */
 	);
 
+	VAStatus (*vaQuerySurfaceAttributes) (
+		VADisplay           dpy,
+		VAConfigID          config_id,
+		VASurfaceAttrib    *attrib_list,   /* out */
+		unsigned int       *num_attribs    /* out */
+	);
+
 	VAStatus (*vaCreateSurfaces) (
 		VADriverContextP ctx,
 		int width,
@@ -589,6 +596,7 @@ static VAStatus FUNC(Initialize)(VA_DRIV
     vtable->vaCreateConfig                  = vdpau_CreateConfig;
     vtable->vaDestroyConfig                 = vdpau_DestroyConfig;
     vtable->vaGetConfigAttributes           = vdpau_GetConfigAttributes;
+    vtable->vaQuerySurfaceAttributes        = vdpau_QuerySurfaceAttributes;
     vtable->vaCreateSurfaces                = vdpau_CreateSurfaces;
     vtable->vaDestroySurfaces               = vdpau_DestroySurfaces;
     vtable->vaCreateContext                 = vdpau_CreateContext;
Index: vdpau-video-0.7.4/src/vdpau_video.c
===================================================================
--- vdpau-video-0.7.4.orig/src/vdpau_video.c
+++ vdpau-video-0.7.4/src/vdpau_video.c
@@ -309,6 +309,54 @@ int surface_remove_association(
     return -1;
 }
 
+// vaQuerySurfaceAttributes
+VAStatus
+vdpau_QuerySurfaceAttributes(
+    VADriverContextP    ctx,
+    VAConfigID          config_id,
+    VASurfaceAttrib    *attrib_list,
+    unsigned int       *num_attribs
+)
+{
+    VDPAU_DRIVER_DATA_INIT;
+
+    object_config_p obj_config;
+    if ((obj_config = VDPAU_CONFIG(config_id)) == NULL)
+        return VA_STATUS_ERROR_INVALID_CONFIG;
+
+    if (!attrib_list && !num_attribs)
+        return VA_STATUS_ERROR_INVALID_PARAMETER;
+
+    if (!attrib_list) {
+        *num_attribs = 2;
+        return VA_STATUS_SUCCESS;
+    }
+
+    if (*num_attribs < 2) {
+        *num_attribs = 2;
+        return VA_STATUS_ERROR_MAX_NUM_EXCEEDED;
+    }
+
+    VdpDecoderProfile vdp_profile;
+    uint32_t max_width, max_height;
+    vdp_profile = get_VdpDecoderProfile(obj_config->profile);
+    if (!get_max_surface_size(driver_data, vdp_profile, &max_width, &max_height))
+        return VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
+
+    if (attrib_list) {
+        attrib_list[0].type = VASurfaceAttribMaxWidth;
+        attrib_list[0].flags = VA_SURFACE_ATTRIB_GETTABLE;
+        attrib_list[0].value.type = VAGenericValueTypeInteger;
+        attrib_list[0].value.value.i = max_width;
+        attrib_list[1].type = VASurfaceAttribMaxHeight;
+        attrib_list[1].flags = VA_SURFACE_ATTRIB_GETTABLE;
+        attrib_list[1].value.type = VAGenericValueTypeInteger;
+        attrib_list[1].value.value.i = max_height;
+    }
+
+    return VA_STATUS_SUCCESS;
+}
+
 // vaDestroySurfaces
 VAStatus
 vdpau_DestroySurfaces(
Index: vdpau-video-0.7.4/src/vdpau_video.h
===================================================================
--- vdpau-video-0.7.4.orig/src/vdpau_video.h
+++ vdpau-video-0.7.4/src/vdpau_video.h
@@ -165,6 +165,15 @@ vdpau_QueryConfigAttributes(
     int                *num_attribs
 ) attribute_hidden;
 
+// vaQuerySurfaceAttributes
+VAStatus
+vdpau_QuerySurfaceAttributes(
+    VADriverContextP    ctx,
+    VAConfigID          config_id,
+    VASurfaceAttrib    *attrib_list,
+    unsigned int       *num_attribs
+) attribute_hidden;
+
 // vaCreateSurfaces
 VAStatus
 vdpau_CreateSurfaces(
