=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: wined3d: Handle multisample_quality if type == MULTISAMPLE_NON_MASKABLE.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Aug 25 09:38:02 CDT 2015


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Tue Aug 25 00:43:39 2015 +0200

wined3d: Handle multisample_quality if type == MULTISAMPLE_NON_MASKABLE.

---

 dlls/wined3d/directx.c |  1 -
 dlls/wined3d/surface.c | 21 ++++++++++++++-------
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 3f52300..019b415 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -4405,7 +4405,6 @@ HRESULT CDECL wined3d_check_device_multisample_type(const struct wined3d *wined3
     if (quality_levels)
     {
         if (multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE)
-            /* FIXME: This is probably wrong. */
             *quality_levels = gl_info->limits.samples;
         else
             *quality_levels = 1;
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index c6d5a5a..85ad4a4 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2844,12 +2844,25 @@ void surface_prepare_rb(struct wined3d_surface *surface, const struct wined3d_gl
 {
     if (multisample)
     {
+        DWORD samples;
+
         if (surface->rb_multisample)
             return;
 
+        /* TODO: Nvidia exposes their Coverage Sample Anti-Aliasing (CSAA) feature
+         * through type == MULTISAMPLE_XX and quality != 0. This could be mapped
+         * to GL_NV_framebuffer_multisample_coverage.
+         *
+         * AMD has a similar feature called Enhanced Quality Anti-Aliasing (EQAA),
+         * but it does not have an equivalent OpenGL extension. */
+        if (surface->resource.multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE)
+            samples = surface->resource.multisample_quality;
+        else
+            samples = surface->resource.multisample_type;
+
         gl_info->fbo_ops.glGenRenderbuffers(1, &surface->rb_multisample);
         gl_info->fbo_ops.glBindRenderbuffer(GL_RENDERBUFFER, surface->rb_multisample);
-        gl_info->fbo_ops.glRenderbufferStorageMultisample(GL_RENDERBUFFER, surface->resource.multisample_type,
+        gl_info->fbo_ops.glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples,
                 surface->resource.format->glInternal, surface->pow2Width, surface->pow2Height);
         checkGLcall("glRenderbufferStorageMultisample()");
         TRACE("Created multisample rb %u.\n", surface->rb_multisample);
@@ -5395,12 +5408,6 @@ static HRESULT surface_init(struct wined3d_surface *surface, struct wined3d_text
     unsigned int resource_size;
     HRESULT hr;
 
-    if (multisample_quality > 0)
-    {
-        FIXME("multisample_quality set to %u, substituting 0.\n", multisample_quality);
-        multisample_quality = 0;
-    }
-
     /* Quick lockable sanity check.
      * TODO: remove this after surfaces, usage and lockability have been debugged properly
      * this function is too deep to need to care about things like this.




More information about the wine-cvs mailing list