[Mesa-dev] [PATCH 05/10] intel: Add flags to intel_screen for hiz and separate stencil
Chad Versace
chad at chad-versace.us
Sat Jun 4 17:45:38 PDT 2011
Add the fields below to intel_screen. The expression in parens is the
value to which intelInitScreen2() currently sets the field.
GLboolean hw_has_separate_stencil (true iff gen >= 7)
GLboolean hw_must_use_separate_stencil (true iff gen >= 7)
GLboolean hw_has_hiz (always false)
enum intel_dri2_has_hiz dri2_has_hiz (INTEL_DRI2_HAS_HIZ_UNKNOWN)
The analogous fields in intel_context now inherit their values from
intel_screen.
When hiz and separate stencil become completely implemented for a given
chipset, then the respective fields need to be enabled.
CC: Eric Anholt <eric at anholt.net>
CC: Ian Romanick <idr at freedesktop.org>
CC: Kenneth Graunke <kenneth at whitecape.org>
CC: Kristian Høgsberg <krh at bitplanet.net>
Signed-off-by: Chad Versace <chad at chad-versace.us>
---
src/mesa/drivers/dri/intel/intel_context.c | 10 +---
src/mesa/drivers/dri/intel/intel_screen.c | 60 ++++++++++++++++++++++++++++
src/mesa/drivers/dri/intel/intel_screen.h | 10 +++++
3 files changed, 73 insertions(+), 7 deletions(-)
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index 2ea52c2..7404016 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -714,14 +714,9 @@ intelInitContext(struct intel_context *intel,
if (IS_GEN7(intel->intelScreen->deviceID)) {
intel->needs_ff_sync = GL_TRUE;
intel->has_luminance_srgb = GL_TRUE;
- /* FINISHME: Enable intel->has_separate_stencil on Gen7. */
- /* FINISHME: Enable intel->must_use_separate_stencil on Gen7. */
- /* FINISHME: Enable intel->has_hiz on Gen7. */
} else if (IS_GEN6(intel->intelScreen->deviceID)) {
intel->needs_ff_sync = GL_TRUE;
intel->has_luminance_srgb = GL_TRUE;
- /* FINISHME: Enable intel->has_separate_stencil on Gen6. */
- /* FINISHME: Enable intel->has_hiz on Gen6. */
} else if (IS_GEN5(intel->intelScreen->deviceID)) {
intel->needs_ff_sync = GL_TRUE;
intel->has_luminance_srgb = GL_TRUE;
@@ -741,8 +736,9 @@ intelInitContext(struct intel_context *intel,
}
}
- intel_override_hiz(intel);
- intel_override_separate_stencil(intel);
+ intel->has_separate_stencil = intel->intelScreen->hw_has_separate_stencil;
+ intel->must_use_separate_stencil = intel->intelScreen->hw_must_use_separate_stencil;
+ intel->has_hiz = intel->intelScreen->hw_has_hiz;
memset(&ctx->TextureFormatSupported, 0,
sizeof(ctx->TextureFormatSupported));
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index deca11d..646b960 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -507,6 +507,54 @@ intel_init_bufmgr(struct intel_screen *intelScreen)
}
/**
+ * Override intel_screen.hw_has_hiz with environment variable INTEL_HIZ.
+ *
+ * Valid values for INTEL_HIZ are "0" and "1". If an invalid valid value is
+ * encountered, a warning is emitted and INTEL_HIZ is ignored.
+ */
+static void
+intel_override_hiz(struct intel_screen *intel)
+{
+ const char *s = getenv("INTEL_HIZ");
+ if (!s) {
+ return;
+ } else if (!strncmp("0", s, 2)) {
+ intel->hw_has_hiz = false;
+ } else if (!strncmp("1", s, 2)) {
+ intel->hw_has_hiz = true;
+ } else {
+ fprintf(stderr,
+ "warning: env variable INTEL_HIZ=\"%s\" has invalid value "
+ "and is ignored", s);
+ }
+}
+
+/**
+ * Override intel_screen.hw_has_separate_stencil with environment variable
+ * INTEL_SEPARATE_STENCIL.
+ *
+ * Valid values for INTEL_SEPARATE_STENCIL are "0" and "1". If an invalid
+ * valid value is encountered, a warning is emitted and INTEL_SEPARATE_STENCIL
+ * is ignored.
+ */
+static void
+intel_override_separate_stencil(struct intel_screen *screen)
+{
+ const char *s = getenv("INTEL_SEPARATE_STENCIL");
+ if (!s) {
+ return;
+ } else if (!strncmp("0", s, 2)) {
+ screen->hw_has_separate_stencil = false;
+ } else if (!strncmp("1", s, 2)) {
+ screen->hw_has_separate_stencil = true;
+ } else {
+ fprintf(stderr,
+ "warning: env variable INTEL_SEPARATE_STENCIL=\"%s\" has "
+ "invalid value and is ignored", s);
+ }
+}
+
+/**
* This is the driver specific part of the createNewScreen entry point.
* Called when using DRI2.
*
@@ -570,6 +618,18 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)
intelScreen->gen = 2;
}
+ /*
+ * FIXME: The hiz and separate stencil fields need updating once the
+ * FIXME: features are completely implemented for a given chipset.
+ */
+ intelScreen->hw_has_separate_stencil = intelScreen->gen >= 7;
+ intelScreen->hw_must_use_separate_stencil = intelScreen->gen >= 7;
+ intelScreen->hw_has_hiz = false;
+ intelScreen->dri2_has_hiz = INTEL_DRI2_HAS_HIZ_UNKNOWN;
+
+ intel_override_hiz(intelScreen);
+ intel_override_separate_stencil(intelScreen);
+
api_mask = (1 << __DRI_API_OPENGL);
#if FEATURE_ES1
api_mask |= (1 << __DRI_API_GLES);
diff --git a/src/mesa/drivers/dri/intel/intel_screen.h b/src/mesa/drivers/dri/intel/intel_screen.h
index d4add6a..a45fb5f 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.h
+++ b/src/mesa/drivers/dri/intel/intel_screen.h
@@ -100,6 +100,16 @@ struct intel_screen
GLboolean no_hw;
GLuint relaxed_relocations;
+ /*
+ * The hardware hiz and separate stencil fields are needed in intel_screen,
+ * rather than solely in intel_context, because glXCreatePbuffer and
+ * glXCreatePixmap are not passed a GLXContext.
+ */
+ GLboolean hw_has_separate_stencil;
+ GLboolean hw_must_use_separate_stencil;
+ GLboolean hw_has_hiz;
+ enum intel_dri2_has_hiz dri2_has_hiz;
+
GLboolean no_vbo;
dri_bufmgr *bufmgr;
struct _mesa_HashTable *named_regions;
--
1.7.5.2
More information about the mesa-dev
mailing list