コード例 #1
0
ファイル: instanced_arrays.c プロジェクト: nobled/piglit
void
piglit_init(int argc, char **argv)
{
   piglit_require_GLSL();
   piglit_require_extension("GL_ARB_instanced_arrays");

   VertShader = piglit_compile_shader_text(GL_VERTEX_SHADER, VertShaderText);
   assert(VertShader);

   FragShader = piglit_compile_shader_text(GL_FRAGMENT_SHADER, FragShaderText);
   assert(FragShader);

   Program = piglit_link_simple_program(VertShader, FragShader);

   glUseProgram(Program);

   PosAttrib = glGetAttribLocation(Program, "Pos");
   ColorAttrib = glGetAttribLocation(Program, "Color");

   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glFrustum(-5, 5, -5, 5, 10, 20);

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   glTranslatef(0, 0, -11.0);
   glScalef(0.5, 0.5, 1.0);
}
コード例 #2
0
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);
}
コード例 #3
0
ファイル: separate.c プロジェクト: blaztinn/piglit
void piglit_init(int argc, char **argv)
{
	GLuint vs;
	GLint maxcomps, maxattrs;
	unsigned i;

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	/* Check the driver. */
	if (piglit_get_gl_version() < 15) {
		fprintf(stderr, "OpenGL 1.5 required.\n");
		piglit_report_result(PIGLIT_SKIP);
	}
	piglit_require_GLSL();
	piglit_require_transform_feedback();

	glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT, &maxattrs);
	if (maxattrs < 4) {
		fprintf(stderr, "Not enough separate attribs supported by transform feedback.\n");
		piglit_report_result(PIGLIT_SKIP);
	}
	glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT, &maxcomps);
	if (maxcomps < 4) {
		fprintf(stderr, "Not enough separate components supported by transform feedback.\n");
		piglit_report_result(PIGLIT_SKIP);
	}

	/* Create shaders. */
	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
	prog = piglit_CreateProgram();
	piglit_AttachShader(prog, vs);
	piglit_TransformFeedbackVaryings(prog, sizeof(varyings)/sizeof(varyings[0]),
					 varyings, GL_SEPARATE_ATTRIBS_EXT);
	piglit_LinkProgram(prog);
	if (!piglit_link_check_status(prog)) {
		piglit_DeleteProgram(prog);
		piglit_report_result(PIGLIT_FAIL);
	}

	/* Set up the transform feedback buffer. */
	glGenBuffers(4, buf);
	for (i = 0; i < 4; i++) {
		unsigned j;
		float *ptr;
		glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER_EXT, buf[i]);
		glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER_EXT,
			     NUM_OUT_VERTICES*4*sizeof(float), NULL, GL_STREAM_READ);
		ptr = glMapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER_EXT, GL_WRITE_ONLY);
		for (j = 0; j < NUM_OUT_VERTICES*4; j++) {
			ptr[j] = 0.123456;
		}
		glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER_EXT);
		piglit_BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER_EXT, i, buf[i]);
	}

	assert(glGetError() == 0);

	glClearColor(0.2, 0.2, 0.2, 1.0);
	glEnableClientState(GL_VERTEX_ARRAY);
}
コード例 #4
0
ファイル: overflow-edge-cases.c プロジェクト: nobled/piglit
void
piglit_init(int argc, char **argv)
{
	GLuint vs;
	int num_varyings;

	piglit_require_GLSL();
	piglit_require_transform_feedback();

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
	for (num_varyings = 1; num_varyings <= 2; ++num_varyings) {
		GLuint prog = piglit_CreateProgram();
		piglit_AttachShader(prog, vs);
		piglit_BindAttribLocation(prog, 0, "vertex_num");
		piglit_TransformFeedbackVaryings(prog, num_varyings, varyings,
						 GL_INTERLEAVED_ATTRIBS);
		piglit_LinkProgram(prog);
		if (!piglit_link_check_status(prog)) {
			piglit_DeleteProgram(prog);
			piglit_report_result(PIGLIT_FAIL);
		}
		progs[num_varyings - 1] = prog;
	}

	glGenBuffers(1, &xfb_buf);
	glGenQueries(1, &query_prims_generated);
	glGenQueries(1, &query_prims_written);
}
コード例 #5
0
ファイル: instanced_arrays.c プロジェクト: kphillisjr/piglit
void
piglit_init(int argc, char **argv)
{
    piglit_require_GLSL();
    piglit_require_extension("GL_ARB_instanced_arrays");

    Program = piglit_build_simple_program(VertShaderText, FragShaderText);

    glUseProgram(Program);

    PosAttrib = glGetAttribLocation(Program, "Pos");
    ColorAttrib = glGetAttribLocation(Program, "Color");

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-5, 5, -5, 5, 10, 20);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0, 0, -11.0);
    glScalef(0.5, 0.5, 1.0);

    if ((argc >= 2) && (strcmp(argv[1], "vbo") == 0)) {
        use_vbo = GL_TRUE;
    }
}
コード例 #6
0
void
piglit_init(int argc, char **argv)
{
	GLuint id;

	piglit_require_gl_version(15);
	piglit_require_GLSL();
	piglit_require_extension("GL_EXT_transform_feedback");
	piglit_require_extension("GL_ARB_transform_feedback2");

	glGenTransformFeedbacks(1, &id);

	if (glIsTransformFeedback(id)) {
		fprintf(stderr, "id recognized incorrectly as a transform feedback object.\n");
		piglit_report_result(PIGLIT_FAIL);
	}

	glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, id);

	if (!glIsTransformFeedback(id)) {
		fprintf(stderr, "id not recognized correctly as a transform feedback object.\n");
		piglit_report_result(PIGLIT_FAIL);
	}

	piglit_report_result(PIGLIT_PASS);
}
コード例 #7
0
void
piglit_init(int argc, char *argv[])
{
	GLuint vs, gs, prog;

	piglit_require_gl_version(15);
	piglit_require_GLSL();

	do_query_init(queries, ARRAY_SIZE(queries));

	prog = glCreateProgram();

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_src);
	gs = piglit_compile_shader_text(GL_GEOMETRY_SHADER, gs_src);

