[PATCH v2 2/5] wined3d: Disable YUV formats when not supported.

Matteo Bruni mbruni at codeweavers.com
Tue Sep 12 14:22:28 CDT 2017


Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
We want to add YUV fixups support to the CPU blitter at some point but
this should do for the time being.

v2: Disable the formats harder and in the proper place.

 dlls/wined3d/utils.c | 43 ++++++++++++++++++++++++++++++++-----------
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 4c878b6556..0d54334ceb 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -3224,7 +3224,8 @@ static void apply_format_fixups(struct wined3d_adapter *adapter, struct wined3d_
                 0, CHANNEL_SOURCE_X, 0, CHANNEL_SOURCE_W, 0, CHANNEL_SOURCE_ONE, 0, CHANNEL_SOURCE_ONE);
     }
 
-    if (!gl_info->supported[APPLE_YCBCR_422])
+    if (!gl_info->supported[APPLE_YCBCR_422] && gl_info->supported[ARB_FRAGMENT_PROGRAM]
+            && gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
     {
         idx = get_format_idx(WINED3DFMT_YUY2);
         gl_info->formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_YUY2);
@@ -3232,18 +3233,38 @@ static void apply_format_fixups(struct wined3d_adapter *adapter, struct wined3d_
         idx = get_format_idx(WINED3DFMT_UYVY);
         gl_info->formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_UYVY);
     }
+    else if (!gl_info->supported[APPLE_YCBCR_422] && (!gl_info->supported[ARB_FRAGMENT_PROGRAM]
+            || !gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]))
+    {
+        idx = get_format_idx(WINED3DFMT_YUY2);
+        gl_info->formats[idx].glInternal = 0;
+
+        idx = get_format_idx(WINED3DFMT_UYVY);
+        gl_info->formats[idx].glInternal = 0;
+    }
 
-    idx = get_format_idx(WINED3DFMT_YV12);
-    format_set_flag(&gl_info->formats[idx], WINED3DFMT_FLAG_HEIGHT_SCALE);
-    gl_info->formats[idx].height_scale.numerator = 3;
-    gl_info->formats[idx].height_scale.denominator = 2;
-    gl_info->formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_YV12);
+    if (gl_info->supported[ARB_FRAGMENT_PROGRAM] && gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
+    {
+        idx = get_format_idx(WINED3DFMT_YV12);
+        format_set_flag(&gl_info->formats[idx], WINED3DFMT_FLAG_HEIGHT_SCALE);
+        gl_info->formats[idx].height_scale.numerator = 3;
+        gl_info->formats[idx].height_scale.denominator = 2;
+        gl_info->formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_YV12);
 
-    idx = get_format_idx(WINED3DFMT_NV12);
-    format_set_flag(&gl_info->formats[idx], WINED3DFMT_FLAG_HEIGHT_SCALE);
-    gl_info->formats[idx].height_scale.numerator = 3;
-    gl_info->formats[idx].height_scale.denominator = 2;
-    gl_info->formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_NV12);
+        idx = get_format_idx(WINED3DFMT_NV12);
+        format_set_flag(&gl_info->formats[idx], WINED3DFMT_FLAG_HEIGHT_SCALE);
+        gl_info->formats[idx].height_scale.numerator = 3;
+        gl_info->formats[idx].height_scale.denominator = 2;
+        gl_info->formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_NV12);
+    }
+    else
+    {
+        idx = get_format_idx(WINED3DFMT_YV12);
+        gl_info->formats[idx].glInternal = 0;
+
+        idx = get_format_idx(WINED3DFMT_NV12);
+        gl_info->formats[idx].glInternal = 0;
+    }
 
     if (!gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
     {
-- 
2.13.5




More information about the wine-patches mailing list