mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-27 04:30:37 +02:00
st/dri: add a way to force MSAA on with an environment variable
There are 2 ways. I prefer the former: GALLIUM_MSAA=n __GL_FSAA_MODE=n Tested with ETQW, which doesn't support MSAA on Linux. This is the only way to get MSAA there. Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
afa902a705
commit
1d0bf69f83
1 changed files with 39 additions and 4 deletions
|
|
@ -194,6 +194,37 @@ dri_fill_in_modes(struct dri_screen *screen)
|
|||
return (const __DRIconfig **)configs;
|
||||
}
|
||||
|
||||
/* The Gallium way to force MSAA. */
|
||||
DEBUG_GET_ONCE_NUM_OPTION(msaa, "GALLIUM_MSAA", 0);
|
||||
|
||||
/* The NVIDIA way to force MSAA. The same variable is used by the NVIDIA
|
||||
* driver. */
|
||||
DEBUG_GET_ONCE_NUM_OPTION(msaa_nv, "__GL_FSAA_MODE", 0);
|
||||
|
||||
static void
|
||||
dri_force_msaa_visual(struct st_visual *stvis,
|
||||
struct pipe_screen *screen)
|
||||
{
|
||||
int i;
|
||||
int samples = debug_get_option_msaa();
|
||||
|
||||
if (!samples)
|
||||
samples = debug_get_option_msaa_nv();
|
||||
|
||||
if (samples <= 1)
|
||||
return; /* nothing to do */
|
||||
|
||||
/* Choose a supported sample count greater than or equal to samples. */
|
||||
for (i = samples; i <= MSAA_VISUAL_MAX_SAMPLES; i++) {
|
||||
if (screen->is_format_supported(screen, stvis->color_format,
|
||||
PIPE_TEXTURE_2D, i,
|
||||
PIPE_BIND_RENDER_TARGET)) {
|
||||
stvis->samples = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Roughly the converse of dri_fill_in_modes.
|
||||
*/
|
||||
|
|
@ -206,10 +237,6 @@ dri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen,
|
|||
if (!mode)
|
||||
return;
|
||||
|
||||
if (mode->sampleBuffers) {
|
||||
stvis->samples = mode->samples;
|
||||
}
|
||||
|
||||
if (mode->redBits == 8) {
|
||||
if (mode->alphaBits == 8)
|
||||
stvis->color_format = PIPE_FORMAT_B8G8R8A8_UNORM;
|
||||
|
|
@ -219,6 +246,14 @@ dri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen,
|
|||
stvis->color_format = PIPE_FORMAT_B5G6R5_UNORM;
|
||||
}
|
||||
|
||||
if (mode->sampleBuffers) {
|
||||
stvis->samples = mode->samples;
|
||||
}
|
||||
else {
|
||||
/* This must be done after stvis->color_format is set. */
|
||||
dri_force_msaa_visual(stvis, screen->base.screen);
|
||||
}
|
||||
|
||||
switch (mode->depthBits) {
|
||||
default:
|
||||
case 0:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue