[Mesa-dev] [PATCH 04/10] intel: Define enum intel_dri2_has_hiz
Chad Versace
chad at chad-versace.us
Tue Jun 7 08:31:46 PDT 2011
On Mon, 06 Jun 2011 17:50:06 -0700, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On 06/04/2011 05:45 PM, Chad Versace wrote:
> > ... which indicates if the X driver supports DRI2BufferHiz and
> > DRI2BufferStencil.
> >
> > I'm placing this in its own commit due to the large comment block.
> >
> > 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_screen.h | 54 +++++++++++++++++++++++++++++
> > 1 files changed, 54 insertions(+), 0 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/intel/intel_screen.h b/src/mesa/drivers/dri/intel/intel_screen.h
> > index 4613c98..d4add6a 100644
> > --- a/src/mesa/drivers/dri/intel/intel_screen.h
> > +++ b/src/mesa/drivers/dri/intel/intel_screen.h
> > @@ -34,6 +34,60 @@
> > #include "i915_drm.h"
> > #include "xmlconfig.h"
> >
> > +/**
> > + * \brief Does the X driver support DRI2BufferHiz and DRI2BufferStencil?
> > + *
> > + * The DRI2 protocol does not allow us to query the X driver's version nor
> > + * query for a list of buffer formats that the driver supports. So, to
> > + * determine if the X driver supports DRI2BufferHiz and DRI2BufferStencil we
> > + * must resort to a handshake.
> > + *
> > + * If the hardware lacks support for separate stencil (and consequently, lacks
> > + * support for hiz also), then the X driver's separate stencil and hiz support
> > + * is irrelevant and the handshake never occurs.
> > + *
> > + * Complications
> > + * -------------
> > + * The handshake is complicated by a bug in the current driver version. Even
>
> I might say "xf86-video-intel 2.15" rather than "current driver
> version". It's future-proof (saves us from reassociating this commit's
> date with DDX versions) and more specific (the issue is the DDX driver,
> not the Mesa driver).
You're right: "current driver version" is too ambiguous. It's now
replaced with "xf86-video-intel 2.15".
To eliminate any ambiguity, I also placed this near the top of the comment:
> (Here, "X driver" referes to the DDX driver, xf86-video-intel).
> > + * though the driver currently does not support requests for DRI2BufferHiz or
> > + * DRI2BufferStencil, if requested one it still allocates and returns one. The
> > + * returned buffer, however, is incorrectly X tiled.
> > + *
> > + * How the handshake works
> > + * -----------------------
> > + * (TODO: To be implemented on a future commit).
> > + *
> > + * Initially, intel_screen.dri2_has_hiz is set to unknown. The first time the
> > + * user requests a depth and stencil buffer, intelCreateBuffers() creates a
> > + * framebuffer with separate depth and stencil attachments (with formats
> > + * x8_z24 and s8).
> > + *
>
> As I mentioned in person today, this isn't necessary for Ivybridge---the
> released DDX driver doesn't include Ivybridge PCI IDs.
>
> So we could possibly do:
>
> if (intel->gen >= 7)
> intel_screen.dri2_has_hiz = INTEL_DRI2_HAS_HIZ_TRUE;
>
> But your handshake should already work that out anyway, so I suppose
> it's pointless to add that.
>
> > + * Eventually, intel_update_renderbuffers() makes a DRI2 request for
> > + * DRI2BufferStencil and DRI2BufferHiz. If the returned buffers are Y tiled,
> > + * then we joyfully set intel_screen.dri2_has_hiz to true and continue as if
> > + * nothing happend.
> > + *
> > + * If the buffers are X tiled, however, the handshake has failed and we must
> > + * clean up.
> > + * 1. Angrily set intel_screen.dri2_has_hiz to false.
> > + * 2. Discard the framebuffer's depth and stencil attachments.
> > + * 3. Attach a packed depth/stencil buffer to the framebuffer (with format
> > + * s8_z24).
> > + * 4. Make a DRI2 request for the new buffer, using attachment type
> > + * DRI2BufferDepthStencil).
> > + *
> > + * Future Considerations
> > + * ---------------------
> > + * On a sunny day in the far future, when we are certain that no one has an
> > + * X driver installed without hiz and separate stencil support, then this
> > + * enumerant and the handshake should die.
> > + */
> > +enum intel_dri2_has_hiz {
> > + INTEL_DRI2_HAS_HIZ_UNKNOWN,
> > + INTEL_DRI2_HAS_HIZ_TRUE,
> > + INTEL_DRI2_HAS_HIZ_FALSE,
> > +};
> > +
>
> I was going to suggest doing the following:
>
> +enum intel_dri2_has_hiz {
> + INTEL_DRI2_HAS_HIZ_UNKNOWN = -1,
> + INTEL_DRI2_HAS_HIZ_TRUE = 1
> + INTEL_DRI2_HAS_HIZ_FALSE = 0,
> +};
>
> That way, TRUE == true and FALSE == false, which is nice if you forget
> to use the enums. But of course that would make UNKNOWN == true too,
> which is bullshit. So not using the enums is bad. What you have should
> be fine. :)
It's shame that there is no #include <ternary_logic.h>.
I was worried about the same issues you mention here, and came to the same
conclusions. UKNOWN == true is bullshit, and we just have to use the
enums everywhere. Since that's the case, it doesn't matter what their values are.
----
Chad Versace
chad at chad-versace.us
More information about the mesa-dev
mailing list