Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
/*
 * 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;
}