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.
This commit is contained in:
Henri Verbeet 2011-08-25 21:05:02 +02:00 committed by Alexandre Julliard
parent eec2c634a6
commit bd5f948682
3 changed files with 8 additions and 101 deletions

View file

@ -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 */

View file

@ -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;
}

View file

@ -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. */
};