[Piglit] [PATCH 2/2] EGL_CHROMIUM_get_sync_values: Add conformance test.
Jamey Sharp
jamey at minilop.net
Thu Apr 24 09:17:50 PDT 2014
On Apr 23, 2014 1:36 PM, "Chad Versace" <chad.versace at linux.intel.com>
wrote:
> On Tue, Apr 22, 2014 at 12:22:12PM -0700, Sarah Sharp wrote:
> > On Fri, Apr 18, 2014 at 06:21:31PM -0700, Jamey Sharp wrote:
> > > - I don't see that MSC has to change at all even after two
> > > eglSwapBuffers calls, if SwapBuffers doesn't sync to vertical retrace.
> >
> > I looked at the EGL 1.5 spec with Chad, and if you look at the
> > definition of eglSwapInterval, you'll see that the "minimum number of
> > video frame periods per buffer swap" is set to 1 by default. I think
> > one frame period is the time between vertical retraces, but the spec
> > isn't clear on that.
>
> The spec is sadly ambiguous on that. It's also ambiguous on whether
> eglSwapBuffers blocks or immediately returns false if too many
> outstanding swaps are pending.
>
> I think it's safe to assume that it blocks. because that's what all EGL
> implementations do that I've used: X11, Android, Wayland, and
> (vacuously) GBM. (More below on why this it's vacuously true that GBM
> implements the blocking behavior).
I'd just feel more comfortable, in a conformance test, if there were
specification text you could point to instead of a de facto standard. I
note you only mention Linux based GL implementations, after all.
Any day one can use a word like "vacuously" is a good day, though.
> As for eglSwapBuffers being synchronized to vertical retraces, again it
> is on all platforms I've used.
Modulo bugs, presumably, since it certainly isn't reliably synchronized in
X right now. :-) But I agree that it's intended to be, especially
considering:
> Like Sarah said. If you set env vars that provide nonconformant
> behavior, then your conformance testsuite may fail.
It wasn't obvious to me that that was non-conforming behavior. However,
Theo has since pointed out this sentence in the OML_sync_control spec:
"If there are multiple outstanding swaps for the same window, at most one
such swap can be satisfied per increment of MSC."
So I retract my first concern. :-)
(Technically this doesn't say the swap has to happen during vertical
retrace, but for the purposes of Sarah's tests that doesn't matter.)
> I played with that test app on X11, Wayland, and GBM to discover exactly
> how the swap interval behaves on each platform. Wayland was the
> weirdest.
Out of curiosity, how was Wayland weird?
> I think the test should do this:
>
> Create the EGLConfig as it currently does. That is, do not specify
> EGL_[MIN|MAX]_SWAP_INTERVAL. Then immediately query
> eglGetConfigAttrib(EGL_MIN_SWAP_INTERVAL) and
> eglGetConfigAttrib(EGL_MAX_SWAP_INTERVAL).
>
> If the max swap interval is 0, then eglSwapBuffers will not block.
> So report PIGLIT_RESULT_SKIP.
>
> Else, the EGL spec ensures that the surface's swap interval is
> EGL_MIN_SWAP_INTERVAL. Calculate the expected MSC and SBC from that.
>
> For bonus points, let the desired swap_interval be an input
> parameter to the test. The test will skip if and only if
> requested_swap_interval is outside of [EGL_MIN_SWAP_INTERVAL,
> EGL_MAX_SWAP_INTERVAL]. The test sets the surface's swap interval
> with eglSwapInterval(requested_swap_interval), calculates expected
> values of of MSC and SBC, and tests for them.
>
> Why is GBM a special case? Because EGLConfigs on GBM have
> EGL_MIN_SWAP_INTERVAL == EGL_MAX_SWAP_INTERVAL == 0. So eglSwapBuffers
> never throttles.
This strikes me as a very satisfying way to handle it, my lingering
concerns about unspecified throttling/blocking behavior notwithstanding.
Ooh, and does Mesa set EGL_MAX_SWAP_INTERVAL == 0 if vblank_mode is 0?
Jamey
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20140424/d6c937e6/attachment.html>
More information about the Piglit
mailing list