summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2022-06-05 21:59:34 -0400
committerMarek Olšák <marek.olsak@amd.com>2022-07-21 13:11:39 -0400
commit263032b859f47df673eb3ce4f5465ba61aecd8e8 (patch)
tree5dcf5842a4cd31a260d1d430d26b95a600dbc7b9 /tests
parentc107462e4e429fa1cf6daac39168674c1c0c9fd4 (diff)
arb_compute_variable_group_size/errors: fix a hang when increasing limits
Without this fix, glGetIntegerv can report INT_MAX, which won't return an error because it's not more than UINT32_MAX, so it will start a dispatch of (INT_MAX+1)^3, which is long enough to be treated as a hang. Part-of: <https://gitlab.freedesktop.org/mesa/piglit/-/merge_requests/695>
Diffstat (limited to 'tests')
-rw-r--r--tests/spec/arb_compute_variable_group_size/errors.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/tests/spec/arb_compute_variable_group_size/errors.c b/tests/spec/arb_compute_variable_group_size/errors.c
index 5275daff4..4a5717a98 100644
--- a/tests/spec/arb_compute_variable_group_size/errors.c
+++ b/tests/spec/arb_compute_variable_group_size/errors.c
@@ -135,7 +135,8 @@ use_fixed_work_group_size(void *data)
static enum piglit_result
use_invalid_work_group_count_values(void *data)
{
- GLint prog, v[3];
+ GLuint prog;
+ GLint64 v[3];
/* The ARB_compute_variable_group_size spec says:
*
@@ -148,13 +149,29 @@ use_invalid_work_group_count_values(void *data)
glUseProgram(prog);
/* Use values greater than the maximum work group count. */
- glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 0, &v[0]);
- glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 1, &v[1]);
- glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 2, &v[2]);
+ glGetInteger64i_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 0, &v[0]);
+ glGetInteger64i_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 1, &v[1]);
+ glGetInteger64i_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 2, &v[2]);
+
+ /* Test 1 dimension at a time. */
+ if (v[0] < UINT32_MAX) {
+ glDispatchComputeGroupSizeARB(v[0] + 1, 1, 1, 1, 1, 1);
+ if (!piglit_check_gl_error(GL_INVALID_VALUE))
+ return PIGLIT_FAIL;
+ }
+
+ if (v[1] < UINT32_MAX) {
+ glDispatchComputeGroupSizeARB(1, v[1] + 1, 1, 1, 1, 1);
+ if (!piglit_check_gl_error(GL_INVALID_VALUE))
+ return PIGLIT_FAIL;
+ }
+
+ if (v[2] < UINT32_MAX) {
+ glDispatchComputeGroupSizeARB(1, 1, v[2] + 1, 1, 1, 1);
+ if (!piglit_check_gl_error(GL_INVALID_VALUE))
+ return PIGLIT_FAIL;
+ }
- glDispatchComputeGroupSizeARB(v[0] + 1, v[1] + 1, v[2] + 1, 1, 1, 1);
- if (!piglit_check_gl_error(GL_INVALID_VALUE))
- return PIGLIT_FAIL;
return PIGLIT_PASS;
}