#ifndef DISPLAY
	glEnable(GL_RASTERIZER_DISCARD);
#else
	glAttachShader(prog,
			piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_src));
#endif

	glAttachShader(prog, vs);
	glAttachShader(prog, gs);
	glLinkProgram(prog);

	if (!piglit_link_check_status(prog)) {
		glDeleteProgram(prog);
		piglit_report_result(PIGLIT_FAIL);
	}

	glUseProgram(prog);
}
コード例 #8
0
ファイル: texsubimage.c プロジェクト: BNieuwenhuizen/piglit
void
piglit_init(int argc, char **argv)
{
	static const GLenum core_targets[] = {
		GL_TEXTURE_1D,
		GL_TEXTURE_2D,
		GL_TEXTURE_3D,
		GL_NONE
	};
	static const GLenum array_targets[] = {
		GL_TEXTURE_1D_ARRAY_EXT,
		GL_TEXTURE_2D_ARRAY_EXT,
		GL_NONE
	};
	static const GLenum cube_map_array_targets[] = {
		GL_TEXTURE_CUBE_MAP_ARRAY_ARB,
		GL_NONE
	};
	int remaining_argc = 1;
	int i;

	test_targets = core_targets;

	for (i = 1; i < argc; i++) {
		if (!strcmp(argv[i], "array")) {
			piglit_require_extension("GL_EXT_texture_array");
			piglit_require_GLSL();
			test_targets = array_targets;
		} else if (!strcmp(argv[i], "cube_map_array")) {
			piglit_require_extension
				("GL_ARB_texture_cube_map_array");
			piglit_require_GLSL();
			test_targets = cube_map_array_targets;
		} else if (!strcmp(argv[i], "pbo")) {
			piglit_require_extension("GL_ARB_pixel_buffer_object");
			use_pbo = GL_TRUE;
		} else {
			argv[remaining_argc++] = argv[i];
		}
	}

	fbo_formats_init(remaining_argc, argv, 0);
	(void) fbo_formats_display;

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
}
コード例 #9
0
ファイル: max-distances.c プロジェクト: BNieuwenhuizen/piglit
void
piglit_init(int argc, char **argv)
{
	piglit_require_gl_version(30);
	piglit_require_GLSL();
	piglit_require_GLSL_version(130);
	piglit_require_extension("GL_ARB_cull_distance");
	prog = piglit_build_simple_program(vert, frag);
	glUseProgram(prog);
}
コード例 #10
0
ファイル: points.c プロジェクト: BNieuwenhuizen/piglit
void
piglit_init(int argc, char **argv)
{
	static const char *varyings[] = { "gl_Position", "gl_FrontColor" };
	GLuint vs;

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glScalef(0.5, 0.5, 1.0);

	/* Check the driver. */
	piglit_require_gl_version(15);
	piglit_require_GLSL();
	piglit_require_transform_feedback();

	/* Create shaders. */
	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
	prog = glCreateProgram();
	glAttachShader(prog, vs);
	glTransformFeedbackVaryings(prog, 2, varyings,
				    GL_INTERLEAVED_ATTRIBS_EXT);
	glLinkProgram(prog);
	if (!piglit_link_check_status(prog)) {
		glDeleteProgram(prog);
		piglit_report_result(PIGLIT_FAIL);
	}
	glUseProgram(prog);

	/* Set up the vertex data buffer */
	glGenBuffers(1, &vert_buf);
	glBindBuffer(GL_ARRAY_BUFFER, vert_buf);
	glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);

	/* Set up the transform feedback buffer. */
	glGenBuffers(1, &xfb_buf);
	glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER_EXT, xfb_buf);
	glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER_EXT,
		     xfb_buf_size, NULL, GL_STREAM_READ);
	glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER_EXT, 0, xfb_buf);

	glClearColor(0.2, 0.2, 0.2, 1.0);

	if (argc > 1 && strcmp(argv[1], "large") == 0) {
		GLint range[2];
		glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, range);
		if (range[1] == 1.0) {
			printf("Max point size is %d, can't test large\n",
			       range[1]);
			piglit_report_result(PIGLIT_WARN);
		}
		printf("Testing large points\n");
		glPointSize(10.0);
	}
}
コード例 #11
0
ファイル: get-buffer-state.c プロジェクト: nobled/piglit
void
piglit_init(int argc, char **argv)
{
	const struct test_desc *test;

	/* Parse params. */
	if (argc != 2)
		print_usage_and_exit(argv[0]);
	test = find_matching_test(argv[0], argv[1]);

	piglit_require_GLSL();
	piglit_require_transform_feedback();

	piglit_report_result(do_test(test) ? PIGLIT_PASS : PIGLIT_FAIL);
}
コード例 #12
0
ファイル: piglit-shader-gl.c プロジェクト: blaztinn/piglit
void
piglit_require_GLSL_version(int version)
{
	bool es;
	int major, minor;

	piglit_require_GLSL();

	piglit_get_glsl_version(&es, &major, &minor);

	if (es || 100 * major + minor < version) {
		printf("GLSL %d.%d not supported.\n",
		       version / 100, version % 100);
		piglit_report_result(PIGLIT_SKIP);
		exit(1);
	}
}
コード例 #13
0
ファイル: max-clip-distances.c プロジェクト: blaztinn/piglit
void
piglit_init(int argc, char **argv)
{
	GLuint vs;
	GLuint fs;

	piglit_require_GLSL();
	piglit_require_GLSL_version(130);
	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag);
	prog = piglit_CreateProgram();
	piglit_AttachShader(prog, vs);
	piglit_AttachShader(prog, fs);
	piglit_LinkProgram(prog);
	piglit_DeleteShader(vs);
	piglit_DeleteShader(fs);
	piglit_UseProgram(prog);
}
コード例 #14
0
void
piglit_init(int argc, char **argv)
{
	const char *glsl_version_string;
	float glsl_version;
	GLint ok;
	GLuint prog;
	GLuint vs;
	GLuint fs;


	piglit_require_GLSL();

	glsl_version_string = (char *)
		glGetString(GL_SHADING_LANGUAGE_VERSION);
	glsl_version = (glsl_version_string == NULL)
		? 0.0 : strtod(glsl_version_string, NULL);
	if (glsl_version <= 1.299999) {
		printf("Test requires GLSL version >= 1.3.  "
		       "Actual version is %.1f.\n",
		       glsl_version);
		piglit_report_result(PIGLIT_SKIP);
	}

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag);
	prog = glCreateProgram();
	glAttachShader(prog, vs);
	glAttachShader(prog, fs);
	glLinkProgram(prog);
	glDeleteShader(vs);
	glDeleteShader(fs);

	ok = piglit_link_check_status_quiet(prog);
	if (ok) {
		fprintf(stderr,
			"Linking with a shader that accesses both "
			"gl_ClipDistance and gl_ClipVertex succeeded when it "
			"should have failed.\n");
		piglit_report_result(PIGLIT_FAIL);
	}

	piglit_report_result(PIGLIT_PASS);
}
コード例 #15
0
ファイル: api-errors.c プロジェクト: dervishxgit/piglit
void
piglit_init(int argc, char **argv)
{
	const struct test_desc *test;

	/* Parse params. */
	if (argc != 2)
		print_usage_and_exit(argv[0]);
	test = find_matching_test(argv[0], argv[1]);

	piglit_require_GLSL();
	piglit_require_transform_feedback();
	if (test->bind_mode == OFFSET) {
		/* BindBufferOffset only exists in the EXT specification */
		piglit_require_extension("GL_EXT_transform_feedback");
	}

	piglit_report_result(do_test(test) ? PIGLIT_PASS : PIGLIT_FAIL);
}
コード例 #16
0
void
piglit_init(int argc, char **argv)
{
	GLuint prog, vbo, indirect;

	piglit_require_GLSL();
	piglit_require_extension("GL_ARB_draw_indirect");

	prog = piglit_build_simple_program(vs_text, fs_text);
	glUseProgram(prog);

	glGenVertexArrays(1, &vao);
	glBindVertexArray(vao);

	glGenBuffers(1, &indirect);
	glBindBuffer(GL_DRAW_INDIRECT_BUFFER, indirect);
	glBufferData(GL_DRAW_INDIRECT_BUFFER, sizeof(indirect_data), indirect_data, GL_STATIC_DRAW);

	glGenBuffers(1, &vbo);
	glBindBuffer(GL_ARRAY_BUFFER, vbo);
	glBufferData(GL_ARRAY_BUFFER, sizeof(rect), rect, GL_STATIC_DRAW);

	/* Enable 2 vertex attrib arrays. */
	glEnableVertexAttribArray(0);
	glEnableVertexAttribArray(1);

	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

	glBindBuffer(GL_ARRAY_BUFFER, 0);

	glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);

	/* Associate both arrays with binding 0. */
	glVertexAttribBinding(0, 0);
	glVertexAttribBinding(1, 0);

	glBindVertexArray(0);

	if (!piglit_check_gl_error(GL_NO_ERROR))
		piglit_report_result(PIGLIT_FAIL);
}
コード例 #17
0
void
piglit_init(int argc, char **argv)
{
	GLuint vs;
	GLuint fs;
	GLint loc;
	GLboolean ok;

	piglit_require_GLSL();

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
	prog = piglit_link_simple_program(vs, fs);

	glBindAttribLocation(prog, 0, "vertex");
	glBindAttribLocation(prog, 1, "textureCoord");

	glLinkProgram(prog);
	ok = piglit_link_check_status(prog);
	if (!ok)
		piglit_report_result(PIGLIT_FAIL);

	glUseProgram(prog);

	loc = glGetUniformLocation(prog, "colorMatrix");
	glUniformMatrix4fv(loc, 1, GL_FALSE, identity_matrix);

	loc = glGetUniformLocation(prog, "texture");
	glUniform1i(loc, 0);

	glClearColor(0.2, 0.2, 0.2, 1.0);

	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
				   2 * sizeof(GLfloat), vertex);
	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE,
				   2 * sizeof(GLfloat), tex_coord);

	glEnableVertexAttribArray(0);
	glEnableVertexAttribArray(1);
}
コード例 #18
0
ファイル: zero-tex-coord.c プロジェクト: chemecse/piglit
void
piglit_init(int argc, char **argv)
{
	int i;

	if (argc > 1) {
		for (i = 0; i < ARRAY_SIZE(sample_functions); i++) {
			if (!strcmp(sample_functions[i].name, argv[1])) {
				sample_function = sample_functions + i;
				goto found;
			}
		}

		fprintf(stderr, "Unknown function: %s\n", argv[1]);
		piglit_report_result(PIGLIT_FAIL);

	found:
		(void) 0;
	}

	piglit_require_GLSL();
}
コード例 #19
0
void piglit_init(int argc, char **argv)
{
	if (argc != 2)
		print_usage_and_exit(argv[0]);
	if (strcmp(argv[1], "discard") == 0)
		discard = GL_TRUE;
	else if (strcmp(argv[1], "buffer") == 0)
		buffer = GL_TRUE;
	else if (strcmp(argv[1], "prims_written") == 0)
		prims_written = GL_TRUE;
	else if (strcmp(argv[1], "prims_generated") == 0)
		prims_generated = GL_TRUE;
	else
		print_usage_and_exit(argv[0]);

	piglit_require_transform_feedback();

	if (buffer || prims_written) {
		GLuint vs;
		piglit_require_GLSL();
		vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
		xfb_prog = glCreateProgram();
		glAttachShader(xfb_prog, vs);
		glTransformFeedbackVaryings(xfb_prog, 1, xfb_varyings,
					    GL_INTERLEAVED_ATTRIBS);
		glLinkProgram(xfb_prog);
		if (!piglit_link_check_status(xfb_prog)) {
			piglit_report_result(PIGLIT_FAIL);
		}
		glGenBuffers(1, &xfb_buf);
	}
	if (prims_written) {
		glGenQueries(1, &prims_written_query);
	}
	if (prims_generated) {
		glGenQueries(1, &prims_generated_query);
	}
}
コード例 #20
0
void
piglit_init(int argc, char **argv)
{
	if (argc != 2)
		print_usage_and_exit(argv[0]);
	if (strcmp(argv[1], "fixed") == 0) {
		use_ff = true;
	} else if (strcmp(argv[1], "arb") == 0) {
		use_arb = true;
	} else if (strcmp(argv[1], "pos") == 0) {
		use_glsl = true;
		setters = "  gl_Position = rotate(position_angle) * gl_Vertex;\n";
		use_glsl_130 = true;
	} else if (strcmp(argv[1], "pos_clipvert") == 0) {
		use_glsl = true;
		setters =
			"  gl_Position = rotate(position_angle) * gl_Vertex;\n"
			"  gl_ClipVertex = rotate(clipVertex_angle) * gl_Vertex;\n";
		use_clip_vertex = true;
	} else if (strcmp(argv[1], "clipvert_pos") == 0) {
		use_glsl = true;
		setters =
			"  gl_ClipVertex = rotate(clipVertex_angle) * gl_Vertex;\n"
			"  gl_Position = rotate(position_angle) * gl_Vertex;\n";
		use_clip_vertex = true;
	} else {
		print_usage_and_exit(argv[0]);
	}

	if (use_arb) {
		piglit_require_extension("GL_ARB_vertex_program");
		setup_arb_program();
	} else if (use_glsl) {
		piglit_require_GLSL();
		piglit_require_GLSL_version(use_glsl_130 ? 130 : 110);
		setup_glsl_programs();
	}
}
コード例 #21
0
ファイル: intervening-read.c プロジェクト: dervishxgit/piglit
void
piglit_init(int argc, char **argv)
{
	GLuint vs, fs;

	/* Interpret command line args */
	if (argc != 2)
		print_usage_and_exit(argv[0]);
	if (strcmp(argv[1], "output") == 0)
		test_mode = TEST_MODE_OUTPUT;
	else if (strcmp(argv[1], "prims_generated") == 0)
		test_mode = TEST_MODE_PRIMS_GENERATED;
	else if (strcmp(argv[1], "prims_written") == 0)
		test_mode = TEST_MODE_PRIMS_WRITTEN;
	else
		print_usage_and_exit(argv[0]);

	piglit_require_GLSL();
	piglit_require_transform_feedback();

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fstext);
	prog = glCreateProgram();
	glAttachShader(prog, vs);
	glAttachShader(prog, fs);
	glBindAttribLocation(prog, 0, "in_position");
	glBindAttribLocation(prog, 1, "in_color");
	glTransformFeedbackVaryings(prog, 2, varyings, GL_INTERLEAVED_ATTRIBS);
	glLinkProgram(prog);
	if (!piglit_link_check_status(prog)) {
		glDeleteProgram(prog);
		piglit_report_result(PIGLIT_FAIL);
	}

	glGenBuffers(1, &xfb_buf);
	glGenQueries(1, &query);
}
コード例 #22
0
ファイル: immediate-reuse.c プロジェクト: chemecse/piglit
void
piglit_init(int argc, char **argv)
{
	GLuint vs, fs;

	piglit_require_GLSL();
	piglit_require_transform_feedback();

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fstext);
	prog = glCreateProgram();
	glAttachShader(prog, vs);
	glAttachShader(prog, fs);
	glBindAttribLocation(prog, 0, "in_position");
	glBindAttribLocation(prog, 1, "in_color");
	glTransformFeedbackVaryings(prog, 2, varyings, GL_INTERLEAVED_ATTRIBS);
	glLinkProgram(prog);
	if (!piglit_link_check_status(prog)) {
		glDeleteProgram(prog);
		piglit_report_result(PIGLIT_FAIL);
	}

	glGenBuffers(2, bufs);
}
コード例 #23
0
void piglit_init(int argc, char **argv)
{
	unsigned int i, j;

	piglit_require_extension("GL_EXT_framebuffer_object");
	piglit_require_extension("GL_NV_texture_barrier");
        piglit_require_GLSL();

	srand(0);
	for (i = 0; i < 16 * 16 * 4; ++i) {
		tex_data[i] = (rand() % 256) / 255.f;
		res_data[i] = tex_data[i];
		for (j = 0; j < PASSES; j++)
			res_data[i] = sqrt(res_data[i]);
	}

	glEnable(GL_TEXTURE_2D);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

	glGenTextures(1, &tex);
	glBindTexture(GL_TEXTURE_2D, tex);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16, 0, GL_RGBA, GL_FLOAT, NULL);

	glGenFramebuffersEXT(1, &fbo);
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
	assert(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT);

	prog = piglit_build_simple_program(NULL, fstext);

	texloc = glGetUniformLocation(prog, "fb");
}
コード例 #24
0
ファイル: pipeline_stats_clip.c プロジェクト: chemecse/piglit
void
piglit_init(int argc, char *argv[])
{
	GLuint vs, prog;

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	piglit_require_gl_version(11);
	piglit_require_GLSL();

	do_query_init(queries, ARRAY_SIZE(queries));

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_src);
	prog = glCreateProgram();
	glAttachShader(prog, vs);
	glLinkProgram(prog);

	if (!piglit_link_check_status(prog)) {
		glDeleteProgram(prog);
		piglit_report_result(PIGLIT_FAIL);
	}

	glUseProgram(prog);
}
コード例 #25
0
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);
}
コード例 #26
0
void
piglit_init(int argc, char **argv)
{
	GLuint tex, fb;
	GLenum status;
	int i, dim;
	GLuint fs, prog, loc_tex;

        for (i = 1; i < argc; i++) {
		if (strcmp(argv[i], "-inplace") == 0)
			in_place_probing = GL_TRUE;
		else if (strcmp(argv[i], "-nobias") == 0)
			no_bias = GL_TRUE;
		else if (strcmp(argv[i], "-nolod") == 0)
			no_lod = GL_TRUE;
		else if (strcmp(argv[i], "-GL_ARB_shader_texture_lod") == 0)
			ARB_shader_texture_lod = GL_TRUE;
        }

	piglit_require_extension("GL_EXT_framebuffer_object");
	if (piglit_get_gl_version() < 14)
		piglit_report_result(PIGLIT_SKIP);

	if (ARB_shader_texture_lod) {
		piglit_require_GLSL();
		piglit_require_extension("GL_ARB_shader_texture_lod");

		fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fscode);
		prog = piglit_link_simple_program(0, fs);
		glUseProgram(prog);
		loc_tex = glGetUniformLocation(prog, "tex");
		loc_lod = glGetUniformLocation(prog, "lod");
		glUniform1i(loc_tex, 0);

		puts("Testing GL_ARB_shader_texture_lod.");
	}

	glGenTextures(1, &tex);
	glBindTexture(GL_TEXTURE_2D, tex);

	for (i = 0, dim = TEX_WIDTH; dim >0; i++, dim /= 2) {
		glTexImage2D(GL_TEXTURE_2D, i, GL_RGBA,
			     dim, dim,
			     0,
			     GL_RGBA, GL_UNSIGNED_BYTE, NULL);
	}
	assert(glGetError() == 0);

	glBindTexture(GL_TEXTURE_2D, 0);
	glDisable(GL_TEXTURE_2D);

	glGenFramebuffersEXT(1, &fb);
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);

	for (i = 0, dim = TEX_WIDTH; dim >0; i++, dim /= 2) {
		glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
					  GL_COLOR_ATTACHMENT0_EXT,
					  GL_TEXTURE_2D,
					  tex,
					  i);


		status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT);
		if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
			fprintf(stderr, "FBO incomplete\n");
			piglit_report_result(PIGLIT_SKIP);
		}

		glClearColor(colors[i][0],
			     colors[i][1],
			     colors[i][2],
			     0.0);
		glClear(GL_COLOR_BUFFER_BIT);

		assert(glGetError() == 0);
	}

	glDeleteFramebuffersEXT(1, &fb);
	glBindTexture(GL_TEXTURE_2D, tex);

	glViewport(0, 0, piglit_width, piglit_height);

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, piglit_winsys_fbo);

	glEnable(GL_TEXTURE_2D);
	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
