fbo-mrt-alphatest: Actually require MRTs to be available.
[piglit.git] / tests / general / roundmode-pixelstore.c
blob57ec11c09d72d79b551b4a89bdd639863c095a83
1 /*
2 * Copyright © 2011 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
24 /**
25 * @file roundmode-pixelstore.c
27 * Tests that the floating point rounding mode doesn't impact
28 * glPixelStore's rounding behavior.
30 * From the GL 2.1 specification, page 114 (page 128 of the PDF):
32 * "The version of PixelStore that takes a floating-point value
33 * may be used to set any type of parameter; if the parameter is
34 * boolean, then it is set to FALSE if the passed value is 0.0
35 * and TRUE otherwise, while if the parameter is an integer, then
36 * the passed value is rounded to the nearest integer."
39 #include "piglit-util-gl.h"
41 #include <fenv.h>
43 PIGLIT_GL_TEST_CONFIG_BEGIN
45 config.supports_gl_compat_version = 10;
47 config.window_visual = PIGLIT_GL_VISUAL_DOUBLE;
49 config.khr_no_error_support = PIGLIT_NO_ERRORS;
51 PIGLIT_GL_TEST_CONFIG_END
53 enum piglit_result
54 piglit_display(void)
56 /* UNREACHED */
57 return PIGLIT_FAIL;
60 static bool
61 test(float val, int expect)
63 GLint out;
65 glPixelStoref(GL_UNPACK_ROW_LENGTH, val);
66 glGetIntegerv(GL_UNPACK_ROW_LENGTH, &out);
68 if (out != expect) {
69 printf("Set row length to %.1f, expected %d, got %d\n",
70 val, expect, out);
71 return false;
72 } else {
73 printf("Set row length to %.1f and got %d\n", val, out);
76 return true;
79 void
80 piglit_init(int argc, char **argv)
82 bool pass = true;
84 #ifdef FE_UPWARD
85 if (fesetround(FE_UPWARD) != 0) {
86 printf("Setting rounding mode failed\n");
87 piglit_report_result(PIGLIT_SKIP);
89 #else
90 printf("Cannot set rounding mode\n");
91 piglit_report_result(PIGLIT_SKIP);
92 #endif
94 pass = test(2.2, 2) && pass;
95 pass = test(2.8, 3) && pass;
96 pass = test(-0.1, 0) && pass;
97 pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
99 if (!piglit_khr_no_error) {
100 printf("Setting row length -0.9, and expecting error\n");
101 glPixelStoref(GL_UNPACK_ROW_LENGTH, -0.9);
102 pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
105 piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);