void piglit_init(int argc, char **argv)
{
	GLint vert[2];
	GLint prog;
	GLboolean ok;

	piglit_require_gl_version(20);

	piglit_require_extension("GL_ARB_explicit_attrib_location");

	vert[0] =
		piglit_compile_shader(GL_VERTEX_SHADER,
				      "shaders/glsl-explicit-location-03a.vert");
	vert[1] =
		piglit_compile_shader(GL_VERTEX_SHADER,
				      "shaders/glsl-explicit-location-03b.vert");
	prog = glCreateProgram();
	glAttachShader(prog, vert[0]);
	glAttachShader(prog, vert[1]);
	glLinkProgram(prog);

	ok = piglit_link_check_status_quiet(prog);
	if (ok)
		fprintf(stderr,
			"Linking with conflicting explicit locations "
			"succeeded when it should have failed.\n");

	piglit_report_result(!ok ? PIGLIT_PASS : PIGLIT_FAIL);
}
Exemple #2
0
void
piglit_init(int argc, char **argv)
{
	GLint vs, fs;

	/* Set up projection matrix so we can just draw using window
	 * coordinates.
	 */
	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	if (piglit_get_gl_version() < 20) {
		printf("Requires OpenGL 2.0\n");
		piglit_report_result(PIGLIT_SKIP);
	}

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-mvp.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-fs-loop-nested.frag");

	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);

	color_location = glGetUniformLocation(prog, "color");
}
void piglit_init(int argc, char **argv)
{
	GLint vert[3];
	GLint prog_a;
	GLint prog_b;
	GLint prog_c;
	GLint prog_d;

	piglit_require_gl_version(20);

	vert[0] =
		piglit_compile_shader(GL_VERTEX_SHADER,
				      "shaders/glsl-link-initializer-01a.vert");
	vert[1] =
		piglit_compile_shader(GL_VERTEX_SHADER,
				      "shaders/glsl-link-initializer-01b.vert");
	vert[2] =
		piglit_compile_shader(GL_VERTEX_SHADER,
				      "shaders/glsl-link-initializer-01c.vert");
	prog_a = piglit_link_simple_program(vert[0], vert[1]);
	prog_b = piglit_link_simple_program(vert[1], vert[0]);
	prog_c = piglit_link_simple_program(vert[0], vert[2]);
	prog_d = piglit_link_simple_program(vert[2], vert[0]);

	/* piglit_link_simple_program() returns 0 on link failure.  So
	 * verify that there was no link failure by simply checking
	 * that two programs were returned.
	 */
	piglit_report_result((prog_a && prog_b && prog_c && prog_d)
			     ? PIGLIT_PASS : PIGLIT_FAIL);
}
void
piglit_init(int argc, char **argv)
{
	GLboolean pass = GL_TRUE;
	GLint vs, fs, num;
	GLint expect;

	if (argc < 3) {
		printf("Usage: %s <vertex shader file> "
		       "<expected uniform count>\n", argv[0]);
		piglit_report_result(PIGLIT_FAIL);
	}

	expect = (int) strtol(argv[2], NULL, 0);

	piglit_require_GLSL();
	vs = piglit_compile_shader(GL_VERTEX_SHADER, argv[1]);
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-color.frag");

	prog = piglit_link_simple_program(vs, fs);

	glGetProgramiv(prog, GL_ACTIVE_UNIFORMS, &num);
	if (num != expect) {
		printf("Unexpected active uniform count "
		       "(saw %d, expected %d)\n", num, expect);
		pass = GL_FALSE;
	}

	if (pass)
		piglit_report_result(PIGLIT_PASS);
	else
		piglit_report_result(PIGLIT_FAIL);
}
Exemple #5
0
void
piglit_init(int argc, char **argv)
{
	GLuint vs, fs;

	if (piglit_get_gl_version() < 20) {
		printf("Requires OpenGL 2.0\n");
		piglit_report_result(PIGLIT_SKIP);
	}

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-color-mvp.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-color.frag");

	prog = piglit_link_simple_program(vs, fs);

	glDeleteShader(vs);
	glDeleteShader(fs);

	/* Don't try to render if the program failed to link, and linking
	 * had better succeed!
	 */
	if (!piglit_link_check_status(prog))
		piglit_report_result(PIGLIT_FAIL);

	glUseProgram(prog);
}
Exemple #6
0
void
piglit_init(int argc, char **argv)
{
    GLint vs, fs;

    if (piglit_get_gl_version() < 20) {
        printf("Requires OpenGL 2.0\n");
        piglit_report_result(PIGLIT_SKIP);
    }

    piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

    vs = piglit_compile_shader(GL_VERTEX_SHADER,
                               "shaders/glsl-mvp.vert");
    fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
                               "shaders/glsl-fs-mix.frag");

    prog = piglit_link_simple_program(vs, fs);

    glUseProgram(prog);

    args1_location = glGetUniformLocation(prog, "args1");
    args2_location = glGetUniformLocation(prog, "args2");
    args3_location = glGetUniformLocation(prog, "args3");
}
void
piglit_init(int argc, char **argv)
{
	GLboolean pass = GL_TRUE;
	GLint vs, fs, len, ret_len;
	GLenum type;
	char *name;
	GLsizei size;

	if (piglit_get_gl_version() < 20) {
		printf("Requires OpenGL 2.0\n");
		piglit_report_result(PIGLIT_SKIP);
	}

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-getactiveuniform-length.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-color.frag");

	prog = piglit_link_simple_program(vs, fs);

	/* From page 261 (page 275 of the PDF) of the OpenGL 2.1 specification:
	 *
	 *     If pname is ACTIVE UNIFORM MAX LENGTH, the length of
	 *     the longest active uniform name, including a null
	 *     terminator, is returned.
	 */

	glGetProgramiv(prog, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len);
	if (len != strlen("color") + 1) {
		printf("Unexpected max active uniform length "
		       "(saw %d, expected %lu)\n", len, (unsigned long) strlen("color") + 1);
		pass = GL_FALSE;
	}

	/* From page 80 (page 88 of the PDF) of the OpenGL 2.1 specification:
	 *
	 *     The actual number of characters written into name,
	 *     excluding the null terminator, is returned in length.
	 */
	name = malloc(len);
	glGetActiveUniform(prog, 0, len + 20, &ret_len, &size, &type, name);
	if (ret_len != strlen("color")) {
		printf("Unexpected active uniform length "
		       "(saw %d, expected %lu) for \"%s\"\n",
		       ret_len, (unsigned long) strlen("color"), name);
		pass = GL_FALSE;
	}


	if (pass)
		piglit_report_result(PIGLIT_PASS);
	else
		piglit_report_result(PIGLIT_FAIL);
}
Exemple #8
0
void
piglit_init(int argc, char **argv)
{
	GLint vs, fs;

	piglit_require_gl_version(20);
	piglit_require_extension("GL_EXT_framebuffer_object");

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-mvp.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-fs-fragcoord.frag");

	prog = piglit_link_simple_program(vs, fs);
}
void piglit_init(int argc, char **argv)
{
	GLint vert;
	GLint prog;
	GLboolean ok;

	piglit_require_gl_version(20);

	piglit_require_extension("GL_ARB_explicit_attrib_location");

	vert = piglit_compile_shader(GL_VERTEX_SHADER,
				     "shaders/glsl-explicit-location-01.vert");
	prog = glCreateProgram();
	glAttachShader(prog, vert);
	glLinkProgram(prog);

	ok = piglit_link_check_status(prog);
	if (ok) {
		GLint loc = glGetAttribLocation(prog, "vertex");

		if (loc != 0) {
			fprintf(stderr,
				"Expected location of 'vertex' to be 0, got "
				"%d instead.\n", loc);
			ok = GL_FALSE;
		}

	}

	piglit_report_result(ok ? PIGLIT_PASS : PIGLIT_FAIL);
}
Exemple #10
0
void
piglit_init(int argc, char **argv)
{
    GLint vs;
    GLint point_size_range[2];

    if (piglit_get_gl_version() < 20) {
        printf("Requires OpenGL 2.0\n");
        piglit_report_result(PIGLIT_SKIP);
    }
    /* If the driver doesn't claim to support the point size the
       shader is going to set then we should skip the test */
    glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_size_range);
    if (POINT_SIZE < point_size_range[0] ||
            POINT_SIZE > point_size_range[1]) {
        printf("Point size %i not supported\n", POINT_SIZE);
        piglit_report_result(PIGLIT_SKIP);
    }

    piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
    glClearColor(0.0, 0.0, 0.0, 1.0);

    vs = piglit_compile_shader(GL_VERTEX_SHADER,
                               "shaders/glsl-vs-point-size.vert");

    prog = piglit_link_simple_program(vs, 0);

    glUseProgram(prog);

    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
}
void
piglit_init(int argc, char **argv)
{
	GLint vs, fs;

	piglit_require_gl_version(20);

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-mvp.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-fs-fragcoord.frag");

	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);
}
void
piglit_init(int argc, char **argv)
{
	GLboolean pass = GL_TRUE;
	GLint vs, fs, len;
	char *name;
	GLsizei size;
	GLenum type;

	piglit_require_gl_version(20);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-getactiveuniform-array-size.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-color.frag");

	prog = piglit_link_simple_program(vs, fs);

	glGetProgramiv(prog, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len);
	name = malloc(len + 20);

	glGetActiveUniform(prog, 0, len + 20, &len, &size, &type, name);

	/* From page 81 (page 89 of the PDF) of the OpenGL 2.1 specification:
	 *
	 *     If one or more elements of an array are active,
	 *     GetActiveUniform will return the name of the array in
	 *     name, subject to the restrictions listed above. The
	 *     type of the array is returned in type. The size
	 *     parameter contains the highest array element index
	 *     used, plus one.
	 */

	if (size != 25) {
		printf("Unexpected active uniform size "
		       "(saw %d, expected %d)\n", size, 25);
		pass = GL_FALSE;
	}

	if (pass)
		piglit_report_result(PIGLIT_PASS);
	else
		piglit_report_result(PIGLIT_FAIL);
}
void piglit_init(int argc, char **argv)
{
	GLint vs, fs;
	int loc;

	piglit_require_gl_version(20);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-vs-texturematrix-1.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-tex.frag");

	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);

	loc = glGetUniformLocation(prog, "sampler");
	glUniform1i(loc, 1);
}
void piglit_init(int argc, char **argv)
{
	GLint vs, fs;

	piglit_require_gl_version(20);

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-vs-if-bool.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-color.frag");

	prog = piglit_link_simple_program(vs, fs);

	red_location = glGetUniformLocation(prog, "red");

	glUseProgram(prog);
}
void
piglit_init(int argc, char **argv)
{
	GLint vs, fs;

	piglit_require_gl_version(20);

	piglit_require_extension("GL_ARB_fragment_coord_conventions");

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-mvp.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-arb-fragment-coord-conventions-define.frag");

	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);
}
void
piglit_init(int argc, char **argv)
{
	GLint vs, fs;

	/* Set up projection matrix so we can just draw using window
	 * coordinates.
	 */
	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	piglit_require_gl_version(20);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-vs-loop-nested.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-color.frag");

	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);
}
void
piglit_init(int argc, char **argv)
{
	GLint vs, fs;

	piglit_require_gl_version(20);

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-mvp.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-fs-sqrt-branch.frag");

	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);

	args1_location = glGetUniformLocation(prog, "args1");
	args2_location = glGetUniformLocation(prog, "args2");
}
void
piglit_init(int argc, char **argv)
{
	GLint vs, fs, prog;
	const char *fs_source =
		"void main()\n"
		"{\n"
		"	gl_FragColor = gl_Fog.color;\n"
		"}\n";

	if (piglit_get_gl_version() < 20) {
		printf("Requires OpenGL 2.0\n");
		piglit_report_result(PIGLIT_SKIP);
	}

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-mvp.vert");
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);

	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);
}
void piglit_init(int argc, char **argv)
{
	GLint program;
	bool expect = false;
	bool result;
	unsigned i;
	const char *invalid_file = NULL;

	piglit_require_gl_version(20);

	piglit_require_GLSL();
	program = glCreateProgram();

	for (i = 1; i < argc; i++) {
		size_t len;
		GLint shader;
		GLenum target;

		if (strcmp(argv[i], "pass") == 0) {
			expect = true;
			break;
		}

		if (strcmp(argv[i], "fail") == 0) {
			expect = false;
			break;
		}

		/* Expect that the name is at least one character plus
		 * ".vert", ".geom", or ".frag"
		 */
		len = strlen(argv[i]);
		if (len < 6) {
			invalid_file = argv[i];
			break;
		}

		if (strcmp(argv[i] + len - 5, ".vert") == 0) {
			target = GL_VERTEX_SHADER;
		} else if (strcmp(argv[i] + len - 5, ".geom") == 0) {
			target = GL_GEOMETRY_SHADER;
			if (piglit_get_gl_version() < 32 && !piglit_is_extension_supported("GL_ARB_geometry_shader4")) {
				printf("Requires geometry shaders.\n");
				piglit_report_result(PIGLIT_SKIP);
			}
		} else if (strcmp(argv[i] + len - 5, ".frag") == 0) {
			target = GL_FRAGMENT_SHADER;
		} else {
			invalid_file = argv[i];
			break;
		}

		shader = piglit_compile_shader(target, argv[i]);
		glAttachShader(program, shader);
		glDeleteShader(shader);
	}

	/* The loop above will break when an option of either 'pass' or 'fail'
	 * is encountered.  If this happens at the last commandline argument,
	 * the loop counter will be (argc-1).  Any other value is an error.
	 */
	if (i != (argc - 1)) {
		fprintf(stderr, "Last command line option must be either "
			"\"pass\" or \"fail\".\n");
		piglit_report_result(PIGLIT_FAIL);
	}

	if (invalid_file != NULL) {
		fprintf(stderr, "Invalid shader file name \"%s\".\n",
			invalid_file);
		piglit_report_result(PIGLIT_FAIL);
	}

	glLinkProgram(program);

	result = piglit_link_check_status_quiet(program);
	if (result != expect)
		fprintf(stderr,
			"Program should have %s linking, but "
			"it was (incorrectly) %s.\n",
			expect ? "succeeded" : "failed",
			expect ? "unsuccesful" : "succesful");

	piglit_report_result((result == expect) ? PIGLIT_PASS : PIGLIT_FAIL);
}
void
piglit_init(int argc, char **argv)
{
	GLboolean pass = GL_TRUE;
	GLint vs, fs, len, ret_len;
	GLenum type;
	char *name;
	GLsizei size;

	/* OpenGL ES 3.0 and OpenGL 4.2 require that the "[0]" be appended to
	 * the name.  Earlier versions of the spec are ambiguous.  Accept
	 * either name.
	 */
	const size_t scalar_length = strlen("color");
	const size_t array_length = strlen("color[0]");

	piglit_require_gl_version(20);

	vs = piglit_compile_shader(GL_VERTEX_SHADER,
				   "shaders/glsl-getactiveuniform-length.vert");
	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
				   "shaders/glsl-color.frag");

	prog = piglit_link_simple_program(vs, fs);

	/* From page 261 (page 275 of the PDF) of the OpenGL 2.1 specification:
	 *
	 *     If pname is ACTIVE UNIFORM MAX LENGTH, the length of
	 *     the longest active uniform name, including a null
	 *     terminator, is returned.
	 */

	glGetProgramiv(prog, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len);
	if (len != (scalar_length + 1) && len != (array_length + 1)) {
		printf("Unexpected max active uniform length "
		       "(saw %d, expected %lu or %lu)\n", len,
		       (unsigned long) scalar_length,
		       (unsigned long) array_length);
		pass = GL_FALSE;
	}

	/* From page 80 (page 88 of the PDF) of the OpenGL 2.1 specification:
	 *
	 *     The actual number of characters written into name,
	 *     excluding the null terminator, is returned in length.
	 */
	name = malloc(len);
	glGetActiveUniform(prog, 0, len + 20, &ret_len, &size, &type, name);

	if (ret_len != scalar_length && ret_len != array_length) {
		printf("Unexpected active uniform length "
		       "(saw %d, expected %lu or %lu) for \"%s\"\n",
		       ret_len,
		       (unsigned long) scalar_length,
		       (unsigned long) array_length,
		       name);
		pass = GL_FALSE;
	}


	if (pass)
		piglit_report_result(PIGLIT_PASS);
	else
		piglit_report_result(PIGLIT_FAIL);
}