i965: Change the hiz-override env var to a driconf option.

The force-enable option is dropped, now that the hardware we were
concerned about has HiZ on by default.  Now, instead of doing
INTEL_HIZ=0 to test disabling hiz, you can set hiz=false.

v2: Disable separate stencil on gen6 when HIZ is turned off.
    (previously, this had to be done manually in addition).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
This commit is contained in:
Eric Anholt 2012-03-06 11:05:20 -08:00
parent 447aff5b02
commit d09fce51f0
3 changed files with 13 additions and 28 deletions

View file

@ -627,7 +627,7 @@ intelInitContext(struct intel_context *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;
intel->has_hiz = intel->gen >= 6;
intel->has_llc = intel->intelScreen->hw_has_llc;
intel->has_swizzling = intel->intelScreen->hw_has_swizzling;
@ -740,6 +740,13 @@ intelInitContext(struct intel_context *intel,
"texture_tiling");
intel->use_early_z = driQueryOptionb(&intel->optionCache, "early_z");
if (!driQueryOptionb(&intel->optionCache, "hiz")) {
intel->has_hiz = false;
/* On gen6, you can only do separate stencil with HIZ. */
if (intel->gen == 6)
intel->has_separate_stencil = false;
}
intel->prim.primitive = ~0;
/* Force all software fallbacks */

View file

@ -57,6 +57,10 @@ PUBLIC const char __driConfigOptions[] =
DRI_CONF_DESC(en, "Enable texture tiling")
DRI_CONF_OPT_END
DRI_CONF_OPT_BEGIN(hiz, bool, true)
DRI_CONF_DESC(en, "Enable Hierarchical Z on gen6+")
DRI_CONF_OPT_END
DRI_CONF_OPT_BEGIN(early_z, bool, false)
DRI_CONF_DESC(en, "Enable early Z in classic mode (unstable, 945-only).")
DRI_CONF_OPT_END
@ -86,7 +90,7 @@ PUBLIC const char __driConfigOptions[] =
DRI_CONF_SECTION_END
DRI_CONF_END;
const GLuint __driNConfigOptions = 13;
const GLuint __driNConfigOptions = 14;
#include "intel_batchbuffer.h"
#include "intel_buffers.h"
@ -619,29 +623,6 @@ intel_init_bufmgr(struct intel_screen *intelScreen)
return true;
}
/**
* 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.
@ -761,7 +742,6 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)
intelScreen->hw_has_separate_stencil = intelScreen->gen >= 6;
intelScreen->hw_must_use_separate_stencil = intelScreen->gen >= 7;
intelScreen->hw_has_hiz = intelScreen->gen >= 6;
intelScreen->dri2_has_hiz = INTEL_DRI2_HAS_HIZ_UNKNOWN;
#if defined(I915_PARAM_HAS_LLC)
@ -772,7 +752,6 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)
intelScreen->hw_has_llc = intelScreen->gen >= 6;
#endif
intel_override_hiz(intelScreen);
intel_override_separate_stencil(intelScreen);
api_mask = (1 << __DRI_API_OPENGL);

View file

@ -111,7 +111,6 @@ struct intel_screen
*/
bool hw_has_separate_stencil;
bool hw_must_use_separate_stencil;
bool hw_has_hiz;
enum intel_dri2_has_hiz dri2_has_hiz;
bool kernel_has_gen7_sol_reset;