コード例 #27
0
ファイル: output-type.c プロジェクト: chemecse/piglit
void piglit_init(int argc, char **argv)
{
	GLuint vs;
	unsigned i,j;
	int maxcomps;
	float *data;

	/* Parse params. */
	for (i = 1; i < argc; i++) {
		struct test_desc *t;

		for (t = tests; t->name; t++) {
			if (!strcmp(argv[i], t->name)) {
				test = t;
				goto test_ready;
			}
		}
		fprintf(stderr, "Unknown test name.\n");
		exit(1);
	}
	test = &tests[0];
test_ready:

	printf("Testing type: %s\n", test->name);

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	/* Check the driver. */
	piglit_require_gl_version(15);
	piglit_require_GLSL();
	piglit_require_transform_feedback();
	if (!test->is_floating_point)
		piglit_require_GLSL_version(130);
	if (test->is_transform_feedback3)
		piglit_require_extension("GL_ARB_transform_feedback3");

	glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, &maxcomps);
	for (i = 0; i < MAX_BUFFERS; i++) {
		if (maxcomps < test->num_elements[i]) {
			piglit_report_result(PIGLIT_SKIP);
		}
	}

	/* Create shaders. */
	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, test->vs);
	prog = glCreateProgram();
	glAttachShader(prog, vs);
	glTransformFeedbackVaryings(prog, test->num_varyings,
				    test->varyings,
				    GL_INTERLEAVED_ATTRIBS_EXT);
	glLinkProgram(prog);
	if (!piglit_link_check_status(prog)) {
		glDeleteProgram(prog);
		piglit_report_result(PIGLIT_FAIL);
	}

	glGenBuffers(MAX_BUFFERS, buf);

	for (j = 0; j < MAX_BUFFERS; j++) {
		if (!test->num_elements[j]) {
			continue;
		}
		if (test->is_transform_feedback3) {
			GLint maxbufs;
			glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, &maxbufs);
			if (j >= maxbufs) {
				piglit_report_result(PIGLIT_SKIP);
			}
		}

		/* Set up the transform feedback buffer. */
		data = malloc(test->num_elements[j]*NUM_VERTICES*sizeof(float));
		for (i = 0; i < test->num_elements[j]*NUM_VERTICES; i++) {
			data[i] = DEFAULT_VALUE;
		}

		glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER_EXT, buf[j]);
		glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER_EXT,
			     test->num_elements[j]*NUM_VERTICES*sizeof(float),
			     data, GL_STREAM_READ);

		if (!piglit_check_gl_error(GL_NO_ERROR))
		        piglit_report_result(PIGLIT_FAIL);

		glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER_EXT, j, buf[j]);

		if (!piglit_check_gl_error(GL_NO_ERROR))
		        piglit_report_result(PIGLIT_FAIL);

		free(data);
	}

	glClearColor(0.2, 0.2, 0.2, 1.0);
	glEnableClientState(GL_VERTEX_ARRAY);
}
コード例 #28
0
ファイル: texgrad.c プロジェクト: BNieuwenhuizen/piglit
void piglit_init(int argc, char **argv)
{
	GLuint tex, fb;
	GLenum status;
	int i, dim;

	piglit_require_GLSL();
	piglit_require_extension("GL_EXT_framebuffer_object");
	piglit_require_extension("GL_ARB_shader_texture_lod");

	prog_tex = piglit_build_simple_program(NULL, sh_tex);
	prog_texgrad = piglit_build_simple_program(NULL, sh_texgrad);

	glGenTextures(1, &tex);
	glBindTexture(GL_TEXTURE_2D, tex);

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	for (i = 0, dim = TEX_WIDTH; dim >0; i++, dim /= 2) {
		glTexImage2D(GL_TEXTURE_2D, i, GL_RGBA,
			     dim, dim,
			     0,
			     GL_RGBA, GL_UNSIGNED_BYTE, NULL);
	}
	if (!piglit_check_gl_error(GL_NO_ERROR))
		piglit_report_result(PIGLIT_FAIL);

	glBindTexture(GL_TEXTURE_2D, 0);
	glDisable(GL_TEXTURE_2D);

	glGenFramebuffersEXT(1, &fb);
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);

	for (i = 0, dim = TEX_WIDTH; dim >0; i++, dim /= 2) {
		glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
					  GL_COLOR_ATTACHMENT0_EXT,
					  GL_TEXTURE_2D,
					  tex,
					  i);

		status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT);
		if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
			fprintf(stderr, "FBO incomplete\n");
			piglit_report_result(PIGLIT_SKIP);
		}

		glClearColor(colors[i][0],
			     colors[i][1],
			     colors[i][2],
			     0.0);
		glClear(GL_COLOR_BUFFER_BIT);

		if (!piglit_check_gl_error(GL_NO_ERROR))
		        piglit_report_result(PIGLIT_FAIL);
	}
	glDeleteFramebuffersEXT(1, &fb);
	glBindTexture(GL_TEXTURE_2D, tex);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glFrustum(-0.1, 0.1, -0.1, 0.1, 0.1, 1000.0);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glTranslatef(-0.5, -0.5, -1.2);
	glRotatef(68, 0, 1, 0);
	glScalef(2000, 1, 1);

	glEnable(GL_TEXTURE_2D);
	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

	piglit_set_tolerance_for_bits(7, 7, 7, 7);

	printf("Left: texture2D, Right: texture2DGradARB\n");
}
コード例 #29
0
void
piglit_init(int argc, char **argv)
{
	piglit_require_extension("GL_ARB_vertex_buffer_object");
        piglit_require_GLSL();
}
コード例 #30
0
void
piglit_init(int argc, char **argv)
{
	piglit_require_GLSL();
}