+static inline VdpDecoderProfile
+PipeToProfile(enum pipe_video_profile p_profile)
+{
+ switch (p_profile) {
+ case PIPE_VIDEO_PROFILE_MPEG1:
+ return VDP_DECODER_PROFILE_MPEG1;
+ case PIPE_VIDEO_PROFILE_MPEG2_SIMPLE:
+ return VDP_DECODER_PROFILE_MPEG2_SIMPLE;
+ case PIPE_VIDEO_PROFILE_MPEG2_MAIN:
+ return VDP_DECODER_PROFILE_MPEG2_MAIN;
+ case PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE:
+ return VDP_DECODER_PROFILE_H264_BASELINE;
+ case PIPE_VIDEO_PROFILE_MPEG4_AVC_CONSTRAINED_BASELINE:
+ return VDP_DECODER_PROFILE_H264_CONSTRAINED_BASELINE;
+ case PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN:
+ return VDP_DECODER_PROFILE_H264_MAIN;
+ case PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH:
+ return VDP_DECODER_PROFILE_H264_HIGH;
+ case PIPE_VIDEO_PROFILE_MPEG4_SIMPLE:
+ return VDP_DECODER_PROFILE_MPEG4_PART2_SP;
+ case PIPE_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE:
+ return VDP_DECODER_PROFILE_MPEG4_PART2_ASP;
+ case PIPE_VIDEO_PROFILE_VC1_SIMPLE:
+ return VDP_DECODER_PROFILE_VC1_SIMPLE;
+ case PIPE_VIDEO_PROFILE_VC1_MAIN:
+ return VDP_DECODER_PROFILE_VC1_MAIN;
+ case PIPE_VIDEO_PROFILE_VC1_ADVANCED:
+ return VDP_DECODER_PROFILE_VC1_ADVANCED;
+ case PIPE_VIDEO_PROFILE_HEVC_MAIN:
+ return VDP_DECODER_PROFILE_HEVC_MAIN;
+ case PIPE_VIDEO_PROFILE_HEVC_MAIN_10:
+ return VDP_DECODER_PROFILE_HEVC_MAIN_10;
+ case PIPE_VIDEO_PROFILE_HEVC_MAIN_STILL:
+ return VDP_DECODER_PROFILE_HEVC_MAIN_STILL;
+ case PIPE_VIDEO_PROFILE_HEVC_MAIN_12:
+ return VDP_DECODER_PROFILE_HEVC_MAIN_12;
+ case PIPE_VIDEO_PROFILE_HEVC_MAIN_444:
+ return VDP_DECODER_PROFILE_HEVC_MAIN_444;
+ default:
+ assert(0);
+ return -1;
+ }
+}
+
+static inline struct u_rect *
+RectToPipe(const VdpRect *src, struct u_rect *dst)
+{
+ if (src) {
+ dst->x0 = src->x0;
+ dst->y0 = src->y0;
+ dst->x1 = src->x1;
+ dst->y1 = src->y1;
+ return dst;
+ }
+ return NULL;
+}
+
+static inline struct pipe_box
+RectToPipeBox(const VdpRect *rect, struct pipe_resource *res)
+{
+ struct pipe_box box;
+
+ box.x = 0;
+ box.y = 0;
+ box.z = 0;
+ box.width = res->width0;
+ box.height = res->height0;
+ box.depth = 1;
+
+ if (rect) {
+ box.x = MIN2(rect->x0, rect->x1);
+ box.y = MIN2(rect->y0, rect->y1);
+ box.width = abs(rect->x1 - rect->x0);
+ box.height = abs(rect->y1 - rect->y0);
+ }
+
+ return box;
+}
+
+static inline bool
+CheckSurfaceParams(struct pipe_screen *screen,
+ const struct pipe_resource *templ)
+{
+ return screen->is_format_supported(screen, templ->format, templ->target,
+ templ->nr_samples,
+ templ->nr_storage_samples, templ->bind);
+}
+