summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2015-09-21 15:02:39 -0700
committerIan Romanick <ian.d.romanick@intel.com>2015-09-29 14:33:55 -0700
commit7ea6577c5ef342168dede5b2a37e74ee1c163af2 (patch)
tree14cd5686e5ca288406c4bafffa78474fb46bbb37
parent31b4e5a551ea17f778f4dde0b057a057e7e43180 (diff)
polygon-offset: Assortment of coding standards fixes
It would be trivial it there weren't so many of them. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com> Thanked-by: Kristian Høgsberg <krh@bitplanet.net>
-rw-r--r--tests/spec/gl-1.4/polygon-offset.c318
1 files changed, 142 insertions, 176 deletions
diff --git a/tests/spec/gl-1.4/polygon-offset.c b/tests/spec/gl-1.4/polygon-offset.c
index e14bf0535..ec44d5429 100644
--- a/tests/spec/gl-1.4/polygon-offset.c
+++ b/tests/spec/gl-1.4/polygon-offset.c
@@ -32,45 +32,39 @@
*
* Implementation of polygon offset tests.
*
- * This test verifies glPolygonOffset. It is run on every
- * OpenGL-capable drawing surface configuration that supports
- * creation of a window, has a depth buffer, and is RGB.
+ * This test verifies glPolygonOffset. It is run on every OpenGL-capable
+ * drawing surface configuration that supports creation of a window, has a
+ * depth buffer, and is RGB.
*
- * The first subtest verifies that the OpenGL implementation is
- * using a plausible value for the \"minimum resolvable
- * difference\" (MRD). This is the offset in window coordinates
- * that is sufficient to provide separation in depth (Z) for any
- * two parallel surfaces. The subtest searches for the MRD by
- * drawing two surfaces at a distance from each other and
- * checking the resulting image to see if they were cleanly
- * separated. The distance is then modified (using a binary
- * search) until a minimum value is found. This is the so-called
- * \"ideal\" MRD. Then two surfaces are drawn using
- * glPolygonOffset to produce a separation that should equal one
- * MRD. The depth values at corresponding points on each surface
- * are subtracted to form the \"actual\" MRD. The subtest performs
- * these checks twice, once close to the viewpoint and once far
- * away from it, and passes if the largest of the ideal MRDs and
- * the largest of the actual MRDs are nearly the same.
+ * The first subtest verifies that the OpenGL implementation is using a
+ * plausible value for the "minimum resolvable difference" (MRD). This is the
+ * offset in window coordinates that is sufficient to provide separation in
+ * depth (Z) for any two parallel surfaces. The subtest searches for the MRD
+ * by drawing two surfaces at a distance from each other and checking the
+ * resulting image to see if they were cleanly separated. The distance is
+ * then modified (using a binary search) until a minimum value is found. This
+ * is the so-called "ideal" MRD. Then two surfaces are drawn using
+ * glPolygonOffset to produce a separation that should equal one MRD. The
+ * depth values at corresponding points on each surface are subtracted to form
+ * the "actual" MRD. The subtest performs these checks twice, once close to
+ * the viewpoint and once far away from it, and passes if the largest of the
+ * ideal MRDs and the largest of the actual MRDs are nearly the same.
*
- * The second subtest verifies that the OpenGL implementation is
- * producing plausible values for slope-dependent offsets. The
- * OpenGL spec requires that the depth slope of a surface be
- * computed by an approximation that is at least as large as
- * max(abs(dz/dx),abs(dz/dy)) and no larger than
- * sqrt((dz/dx)**2+(dz/dy)**2). The subtest draws a quad rotated
- * by various angles along various axes, samples three points on
- * the quad's surface, and computes dz/dx and dz/dy. Then it
- * draws two additional quads offset by one and two times the
- * depth slope, respectively. The base quad and the two new
- * quads are sampled and their actual depths read from the depth
- * buffer. The subtest passes if the quads are offset by amounts
- * that are within one and two times the allowable range,
- * respectively.
+ * The second subtest verifies that the OpenGL implementation is producing
+ * plausible values for slope-dependent offsets. The OpenGL spec requires
+ * that the depth slope of a surface be computed by an approximation that is
+ * at least as large as max(abs(dz/dx),abs(dz/dy)) and no larger than
+ * sqrt((dz/dx)**2+(dz/dy)**2). The subtest draws a quad rotated by various
+ * angles along various axes, samples three points on the quad's surface, and
+ * computes dz/dx and dz/dy. Then it draws two additional quads offset by one
+ * and two times the depth slope, respectively. The base quad and the two new
+ * quads are sampled and their actual depths read from the depth buffer. The
+ * subtest passes if the quads are offset by amounts that are within one and
+ * two times the allowable range, respectively.
*
- * Derived in part from tests written by Angus Dorbie <dorbie@sgi.com>
- * in September 2000 and Rickard E. (Rik) Faith <faith@valinux.com> in
- * October 2000.
+ * Derived in part from tests written by Angus Dorbie <dorbie@sgi.com> in
+ * September 2000 and Rickard E. (Rik) Faith <faith@valinux.com> in October
+ * 2000.
*
* Ported to Piglit by Laura Ekstrand.
*/
@@ -100,7 +94,7 @@ struct angle_axis {
GLfloat axis[3];
};
-void
+static void
draw_quad_at_distance(GLdouble dist)
{
glBegin(GL_QUADS);
@@ -111,22 +105,21 @@ draw_quad_at_distance(GLdouble dist)
glEnd();
}
-GLdouble
+static GLdouble
window_coord_depth(GLdouble dist)
{
- /*
- * Assumes we're using the "far at infinity" projection matrix
- * and simple viewport transformation.
+ /* Assumes we're using the "far at infinity" projection matrix and
+ * simple viewport transformation.
*/
return 0.5 * (dist - 2.0) / dist + 0.5;
}
-bool
+static bool
red_quad_was_drawn(void)
{
- float expected[] = {1.0f, 0.0f, 0.0f};
- return piglit_probe_rect_rgb_silent(0, 0, piglit_width,
- piglit_height, expected);
+ static const float expected[] = {1.0f, 0.0f, 0.0f};
+ return piglit_probe_rect_rgb_silent(0, 0, piglit_width, piglit_height,
+ expected);
}
void
@@ -135,61 +128,53 @@ piglit_init(int argc, char **argv)
}
-void
-find_ideal_mrd(GLdouble* ideal_mrd_near, GLdouble* ideal_mrd_far,
- GLdouble* next_to_near, GLdouble* next_to_far)
+static void
+find_ideal_mrd(GLdouble *ideal_mrd_near, GLdouble *ideal_mrd_far,
+ GLdouble *next_to_near, GLdouble *next_to_far)
{
- /*
- * MRD stands for Minimum Resolvable Difference, the smallest
- * distance in depth that suffices to separate any two
- * polygons (or a polygon and the near or far clipping
- * planes).
+ /* MRD stands for Minimum Resolvable Difference, the smallest distance
+ * in depth that suffices to separate any two polygons (or a polygon
+ * and the near or far clipping planes).
*
- * This function tries to determine the "ideal" MRD for the
- * current rendering context. It's expressed in window
- * coordinates, because the value in model or clipping
- * coordinates depends on the scale factors in the modelview
- * and projection matrices and on the distances to the near
- * and far clipping planes.
+ * This function tries to determine the "ideal" MRD for the current
+ * rendering context. It's expressed in window coordinates, because
+ * the value in model or clipping coordinates depends on the scale
+ * factors in the modelview and projection matrices and on the
+ * distances to the near and far clipping planes.
*
- * For simple unsigned-integer depth buffers that aren't too
- * deep (so that precision isn't an issue during coordinate
- * transformations), it should be about one least-significant
- * bit. For deep or floating-point or compressed depth
- * buffers the situation may be more complicated, so we don't
- * pass or fail an implementation solely on the basis of its
- * ideal MRD.
+ * For simple unsigned-integer depth buffers that aren't too deep (so
+ * that precision isn't an issue during coordinate transformations),
+ * it should be about one least-significant bit. For deep or
+ * floating-point or compressed depth buffers the situation may be
+ * more complicated, so we don't pass or fail an implementation solely
+ * on the basis of its ideal MRD.
*
- * There are two subtle parts of this function. The first is
- * the projection matrix we use for rendering. This matrix
- * places the far clip plane at infinity (so that we don't run
- * into arbitrary limits during our search process). The
- * second is the method used for drawing the polygon. We
- * scale the x and y coords of the polygon vertices by the
- * polygon's depth, so that it always occupies the full view
- * frustum. This makes it easier to verify that the polygon
- * was resolved completely -- we just read back the entire
- * window and see if any background pixels appear.
+ * There are two subtle parts of this function. The first is the
+ * projection matrix we use for rendering. This matrix places the far
+ * clip plane at infinity (so that we don't run into arbitrary limits
+ * during our search process). The second is the method used for
+ * drawing the polygon. We scale the x and y coords of the polygon
+ * vertices by the polygon's depth, so that it always occupies the
+ * full view frustum. This makes it easier to verify that the polygon
+ * was resolved completely -- we just read back the entire window and
+ * see if any background pixels appear.
*
- * To insure that we get reasonable results on machines with
- * unusual depth buffers (floating-point, or compressed), we
- * determine the MRD twice, once close to the near clipping
- * plane and once as far away from the eye as possible. On a
- * simple integer depth buffer these two values should be
- * essentially the same. For other depth-buffer formats, the
- * ideal MRD is simply the largest of the two.
+ * To insure that we get reasonable results on machines with unusual
+ * depth buffers (floating-point, or compressed), we determine the MRD
+ * twice, once close to the near clipping plane and once as far away
+ * from the eye as possible. On a simple integer depth buffer these
+ * two values should be essentially the same. For other depth-buffer
+ * formats, the ideal MRD is simply the largest of the two.
*/
GLdouble near_dist, far_dist, half_dist;
int i;
- /*
- * First, find a distance that is as far away as possible, yet
- * a quad at that distance can be distinguished from the
- * background. Start by pushing quads away from the eye until
- * we find an interval where the closer quad can be resolved,
- * but the farther quad cannot. Then binary-search to find
- * the threshold.
+ /* First, find a distance that is as far away as possible, yet a quad
+ * at that distance can be distinguished from the background. Start
+ * by pushing quads away from the eye until we find an interval where
+ * the closer quad can be resolved, but the farther quad cannot. Then
+ * binary-search to find the threshold.
*/
glDepthFunc(GL_LESS);
@@ -218,22 +203,19 @@ find_ideal_mrd(GLdouble* ideal_mrd_near, GLdouble* ideal_mrd_far,
}
*next_to_far = near_dist;
- /*
- * We can derive a resolvable difference from the value
- * next_to_far, but it's not necessarily the one we want.
- * Consider mapping the object coordinate range [0,1] onto the
- * integer window coordinate range [0,2]. A natural way to do
- * this is with a linear function, windowCoord =
- * 2*objectCoord. With rounding, this maps [0,0.25) to 0,
- * [0.25,0.75) to 1, and [0.75,1] to 2. Note that the
- * intervals at either end are 0.25 wide, but the one in the
- * middle is 0.5 wide. The difference we can derive from
- * next_to_far is related to the width of the final interval.
- * We want to back up just a bit so that we can get a
- * (possibly much larger) difference that will work for the
- * larger interval. To do this we need to find a difference
- * that allows us to distinguish two quads when the more
- * distant one is at distance next_to_far.
+ /* We can derive a resolvable difference from the value next_to_far,
+ * but it's not necessarily the one we want. Consider mapping the
+ * object coordinate range [0,1] onto the integer window coordinate
+ * range [0,2]. A natural way to do this is with a linear function,
+ * windowCoord = 2*objectCoord. With rounding, this maps [0,0.25) to
+ * 0, [0.25,0.75) to 1, and [0.75,1] to 2. Note that the intervals at
+ * either end are 0.25 wide, but the one in the middle is 0.5 wide.
+ * The difference we can derive from next_to_far is related to the
+ * width of the final interval. We want to back up just a bit so that
+ * we can get a (possibly much larger) difference that will work for
+ * the larger interval. To do this we need to find a difference that
+ * allows us to distinguish two quads when the more distant one is at
+ * distance next_to_far.
*/
near_dist = 1.0;
@@ -260,11 +242,9 @@ find_ideal_mrd(GLdouble* ideal_mrd_near, GLdouble* ideal_mrd_far,
*ideal_mrd_far = window_coord_depth(*next_to_far)
- window_coord_depth(near_dist);
- /*
- * Now we apply a similar strategy at the near end of the
- * depth range, but swapping the senses of various comparisons
- * so that we approach the near clipping plane rather than the
- * far.
+ /* Now we apply a similar strategy at the near end of the depth range,
+ * but swapping the senses of various comparisons so that we approach
+ * the near clipping plane rather than the far.
*/
glClearDepth(0.0);
@@ -307,29 +287,26 @@ find_ideal_mrd(GLdouble* ideal_mrd_near, GLdouble* ideal_mrd_far,
*ideal_mrd_near = window_coord_depth(far_dist)
- window_coord_depth(*next_to_near);
-} /* find_ideal_mrd */
+}
-double
+static double
read_depth(int x, int y)
{
GLuint depth;
- glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT,
- GL_UNSIGNED_INT, &depth);
+ glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, &depth);
- /*
- * This normalization of "depth" is correct even on 64-bit
+ /* This normalization of "depth" is correct even on 64-bit
* machines because GL types have machine-independent ranges.
*/
return ((double) depth) / 4294967295.0;
}
-void
-find_actual_mrd(GLdouble* next_to_near, GLdouble* next_to_far,
- GLdouble* actual_mrd_near, GLdouble* actual_mrd_far)
+static void
+find_actual_mrd(GLdouble *next_to_near, GLdouble *next_to_far,
+ GLdouble *actual_mrd_near, GLdouble *actual_mrd_far)
{
- /*
- * Here we use polygon offset to determine the
- * implementation's actual MRD.
+ /* Here we use polygon offset to determine the implementation's actual
+ * MRD.
*/
double base_depth;
@@ -337,7 +314,8 @@ find_actual_mrd(GLdouble* next_to_near, GLdouble* next_to_far,
glDepthFunc(GL_ALWAYS);
/* Draw a quad far away from the eye and read the depth at its
- * center: */
+ * center:
+ */
glDisable(GL_POLYGON_OFFSET_FILL);
draw_quad_at_distance(*next_to_far);
base_depth = read_depth(piglit_width/2, piglit_height/2);
@@ -347,9 +325,8 @@ find_actual_mrd(GLdouble* next_to_near, GLdouble* next_to_far,
glPolygonOffset(0.0, -1.0);
draw_quad_at_distance(*next_to_far);
- /*
- * The difference between the depths of the two quads is the
- * value the implementation is actually using for one MRD:
+ /* The difference between the depths of the two quads is the value the
+ * implementation is actually using for one MRD:
*/
*actual_mrd_far = base_depth
- read_depth(piglit_width/2, piglit_height/2);
@@ -357,15 +334,15 @@ find_actual_mrd(GLdouble* next_to_near, GLdouble* next_to_far,
/* Repeat the process for a quad close to the eye: */
glDisable(GL_POLYGON_OFFSET_FILL);
draw_quad_at_distance(*next_to_near);
- base_depth = read_depth(piglit_width/2, piglit_height/2);
+ base_depth = read_depth(piglit_width / 2, piglit_height / 2);
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(0.0, 1.0); /* 1 MRD further away */
draw_quad_at_distance(*next_to_near);
- *actual_mrd_near = read_depth(piglit_width/2, piglit_height/2)
+ *actual_mrd_near = read_depth(piglit_width / 2, piglit_height / 2)
- base_depth;
-} /* find_actual_mrd */
+}
-void
+static void
draw_2x2_quad(void)
{
glBegin(GL_QUADS);
@@ -376,12 +353,11 @@ draw_2x2_quad(void)
glEnd();
}
-bool
-check_slope_offset(struct angle_axis* aa, GLdouble* ideal_mrd_near)
+static bool
+check_slope_offset(const struct angle_axis *aa, GLdouble *ideal_mrd_near)
{
- /*
- * This function checks for correct slope-based offsets for
- * a quad rotated to a given angle around a given axis.
+ /* This function checks for correct slope-based offsets for a quad
+ * rotated to a given angle around a given axis.
*
* The basic strategy is to:
* Draw the quad. (Note: the quad's size and position
@@ -403,7 +379,6 @@ check_slope_offset(struct angle_axis* aa, GLdouble* ideal_mrd_near)
* (This verifies that the implementation is scaling
* the depth offset correctly.)
*/
-
const GLfloat quad_dist = 2.5; /* must be > 1+sqrt(2) to avoid */
/* clipping by the near plane */
GLdouble modelview_mat[16];
@@ -508,23 +483,19 @@ check_slope_offset(struct angle_axis* aa, GLdouble* ideal_mrd_near)
return true;
}
-bool
+static bool
check_slope_offsets(GLdouble* ideal_mrd_near)
{
- /*
- * This function checks that the implementation is offsetting
- * primitives correctly according to their depth slopes.
- * (Note that it uses some values computed by find_ideal_mrd, so
- * that function must be run first.)
+ /* This function checks that the implementation is offsetting
+ * primitives correctly according to their depth slopes. (Note that
+ * it uses some values computed by find_ideal_mrd, so that function
+ * must be run first.)
*/
- bool pass = true;
- int i;
+ unsigned i;
- /*
- * Rotation angles (degrees)
- * and axes for which offset will be checked
+ /* Rotation angles (degrees) and axes for which offset will be checked
*/
- struct angle_axis aa[] = {
+ static const struct angle_axis aa[] = {
{ 0, {1, 0, 0}},
{30, {1, 0, 0}},
{45, {1, 0, 0}},
@@ -547,19 +518,20 @@ check_slope_offsets(GLdouble* ideal_mrd_near)
{80, {2, 1, 0}}
};
- for (i = 0; pass && i < ARRAY_SIZE(aa); ++i)
- pass &= check_slope_offset(aa + i, ideal_mrd_near);
-
- return pass;
+ for (i = 0; i < ARRAY_SIZE(aa); ++i)
+ if (!check_slope_offset(aa + i, ideal_mrd_near))
+ return false;
+
+ return true;
} /* check_slope_offsets */
-void
+static void
log_mrd(double mrd, GLint dbits)
{
int bits;
bits = (int)(0.5 + (pow(2.0, dbits) - 1.0) * mrd);
printf("%e (nominally %i %s)\n", mrd, bits,
- (bits == 1)? "bit": "bits");
+ (bits == 1) ? "bit": "bits");
} /* log_mrd */
enum piglit_result
@@ -572,21 +544,17 @@ piglit_display(void)
bool big_enough_mrd, small_enough_mrd;
GLint dbits;
- /*
- * The following projection matrix places the near clipping
- * plane at distance 1.0, and the far clipping plane at
- * infinity. This allows us to stress depth-buffer resolution
- * as far away from the eye as possible, without introducing
- * code that depends on the size or format of the depth
- * buffer.
+ /* The following projection matrix places the near clipping plane at
+ * distance 1.0, and the far clipping plane at infinity. This allows
+ * us to stress depth-buffer resolution as far away from the eye as
+ * possible, without introducing code that depends on the size or
+ * format of the depth buffer.
*
- * (To derive this matrix, start with the matrix generated by
- * glFrustum with near-plane distance equal to 1.0, and take
- * the limit of the matrix elements as the far-plane distance
- * goes to infinity.)
+ * To derive this matrix, start with the matrix generated by glFrustum
+ * with near-plane distance equal to 1.0, and take the limit of the
+ * matrix elements as the far-plane distance goes to infinity.
*/
-
- static GLfloat near_1_far_infinity[] = {
+ static const GLfloat near_1_far_infinity[] = {
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, -1.0, -1.0,
@@ -644,18 +612,16 @@ piglit_display(void)
big_enough_mrd = (actual_mrd >= 0.99 * ideal_mrd);
small_enough_mrd = (actual_mrd <= 2.0 * ideal_mrd);
- pass &= big_enough_mrd;
- pass &= small_enough_mrd;
- pass &= check_slope_offsets(&ideal_mrd_near);
+ pass = big_enough_mrd && small_enough_mrd && pass;
+ pass = check_slope_offsets(&ideal_mrd_near) && pass;
/* Print the results */
- if (!big_enough_mrd)
- {
+ if (!big_enough_mrd) {
printf("\tActual MRD is too small ");
printf("(may cause incorrect results)\n");
}
- if (!small_enough_mrd)
- {
+
+ if (!small_enough_mrd) {
printf("\tActual MRD is too large ");
printf("(may waste depth-buffer range)\n\n");
}
@@ -672,4 +638,4 @@ piglit_display(void)
printf("\n");
return pass ? PIGLIT_PASS : PIGLIT_FAIL;
-} /* piglit_display */
+}