diff options
author | Marek Olšák <marek.olsak@amd.com> | 2022-06-05 21:59:34 -0400 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2022-07-21 13:11:39 -0400 |
commit | 263032b859f47df673eb3ce4f5465ba61aecd8e8 (patch) | |
tree | 5dcf5842a4cd31a260d1d430d26b95a600dbc7b9 /tests | |
parent | c107462e4e429fa1cf6daac39168674c1c0c9fd4 (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.c | 31 |
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; } |