st/dri: add support for the always_have_depth_buffer option
This involved adding another driOptionCache to dri_screen. The existing one just held the default values. But now we also need to have the values from the DRI config file so that we can get at the always_have_depth_buffer config option, which is per-screen.
This commit is contained in:
@@ -114,7 +114,8 @@ dri_create_context(gl_api api, const struct gl_config * visual,
|
|||||||
ctx->sPriv = sPriv;
|
ctx->sPriv = sPriv;
|
||||||
|
|
||||||
driParseConfigFiles(&ctx->optionCache,
|
driParseConfigFiles(&ctx->optionCache,
|
||||||
&screen->optionCache, sPriv->myNum, driver_descriptor.name);
|
&screen->optionCacheDefaults,
|
||||||
|
sPriv->myNum, driver_descriptor.name);
|
||||||
|
|
||||||
dri_fill_st_options(&attribs.options, &ctx->optionCache);
|
dri_fill_st_options(&attribs.options, &ctx->optionCache);
|
||||||
dri_fill_st_visual(&attribs.visual, screen, visual);
|
dri_fill_st_visual(&attribs.visual, screen, visual);
|
||||||
@@ -174,7 +175,7 @@ dri_destroy_context(__DRIcontext * cPriv)
|
|||||||
|
|
||||||
/* note: we are freeing values and nothing more because
|
/* note: we are freeing values and nothing more because
|
||||||
* driParseConfigFiles allocated values only - the rest
|
* driParseConfigFiles allocated values only - the rest
|
||||||
* is owned by screen optionCache.
|
* is owned by screen optionCacheDefaults.
|
||||||
*/
|
*/
|
||||||
free(ctx->optionCache.values);
|
free(ctx->optionCache.values);
|
||||||
|
|
||||||
|
@@ -38,6 +38,7 @@
|
|||||||
#include "pipe/p_screen.h"
|
#include "pipe/p_screen.h"
|
||||||
#include "pipe/p_format.h"
|
#include "pipe/p_format.h"
|
||||||
#include "state_tracker/st_gl_api.h" /* for st_gl_api_create */
|
#include "state_tracker/st_gl_api.h" /* for st_gl_api_create */
|
||||||
|
#include "state_tracker/drm_driver.h"
|
||||||
|
|
||||||
#include "util/u_debug.h"
|
#include "util/u_debug.h"
|
||||||
|
|
||||||
@@ -67,11 +68,14 @@ PUBLIC const char __driConfigOptions[] =
|
|||||||
DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN(false)
|
DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN(false)
|
||||||
DRI_CONF_SECTION_END
|
DRI_CONF_SECTION_END
|
||||||
|
|
||||||
|
DRI_CONF_SECTION_MISCELLANEOUS
|
||||||
|
DRI_CONF_ALWAYS_HAVE_DEPTH_BUFFER(false)
|
||||||
|
DRI_CONF_SECTION_END
|
||||||
DRI_CONF_END;
|
DRI_CONF_END;
|
||||||
|
|
||||||
#define false 0
|
#define false 0
|
||||||
|
|
||||||
static const uint __driNConfigOptions = 10;
|
static const uint __driNConfigOptions = 11;
|
||||||
|
|
||||||
static const __DRIconfig **
|
static const __DRIconfig **
|
||||||
dri_fill_in_modes(struct dri_screen *screen)
|
dri_fill_in_modes(struct dri_screen *screen)
|
||||||
@@ -100,10 +104,16 @@ dri_fill_in_modes(struct dri_screen *screen)
|
|||||||
GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
|
GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
|
||||||
};
|
};
|
||||||
|
|
||||||
depth_bits_array[0] = 0;
|
if (driQueryOptionb(&screen->optionCache, "always_have_depth_buffer")) {
|
||||||
stencil_bits_array[0] = 0;
|
/* all visuals will have a depth buffer */
|
||||||
depth_buffer_factor = 1;
|
depth_buffer_factor = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
depth_bits_array[0] = 0;
|
||||||
|
stencil_bits_array[0] = 0;
|
||||||
|
depth_buffer_factor = 1;
|
||||||
|
}
|
||||||
|
|
||||||
msaa_samples_max = (screen->st_api->feature_mask & ST_API_FEATURE_MS_VISUALS_MASK)
|
msaa_samples_max = (screen->st_api->feature_mask & ST_API_FEATURE_MS_VISUALS_MASK)
|
||||||
? MSAA_VISUAL_MAX_SAMPLES : 1;
|
? MSAA_VISUAL_MAX_SAMPLES : 1;
|
||||||
|
|
||||||
@@ -397,9 +407,14 @@ dri_init_screen_helper(struct dri_screen *screen,
|
|||||||
else
|
else
|
||||||
screen->target = PIPE_TEXTURE_RECT;
|
screen->target = PIPE_TEXTURE_RECT;
|
||||||
|
|
||||||
driParseOptionInfo(&screen->optionCache,
|
driParseOptionInfo(&screen->optionCacheDefaults,
|
||||||
__driConfigOptions, __driNConfigOptions);
|
__driConfigOptions, __driNConfigOptions);
|
||||||
|
|
||||||
|
driParseConfigFiles(&screen->optionCache,
|
||||||
|
&screen->optionCacheDefaults,
|
||||||
|
screen->sPriv->myNum,
|
||||||
|
driver_descriptor.name);
|
||||||
|
|
||||||
return dri_fill_in_modes(screen);
|
return dri_fill_in_modes(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,9 +57,10 @@ struct dri_screen
|
|||||||
boolean throttling_enabled;
|
boolean throttling_enabled;
|
||||||
int default_throttle_frames;
|
int default_throttle_frames;
|
||||||
|
|
||||||
/**
|
/** Configuration cache with default values for all contexts */
|
||||||
* Configuration cache with default values for all contexts
|
driOptionCache optionCacheDefaults;
|
||||||
*/
|
|
||||||
|
/** The screen's effective configuration options */
|
||||||
driOptionCache optionCache;
|
driOptionCache optionCache;
|
||||||
|
|
||||||
/* drm */
|
/* drm */
|
||||||
|
Reference in New Issue
Block a user