=?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