Henri Verbeet : wined3d: Get rid of the current multisampling support.

Alexandre Julliard julliard at winehq.org
Fri Aug 26 10:40:48 CDT 2011


Module: wine
Branch: master
Commit: bd5f9486829bfdcf9a77c7a4ca6e38dd1b2ffb97
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bd5f9486829bfdcf9a77c7a4ca6e38dd1b2ffb97

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Aug 25 21:05:02 2011 +0200

wined3d: Get rid of the current multisampling support.

It doesn't really work, and trying to make multisampling work with onscreen
rendering is probably more trouble than it's worth, both for us and the
driver.

---

 dlls/wined3d/context.c      |   29 ++++------------
 dlls/wined3d/directx.c      |   78 -------------------------------------------
 dlls/wined3d/wined3d_main.c |    2 +-
 3 files changed, 8 insertions(+), 101 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index a5f5861..b1c2f50 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -1066,7 +1066,7 @@ void context_invalidate_state(struct wined3d_context *context, DWORD state)
 /* This function takes care of wined3d pixel format selection. */
 static int context_choose_pixel_format(struct wined3d_device *device, HDC hdc,
         const struct wined3d_format *color_format, const struct wined3d_format *ds_format,
-        BOOL auxBuffers, int numSamples, BOOL findCompatible)
+        BOOL auxBuffers, BOOL findCompatible)
 {
     int iPixelFormat=0;
     unsigned int matchtry;
@@ -1099,9 +1099,9 @@ static int context_choose_pixel_format(struct wined3d_device *device, HDC hdc,
     int i = 0;
     int nCfgs = device->adapter->nCfgs;
 
-    TRACE("ColorFormat=%s, DepthStencilFormat=%s, auxBuffers=%d, numSamples=%d, findCompatible=%d\n",
-          debug_d3dformat(color_format->id), debug_d3dformat(ds_format->id),
-          auxBuffers, numSamples, findCompatible);
+    TRACE("device %p, dc %p, color_format %s, ds_format %s, aux_buffers %#x, find_compatible %#x.\n",
+            device, hdc, debug_d3dformat(color_format->id), debug_d3dformat(ds_format->id),
+            auxBuffers, findCompatible);
 
     if (!getColorBits(color_format, &redBits, &greenBits, &blueBits, &alphaBits, &colorBits))
     {
@@ -1171,7 +1171,7 @@ static int context_choose_pixel_format(struct wined3d_device *device, HDC hdc,
                 continue;
 
             /* Check multisampling support */
-            if(cfg->numSamples != numSamples)
+            if (cfg->numSamples)
                 continue;
 
             /* When we have passed all the checks then we have found a format which matches our
@@ -1236,7 +1236,6 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
     struct wined3d_context *ret;
     PIXELFORMATDESCRIPTOR pfd;
     BOOL auxBuffers = FALSE;
-    int numSamples = 0;
     int pixel_format;
     unsigned int s;
     int swap_interval;
@@ -1287,28 +1286,14 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
     if (color_format->id == WINED3DFMT_P8_UINT)
         color_format = wined3d_get_format(gl_info, WINED3DFMT_B8G8R8A8_UNORM);
 
-    /* D3D only allows multisampling when SwapEffect is set to WINED3DSWAPEFFECT_DISCARD. */
-    if (swapchain->presentParms.MultiSampleType && (swapchain->presentParms.SwapEffect == WINED3DSWAPEFFECT_DISCARD))
-    {
-        if (!gl_info->supported[ARB_MULTISAMPLE])
-            WARN("The application is requesting multisampling without support.\n");
-        else
-        {
-            TRACE("Requesting multisample type %#x.\n", swapchain->presentParms.MultiSampleType);
-            numSamples = swapchain->presentParms.MultiSampleType;
-        }
-    }
-
     /* Try to find a pixel format which matches our requirements. */
-    pixel_format = context_choose_pixel_format(device, hdc, color_format, ds_format,
-            auxBuffers, numSamples, FALSE /* findCompatible */);
+    pixel_format = context_choose_pixel_format(device, hdc, color_format, ds_format, auxBuffers, FALSE);
 
     /* Try to locate a compatible format if we weren't able to find anything. */
     if (!pixel_format)
     {
         TRACE("Trying to locate a compatible pixel format because an exact match failed.\n");
-        pixel_format = context_choose_pixel_format(device, hdc, color_format, ds_format,
-                auxBuffers, 0 /* numSamples */, TRUE /* findCompatible */);
+        pixel_format = context_choose_pixel_format(device, hdc, color_format, ds_format, auxBuffers, TRUE);
     }
 
     /* If we still don't have a pixel format, something is very wrong as ChoosePixelFormat barely fails */
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index a43dc9f..5887000 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3127,9 +3127,6 @@ HRESULT CDECL wined3d_check_device_multisample_type(const struct wined3d *wined3
         WINED3DDEVTYPE device_type, enum wined3d_format_id surface_format_id, BOOL windowed,
         WINED3DMULTISAMPLE_TYPE multisample_type, DWORD *quality_levels)
 {
-    const struct wined3d_adapter *adapter;
-    const struct wined3d_format *format;
-
     TRACE_(d3d_caps)("wined3d %p, adapter_idx %u, device_type %s, surface_format %s,\n"
             "windowed %#x, multisample_type %#x, quality_levels %p.\n",
             wined3d, adapter_idx, debug_d3ddevicetype(device_type), debug_d3dformat(surface_format_id),
@@ -3138,87 +3135,12 @@ HRESULT CDECL wined3d_check_device_multisample_type(const struct wined3d *wined3
     if (adapter_idx >= wined3d->adapter_count)
         return WINED3DERR_INVALIDCALL;
 
-    /* TODO: Handle windowed, add more quality levels. */
-
     if (WINED3DMULTISAMPLE_NONE == multisample_type)
     {
         if (quality_levels) *quality_levels = 1;
         return WINED3D_OK;
     }
 
-    /* By default multisampling is disabled right now as it causes issues
-     * on some Nvidia driver versions and it doesn't work well in combination
-     * with FBOs yet. */
-    if (!wined3d_settings.allow_multisampling)
-        return WINED3DERR_NOTAVAILABLE;
-
-    adapter = &wined3d->adapters[adapter_idx];
-    format = wined3d_get_format(&adapter->gl_info, surface_format_id);
-    if (!format) return WINED3DERR_INVALIDCALL;
-
-    if (format->flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))
-    {
-        const struct wined3d_pixel_format *cfgs;
-        unsigned int i, cfg_count;
-
-        cfgs = adapter->cfgs;
-        cfg_count = adapter->nCfgs;
-        for (i = 0; i < cfg_count; ++i)
-        {
-            if(cfgs[i].numSamples != multisample_type)
-                continue;
-
-            if (!wined3d_check_pixel_format_depth(&adapter->gl_info, &cfgs[i], format))
-                continue;
-
-            TRACE("Found pixel format %u to support multisample_type %#x for format %s.\n",
-                    cfgs[i].iPixelFormat, multisample_type, debug_d3dformat(surface_format_id));
-
-            if (quality_levels) *quality_levels = 1;
-
-            return WINED3D_OK;
-        }
-    }
-    else if (format->flags & WINED3DFMT_FLAG_RENDERTARGET)
-    {
-        BYTE redSize, greenSize, blueSize, alphaSize, colorBits;
-        const struct wined3d_pixel_format *cfgs;
-        unsigned int i, cfg_count;
-
-        if (!getColorBits(format, &redSize, &greenSize, &blueSize, &alphaSize, &colorBits))
-        {
-            ERR("Unable to get color bits for format %s, can't check multisampling capability.\n",
-                    debug_d3dformat(surface_format_id));
-            return WINED3DERR_NOTAVAILABLE;
-        }
-
-        cfgs = adapter->cfgs;
-        cfg_count = adapter->nCfgs;
-        for (i = 0; i < cfg_count; ++i)
-        {
-            if(cfgs[i].numSamples != multisample_type)
-                continue;
-            if(cfgs[i].redSize != redSize)
-                continue;
-            if(cfgs[i].greenSize != greenSize)
-                continue;
-            if(cfgs[i].blueSize != blueSize)
-                continue;
-            /* Not all drivers report alpha-less formats since they use 32-bit
-             * anyway, so accept alpha even if we didn't ask for it. */
-            if(alphaSize && cfgs[i].alphaSize != alphaSize)
-                continue;
-            if (cfgs[i].colorSize != (format->byte_count << 3))
-                continue;
-
-            TRACE("Found pixel format %u to support multisample_type %#x for format %s.\n",
-                    cfgs[i].iPixelFormat, multisample_type, debug_d3dformat(surface_format_id));
-
-            if (quality_levels) *quality_levels = 1;
-
-            return WINED3D_OK;
-        }
-    }
     return WINED3DERR_NOTAVAILABLE;
 }
 
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index 06af5b1..da6aa2a 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -84,7 +84,7 @@ struct wined3d_settings wined3d_settings =
     PCI_DEVICE_NONE,/* PCI Device ID */
     0,              /* The default of memory is set in init_driver_info */
     NULL,           /* No wine logo by default */
-    FALSE,          /* Disable multisampling for now due to Nvidia driver bugs which happens for some users */
+    FALSE,          /* Multisampling disabled by default. */
     FALSE,          /* No strict draw ordering. */
     FALSE,          /* Try to render onscreen by default. */
 };




More information about the wine-cvs mailing list