static void test_api_error(unsigned flags) { GLboolean skip_setup = !!(flags & SKIP_SETUP); GLboolean debug_enable = !!(flags & DEBUG_ENABLE); GLboolean callback_enable = !!(flags & CALLBACK_ENABLE); if (!skip_setup) { printf("Testing Debug %s and Callback %s\n", debug_enable ? "enabled" : "disabled", callback_enable ? "enabled" : "disabled"); glDebugMessageControlARB(GL_DEBUG_SOURCE_API_ARB, GL_DEBUG_TYPE_ERROR_ARB, GL_DEBUG_SEVERITY_HIGH_ARB, 0, NULL, debug_enable); glDebugMessageCallbackARB(callback_enable ? debug_callback : NULL, USER_PARAM); } else { puts("Testing defaults."); } if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); /* empty the log */ while (fetch_one_log_message()); callback_called = GL_FALSE; glEnable(0xFFFFFFFF); /* GL error */ if (!piglit_check_gl_error(GL_INVALID_ENUM)) piglit_report_result(PIGLIT_FAIL); if (callback_called != (callback_enable && debug_enable)) { puts(callback_called ? " The callback shouldn't have been called." : " The callback should have been called."); piglit_report_result(PIGLIT_FAIL); } if ((skip_setup || debug_enable) && !callback_enable) { /* the log must contain the error */ if (!fetch_one_log_message()) { puts(" The log shouldn't be empty."); piglit_report_result(PIGLIT_FAIL); } } else { /* the log must be empty */ if (fetch_one_log_message()) { puts(" The log should be empty."); piglit_report_result(PIGLIT_FAIL); } } if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); }
void piglit_init(int argc, char **argv) { bool pass = true; GetDebugMessageLog = GET_FUNC(glGetDebugMessageLog); DebugMessageInsert = GET_FUNC(glDebugMessageInsert); DebugMessageControl = GET_FUNC(glDebugMessageControl); PushDebugGroup = GET_FUNC(glPushDebugGroup); PopDebugGroup = GET_FUNC(glPopDebugGroup); piglit_require_extension("GL_KHR_debug"); glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); glEnable(GL_DEBUG_OUTPUT); if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); /* clear_message_log */ while(fetch_one_log_message()) /* empty */ ; /* test message control and debug groups */ pass = test_push_pop_debug_group(); pass = test_push_pop_group_inheritance() && pass; piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); }
/* * Test inheritance of group filtering (nesting) */ static bool test_push_pop_group_inheritance() { bool pass = true; GLuint allowedIds1[] = {MessageId1}; GLuint allowedIds2[] = {MessageId2}; GLuint allowedIds3[] = {MessageId3}; GLuint expectedIds1[] = {MessageId1}; GLuint expectedIds2[] = {MessageId1, MessageId2}; GLuint expectedIds3[] = {MessageId1, MessageId2, MessageId3}; puts("Testing Push debug group inheritance"); /* Setup of the default active debug group: Filter everything out */ DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_FALSE); /* Push debug group 1 and allow messages with the id 101*/ PushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 1, -1, "Push_Pop 1"); DebugMessageControl(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, GL_DONT_CARE, 1, allowedIds1, GL_TRUE); insert_inheritance_messages(); pass = check_inheritance_messages(1, expectedIds1); /* Push debug group 1 and allow messages with the id 101 and 202*/ PushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 1, -1, "Push_Pop 2"); DebugMessageControl(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, GL_DONT_CARE, 1, allowedIds2, GL_TRUE); insert_inheritance_messages(); pass = check_inheritance_messages(2, expectedIds2) && pass; /* Push debug group 1 and allow messages with the id 101, 202 and 303*/ PushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 1, -1, "Push_Pop 3"); DebugMessageControl(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, GL_DONT_CARE, 1, allowedIds3, GL_TRUE); insert_inheritance_messages(); pass = check_inheritance_messages(3, expectedIds3) && pass; puts("Testing Pop debug group inheritance"); /* Pop debug group 3 */ PopDebugGroup(); insert_inheritance_messages(); pass = check_inheritance_messages(2, expectedIds2) && pass; /* Pop debug group 2 */ PopDebugGroup(); insert_inheritance_messages(); pass = check_inheritance_messages(1, expectedIds1) && pass; /* Pop group 1, restore the volume control of the default debug group. */ PopDebugGroup(); insert_inheritance_messages(); /* check message log is empty, all messages should have been filtered */ if (fetch_one_log_message()) { fprintf(stderr, "The message log should be empty\n"); pass = false; } return pass; }