summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/dri/common/dri_screen.c
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2013-03-13 20:24:05 -0600
committerBrian Paul <brianp@vmware.com>2013-03-15 07:05:01 -0600
commitfec8733d4ed573c5a3e1cb0e837bcfa1986bbeff (patch)
tree0c08e4eda0b3d01bb8db7906e5c834a1bf59c090 /src/gallium/state_trackers/dri/common/dri_screen.c
parent5d1b3097e2ee7c0a8197562a47a09beb0930acfc (diff)
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.
Diffstat (limited to 'src/gallium/state_trackers/dri/common/dri_screen.c')
-rw-r--r--src/gallium/state_trackers/dri/common/dri_screen.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/gallium/state_trackers/dri/common/dri_screen.c b/src/gallium/state_trackers/dri/common/dri_screen.c
index a908e28be76..2f525a24c3c 100644
--- a/src/gallium/state_trackers/dri/common/dri_screen.c
+++ b/src/gallium/state_trackers/dri/common/dri_screen.c
@@ -38,6 +38,7 @@
#include "pipe/p_screen.h"
#include "pipe/p_format.h"
#include "state_tracker/st_gl_api.h" /* for st_gl_api_create */
+#include "state_tracker/drm_driver.h"
#include "util/u_debug.h"
@@ -67,11 +68,14 @@ PUBLIC const char __driConfigOptions[] =
DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN(false)
DRI_CONF_SECTION_END
+ DRI_CONF_SECTION_MISCELLANEOUS
+ DRI_CONF_ALWAYS_HAVE_DEPTH_BUFFER(false)
+ DRI_CONF_SECTION_END
DRI_CONF_END;
#define false 0
-static const uint __driNConfigOptions = 10;
+static const uint __driNConfigOptions = 11;
static const __DRIconfig **
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
};
- depth_bits_array[0] = 0;
- stencil_bits_array[0] = 0;
- depth_buffer_factor = 1;
-
+ if (driQueryOptionb(&screen->optionCache, "always_have_depth_buffer")) {
+ /* all visuals will have a depth buffer */
+ 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_VISUAL_MAX_SAMPLES : 1;
@@ -397,9 +407,14 @@ dri_init_screen_helper(struct dri_screen *screen,
else
screen->target = PIPE_TEXTURE_RECT;
- driParseOptionInfo(&screen->optionCache,
+ driParseOptionInfo(&screen->optionCacheDefaults,
__driConfigOptions, __driNConfigOptions);
+ driParseConfigFiles(&screen->optionCache,
+ &screen->optionCacheDefaults,
+ screen->sPriv->myNum,
+ driver_descriptor.name);
+
return dri_fill_in_modes(screen);
}