[Piglit] [PATCH 10/16] msaa/formats: Adjust tolerance appropriately for floating-point formats.
Anuj Phogat
anuj.phogat at gmail.com
Fri Jun 22 14:08:08 PDT 2012
On Fri, Jun 15, 2012 at 8:32 AM, Paul Berry <stereotype441 at gmail.com> wrote:
> When setting up a floating-point format, the GL implementation
> responds to queries GL_ATTACHMENT_{RED,GREEN,BLUE,ALPHA}_SIZE with the
> total number of bits in the floating-point value, regardless of
> whether those bits are used for sign, exponent, or mantissa. However,
> for the purpose of setting a reasonable tolerance for pass/fail
> comparisons, we really should only account for mantissa bits.
>
> This patch modifies the MSAA "formats" test to detect when the buffer
> format is GL_FLOAT, and if so, convert the channel size into the
> number of mantissa bits, so that we don't test floating-point formats
> to an unreasonably tight tolerance.
> ---
> tests/spec/ext_framebuffer_multisample/formats.cpp | 34 ++++++++++++++++++--
> 1 files changed, 31 insertions(+), 3 deletions(-)
>
> diff --git a/tests/spec/ext_framebuffer_multisample/formats.cpp b/tests/spec/ext_framebuffer_multisample/formats.cpp
> index a55f053..b8e8352 100644
> --- a/tests/spec/ext_framebuffer_multisample/formats.cpp
> +++ b/tests/spec/ext_framebuffer_multisample/formats.cpp
> @@ -168,6 +168,27 @@ PatternRenderer::try_setup(GLenum internalformat)
>
>
> /**
> + * Return the number of mantissa bits available in an n-bit floating
> + * point format.
> + */
> +int
> +get_mantissa_bits(int n)
> +{
> + switch (n) {
> + case 32: return 23;
> + case 16: return 10;
> + case 11: return 6;
> + case 10: return 5;
> + case 0: return 0; /* Unused channel */
> + default:
> + printf("Unrecognized floating point format (%d bits)\n", n);
> + piglit_report_result(PIGLIT_FAIL);
> + return 0;
> + }
> +}
> +
> +
> +/**
> * Set the piglit tolerance appropriately based on the number of bits
> * in each channel.
> */
> @@ -176,20 +197,27 @@ void PatternRenderer::set_piglit_tolerance()
> int tolerance_bits[4];
>
> for (int i = 0; i < 4; ++i) {
> - if (color_bits[i] == 0) {
> + int bits = color_bits[i];
> + if (component_type == GL_FLOAT) {
> + /* We only want to count mantissa bits for the
> + * purpose of setting the test tolerance.
> + */
> + bits = get_mantissa_bits(bits);
> + }
> + if (bits == 0) {
> /* For channels that have 0 bits, test to 8
> * bits precision so we can verify that the
> * blit puts in the appropriate value.
> */
> tolerance_bits[i] = 8;
> - } else if (color_bits[i] > 8) {
> + } else if (bits > 8) {
> /* For channels that have >8 bits, test to 8
> * bits precision because we only use an 8-bit
> * reference image.
> */
> tolerance_bits[i] = 8;
> } else {
> - tolerance_bits[i] = color_bits[i];
> + tolerance_bits[i] = bits;
> }
> }
>
> --
> 1.7.7.6
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
More information about the Piglit
mailing list