enum piglit_result piglit_display(void) { GLint64 t1, t2; GLint64 query_overhead, get_overhead, tolerance; GLuint q; glGenQueries(1, &q); /* this creates the query in the driver */ get_gpu_time_via_query(q); /* compute a reasonable tolerance based on driver overhead */ t1 = get_cpu_time(); get_gpu_time_via_query(q); query_overhead = get_cpu_time() - t1; t1 = get_cpu_time(); get_gpu_time_via_get(q); get_overhead = get_cpu_time() - t1; printf("glGet overhead: %llu us\n", (unsigned long long) get_overhead / 1000); printf("glQuery overhead: %llu us\n", (unsigned long long) query_overhead / 1000); /* minimum tolerance is 3 ms */ tolerance = query_overhead + get_overhead + 3000000; /* do testing */ puts("Test: first glQuery, then glGet"); t1 = get_gpu_time_via_query(q); t2 = get_gpu_time_via_get(q); validate_times(t1, t2, tolerance); usleep(10000); puts("Test: first glGet, then glQuery"); t1 = get_gpu_time_via_get(q); t2 = get_gpu_time_via_query(q); validate_times(t1, t2, tolerance); glDeleteQueries(1, &q); return PIGLIT_PASS; }
enum piglit_result piglit_display(void) { GLint64 t1, t2; GLint64 query_overhead, get_overhead, tolerance; GLuint q; int64_t delay; glGenQueries(1, &q); /* this creates the query in the driver */ get_gpu_time_via_query(q); /* compute a reasonable tolerance based on driver overhead */ t1 = piglit_time_get_nano(); get_gpu_time_via_query(q); query_overhead = piglit_time_get_nano() - t1; t1 = piglit_time_get_nano(); get_gpu_time_via_get(q); get_overhead = piglit_time_get_nano() - t1; printf("glGet overhead: %" PRIu64 " us\n", (uint64_t) get_overhead / 1000); printf("glQuery overhead: %" PRIu64 " us\n", (uint64_t) query_overhead / 1000); /* minimum tolerance is 3 ms */ tolerance = query_overhead + get_overhead + 3000000; /* do testing */ puts("Test: first glQuery, then glGet"); t1 = get_gpu_time_via_query(q); t2 = get_gpu_time_via_get(q); validate_times(t1, t2, tolerance); usleep(10000); puts("Test: first glGet, then glQuery"); t1 = get_gpu_time_via_get(q); t2 = get_gpu_time_via_query(q); validate_times(t1, t2, tolerance); puts("Test: wall clock time via glQuery"); t1 = get_gpu_time_via_query(q); delay = piglit_delay_ns(1000000000); t2 = get_gpu_time_via_query(q); validate_delta(t1, t2, delay); puts("Test: wall clock time via glGet"); t1 = get_gpu_time_via_get(q); delay = piglit_delay_ns(1000000000); t2 = get_gpu_time_via_get(q); validate_delta(t1, t2, delay); glDeleteQueries(1, &q); return PIGLIT_PASS; }