enum piglit_result piglit_display(void) { bool pass = true; GLint max_vs, max_fs, max_combined; piglit_require_extension("GL_ARB_uniform_buffer_object"); glGetIntegerv(GL_MAX_VERTEX_UNIFORM_BLOCKS, &max_vs); glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_BLOCKS, &max_fs); glGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, &max_combined); printf("Max VS uniform blocks: %d\n", max_vs); printf("Max FS uniform blocks: %d\n", max_fs); printf("Max combined uniform blocks: %d\n", max_combined); glClearColor(0.5, 0.5, 0.5, 0.5); glClear(GL_COLOR_BUFFER_BIT); pass = fail_link_test("vs", max_vs + 1, "vs", 0) && pass; pass = fail_link_test("fs", 0, "fs", max_fs + 1) && pass; if (max_vs + max_fs > max_combined) { pass = fail_link_test("vs", max_vs, "fs", max_combined + 1 - max_vs) && pass; pass = fail_link_test("shared", max_vs, "shared", max_combined + 1 - max_vs) && pass; } pass = pass_link_test(0, "vs", max_vs, "vs", 0) && pass; pass = pass_link_test(1, "fs", 0, "fs", max_fs) && pass; pass = pass_link_test(2, "vs", max_vs, "fs", MIN2(max_fs, max_combined - max_vs)) && pass; pass = pass_link_test(3, "shared", max_vs, "shared", MIN2(max_fs, max_combined - max_vs)) && pass; piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
enum piglit_result piglit_display(void) { bool pass = true; GLint max_vs, max_fs, max_combined, max_combined_out; piglit_require_extension("GL_ARB_shader_storage_buffer_object"); piglit_require_extension("GL_ARB_program_interface_query"); glGetIntegerv(GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, &max_vs); glGetIntegerv(GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, &max_fs); glGetIntegerv(GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, &max_combined); glGetIntegerv(GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, &max_combined_out); if (!piglit_check_gl_error(GL_NO_ERROR)) return PIGLIT_FAIL; printf("Max VS shader storage blocks: %d\n", max_vs); printf("Max FS shader storage blocks: %d\n", max_fs); printf("Max combined shader storage blocks: %d\n", max_combined); printf("Max combined shader output resources: %d\n", max_combined_out); glClearColor(0.5, 0.5, 0.5, 0.5); glClear(GL_COLOR_BUFFER_BIT); pass = fail_link_test("vs", max_vs + 1, "vs", 0) && pass; pass = fail_link_test("fs", 0, "fs", max_fs + 1) && pass; if (max_vs + max_fs > max_combined) { pass = fail_link_test("vs", max_vs, "fs", max_combined + 1 - max_vs) && pass; pass = fail_link_test("shared", max_vs, "shared", max_combined + 1 - max_vs) && pass; } if (max_combined_out) { pass = fail_link_test("vs", max_vs, "fs", max_combined_out + 1 - max_vs) && pass; pass = fail_link_test("shared", max_vs, "shared", max_combined_out + 1 - max_vs) && pass; } pass = pass_link_test(0, "vs", max_vs, "vs", 0) && pass; pass = pass_link_test(1, "fs", 0, "fs", max_fs) && pass; pass = pass_link_test(2, "vs", max_vs, "fs", MIN2(max_fs, max_combined - max_vs)) && pass; pass = pass_link_test(3, "shared", max_vs, "shared", MIN2(max_fs, max_combined - max_vs)) && pass; if (max_combined_out) { pass = pass_link_test(4, "shared", max_vs, "shared", MIN2(max_fs, max_combined - max_vs)) && pass; } piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }