From: Marek Olšák <marek.ol...@amd.com>
the sRGB test is unrealistic
---
tests/perf/drawoverhead.c | 63 +++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 61 insertions(+), 2 deletions(-)
diff --git a/tests/perf/drawoverhead.c b/tests/perf/drawoverhead.c
index 76aed20..9afd3d0 100644
--- a/tests/perf/drawoverhead.c
+++ b/tests/perf/drawoverhead.c
@@ -341,20 +341,69 @@ draw_state_change(unsigned count)
glEnable(enable_enum);
else
glDisable(enable_enum);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
}
glDisable(enable_enum);
}
static void
+draw_scissor_change(unsigned count)
+{
+ unsigned i;
+ glEnable(GL_SCISSOR_TEST);
+ if (indexed) {
+ for (i = 0; i < count; i++) {
+ if (i & 1)
+ glScissor(0, 0, piglit_width / 2, piglit_height
/ 2);
+ else
+ glScissor(0, 0, piglit_width, piglit_height);
+ glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, NULL);
+ }
+ } else {
+ for (i = 0; i < count; i++) {
+ if (i & 1)
+ glScissor(0, 0, piglit_width / 2, piglit_height
/ 2);
+ else
+ glScissor(0, 0, piglit_width, piglit_height);
+ glDrawArrays(GL_TRIANGLES, 0, 3);
+ }
+ }
+ glDisable(GL_SCISSOR_TEST);
+}
+
+static void
+draw_viewport_change(unsigned count)
+{
+ unsigned i;
+ if (indexed) {
+ for (i = 0; i < count; i++) {
+ if (i & 1)
+ glViewport(0, 0, piglit_width / 2,
piglit_height / 2);
+ else
+ glViewport(0, 0, piglit_width, piglit_height);
+ glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, NULL);
+ }
+ } else {
+ for (i = 0; i < count; i++) {
+ if (i & 1)
+ glViewport(0, 0, piglit_width / 2,
piglit_height / 2);
+ else
+ glViewport(0, 0, piglit_width, piglit_height);
+ glDrawArrays(GL_TRIANGLES, 0, 3);
+ }
+ }
+ glViewport(0, 0, piglit_width, piglit_height);
+}
+
+static void
draw_vertex_attrib_change(unsigned count)
{
unsigned i;
if (indexed) {
for (i = 0; i < count; i++) {
if (i & 1)
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,
3 * sizeof(float), NULL);
else
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
@@ -384,42 +433,47 @@ static double
perf_run(const char *call, unsigned num_vbos, unsigned num_ubos,
unsigned num_textures, const char *change, perf_rate_func f,
double base_rate)
{
double rate = perf_measure_rate(f);
double ratio = base_rate ? rate / base_rate : 1;
printf(" %s (%2u VBOs, %u UBOs, %2u Tex) w/ %s change:%*s"
COLOR_CYAN "%s" COLOR_RESET " %s(%.1f%%)" COLOR_RESET "\n",
call, num_vbos, num_ubos, num_textures, change,
- MAX2(18 - (int)strlen(change), 0), "",
+ MAX2(24 - (int)strlen(change), 0), "",
perf_human_float(rate),
base_rate == 0 ? COLOR_RESET :
ratio > 0.7 ? COLOR_GREEN :
ratio > 0.4 ? COLOR_YELLOW : COLOR_RED,
100 * ratio);
return rate;
}
struct enable_state_t {
GLenum enable;
const char *name;
};
static struct enable_state_t enable_states[] = {
+ {GL_PRIMITIVE_RESTART, "primitive restart enable"},
{GL_BLEND, "blend enable"},
{GL_DEPTH_TEST, "depth enable"},
+ {GL_DEPTH_CLAMP, "depth clamp enable"},
{GL_STENCIL_TEST, "stencil enable"},
{GL_SCISSOR_TEST, "scissor enable"},
{GL_MULTISAMPLE, "MSAA enable"},
+ {GL_SAMPLE_MASK, "sample mask enable"},
+ {GL_SAMPLE_ALPHA_TO_COVERAGE, "alpha-to-coverage enable"},
+ {GL_SAMPLE_SHADING, "sample shading enable"},
{GL_CULL_FACE, "cull face enable"},
- {GL_FRAMEBUFFER_SRGB, "FB sRGB enable"},
+ {GL_CLIP_DISTANCE0, "clip distance enable"},
};
static void
perf_draw_variant(const char *call, bool is_indexed)
{
double base_rate = 0;
unsigned num_vbos, num_ubos, num_textures;
indexed = is_indexed;
@@ -467,20 +521,25 @@ perf_draw_variant(const char *call, bool is_indexed)
uniform_loc = glGetUniformLocation(prog[0], "u");
perf_run(call, num_vbos, num_ubos, num_textures, "few uniforms /
1",
draw_uniform_change, base_rate);
glUseProgram(prog[1]);
uniform_loc = glGetUniformLocation(prog[1], "u");
perf_run(call, num_vbos, num_ubos, num_textures, "many uniforms /
1",
draw_uniform_change, base_rate);
glUseProgram(prog[0]);
+ perf_run(call, num_vbos, num_ubos, num_textures, "scissor",
+ draw_scissor_change, base_rate);
+ perf_run(call, num_vbos, num_ubos, num_textures, "viewport",
+ draw_viewport_change, base_rate);
+
for (int state = 0; state < ARRAY_SIZE(enable_states); state++)
{
enable_enum = enable_states[state].enable;
perf_run(call, num_vbos, num_ubos, num_textures,
enable_states[state].name,
draw_state_change, base_rate);
}
}
}
/** Called from test harness/main */