[Piglit] [PATCH 02/19] glean: Remove ReadPixPerfTest.

Kenneth Graunke kenneth at whitecape.org
Mon Dec 31 18:40:51 PST 2012


Piglit is not a benchmarking suite, and this is a benchmark, not a test.
---
 tests/glean/CMakeLists.gl.txt |   1 -
 tests/glean/treadpixperf.cpp  | 551 ------------------------------------------
 tests/glean/treadpixperf.h    |  88 -------
 3 files changed, 640 deletions(-)
 delete mode 100644 tests/glean/treadpixperf.cpp
 delete mode 100644 tests/glean/treadpixperf.h

diff --git a/tests/glean/CMakeLists.gl.txt b/tests/glean/CMakeLists.gl.txt
index ab2df75..6b5e62b 100644
--- a/tests/glean/CMakeLists.gl.txt
+++ b/tests/glean/CMakeLists.gl.txt
@@ -54,7 +54,6 @@ piglit_add_executable (glean
 	tpointatten.cpp
 	tpointsprite.cpp
 	treadpix.cpp
-	treadpixperf.cpp
 	tscissor.cpp
 	tshaderapi.cpp
 	tstencil2.cpp
diff --git a/tests/glean/treadpixperf.cpp b/tests/glean/treadpixperf.cpp
deleted file mode 100644
index 813dfdb..0000000
--- a/tests/glean/treadpixperf.cpp
+++ /dev/null
@@ -1,551 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-// 
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-// 
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the
-// Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ALLEN AKIN BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-// 
-// END_COPYRIGHT
-
-
-#include "treadpixperf.h"
-#include "rand.h"
-#include "timer.h"
-#include "image.h"
-#include <cassert>
-#include <cmath>
-#include <cstring>
-
-namespace GLEAN {
-
-
-static PFNGLBINDBUFFERARBPROC BindBuffer = NULL;
-static PFNGLBUFFERDATAARBPROC BufferData = NULL;
-static PFNGLMAPBUFFERARBPROC MapBuffer = NULL;
-static PFNGLUNMAPBUFFERARBPROC UnmapBuffer = NULL;
-static PFNGLGETBUFFERSUBDATAARBPROC GetBufferSubData = NULL;
-
-const GLuint PBO1 = 42, PBO2 = 43;
-
-const double minInterval = 1.0; // seconds
-
-
-struct ImageFormat
-{
-   const char *Name;
-   GLuint Bytes;  // per pixel
-   GLenum Format;
-   GLenum Type;
-};
-
-
-static ImageFormat Formats[] =
-{
-	{ "GL_RGB, GL_UNSIGNED_BYTE", 3, GL_RGB, GL_UNSIGNED_BYTE },
-	{ "GL_BGR, GL_UNSIGNED_BYTE", 3, GL_BGR, GL_UNSIGNED_BYTE },
-	{ "GL_RGBA, GL_UNSIGNED_BYTE", 4, GL_RGBA, GL_UNSIGNED_BYTE },
-	{ "GL_BGRA, GL_UNSIGNED_BYTE", 4, GL_BGRA, GL_UNSIGNED_BYTE },
-	{ "GL_ABGR, GL_UNSIGNED_BYTE", 4, GL_ABGR_EXT, GL_UNSIGNED_BYTE },
-	{ "GL_RGBA, GL_UNSIGNED_INT_8_8_8_8", 4, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8 },
-	{ "GL_BGRA, GL_UNSIGNED_INT_8_8_8_8", 4, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8 },
-	{ "GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV", 4, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV },
-#ifdef GL_EXT_packed_depth_stencil
-	{ "GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8", 4, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT },
-#endif
-	{ "GL_DEPTH_COMPONENT, GL_FLOAT", 4, GL_DEPTH_COMPONENT, GL_FLOAT },
-	{ "GL_DEPTH_COMPONENT, GL_UNSIGNED_INT", 4, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT },
-	{ "GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT", 2, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT },
-	{ NULL, 0, 0, 0 } // end of list marker
-};
-
-
-static GLenum PBOmodes[4] =
-{
-	GL_NONE,
-#ifdef GL_ARB_pixel_buffer_object
-	GL_STREAM_READ_ARB,
-	GL_STATIC_READ_ARB,
-	GL_DYNAMIC_READ_ARB
-#endif
-};
-
-static const char *PBOmodeStrings[4] =
-{
-	"No PBO",
-	"GL_STREAM_READ PBO",
-	"GL_STATIC_READ PBO",
-	"GL_DYNAMIC_READ PBO"
-};
-
-
-static bool
-isDepthFormat(GLenum format)
-{
-	switch (format) {
-	case GL_DEPTH_COMPONENT:
-#ifdef GL_EXT_packed_depth_stencil
-	case GL_DEPTH_STENCIL_EXT:
-#endif
-		return true;
-	default:
-		return false;
-	}
-}
-
-
-static bool
-isStencilFormat(GLenum format)
-{
-	switch (format) {
-	case GL_STENCIL_INDEX:
-#ifdef GL_EXT_packed_depth_stencil
-	case GL_DEPTH_STENCIL_EXT:
-#endif
-		return true;
-	default:
-		return false;
-	}
-}
-
-
-static bool
-isDepthStencilFormat(GLenum format)
-{
-#ifdef GL_EXT_packed_depth_stencil
-	if (format == GL_DEPTH_STENCIL_EXT)
-		return true;
-#endif
-	return false;
-}
-
-
-
-// print a SubResult test description in human-readable form
-void
-ReadpixPerfResult::SubResult::sprint(char *s) const
-{
-	sprintf(s, "glReadPixels(%d x %d, %s), %s, %s, GL_READ_BUFFER=%s",
-		width, height, Formats[formatNum].Name,
-		PBOmodeStrings[pboMode],
-		work ? "pixel sum" : "no pixel sum",
-		readBuf);
-}
-
-
-void
-ReadpixPerfResult::SubResult::print(Environment *env) const
-{
-	char descrip[1000], str[1000];
-	sprint(descrip);
-	sprintf(str, "\t%.3f Mpixels/second: %s\n", rate, descrip);
-	env->log << str;
-}
-
-
-static void
-SimpleRender()
-{
-   glBegin(GL_POINTS);
-   glVertex2f(0, 0);
-   glEnd();
-}
-
-
-// Exercise glReadPixels for a particular image size, format and type.
-// Return read rate in megapixels / second
-double
-ReadpixPerfTest::runNonPBOtest(int formatNum, GLsizei width, GLsizei height,
-			       GLuint *sumOut)
-{
-	const GLint bufferSize = width * height * Formats[formatNum].Bytes;
-	GLubyte *buffer = new GLubyte [bufferSize];
-
-	glPixelStorei(GL_PACK_ALIGNMENT, 1);
-
-	Timer t;
-	double start = t.getClock();
-	double elapsedTime = 0.0;
-	int iter = 0;
-
-	do {
-		iter++;
-		if (sumOut) {
-		   SimpleRender();
-		}
-		glReadPixels(0, 0, width, height,
-			     Formats[formatNum].Format,
-			     Formats[formatNum].Type, buffer);
-		if (sumOut) {
-			GLuint sum = 0;
-			for (int i = 0; i < bufferSize; i++) {
-				sum += buffer[i];
-			}
-			*sumOut = sum;
-		}
-		double finish = t.getClock();
-		elapsedTime = finish - start;
-	} while (elapsedTime < minInterval);
-
-	delete buffer;
-
-	double rate = static_cast<double>(width) * height * iter / elapsedTime / 1000000.0;
-	return rate;
-}
-
-// use glMapBufferARB or glGetBufferSubDataARB:
-#define MAP_BUFFER 1
-
-double
-ReadpixPerfTest::runPBOtest(int formatNum, GLsizei width, GLsizei height,
-			    GLenum bufferUsage, GLuint *sumOut)
-{
-#ifdef GL_ARB_pixel_buffer_object
-	const GLint bufferSize = width * height * Formats[formatNum].Bytes / 2;
-
-	glPixelStorei(GL_PACK_ALIGNMENT, 1);
-
-	// setup PBOs
-	BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, PBO1);
-	BufferData(GL_PIXEL_PACK_BUFFER_ARB, bufferSize, NULL, bufferUsage);
-	BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, PBO2);
-	BufferData(GL_PIXEL_PACK_BUFFER_ARB, bufferSize, NULL, bufferUsage);
-
-#if !MAP_BUFFER
-	GLubyte *b = new GLubyte [bufferSize];
-#endif
-
-	Timer t;
-	double start = t.getClock();
-	double elapsedTime = 0.0;
-	int iter = 0;
-
-	do {
-		iter++;
-		if (sumOut) {
-		   SimpleRender();
-		}
-		// read lower half
-		BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, PBO1);
-		glReadPixels(0, 0, width, height / 2,
-			     Formats[formatNum].Format,
-			     Formats[formatNum].Type, NULL);
-		// read upper half
-		BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, PBO2);
-		glReadPixels(0, height / 2, width, height / 2,
-			     Formats[formatNum].Format,
-			     Formats[formatNum].Type, NULL);
-		if (sumOut) {
-			GLuint sum = 0;
-			// sum lower half
-			BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, PBO1);
-#if MAP_BUFFER
-			GLubyte *b = (GLubyte *)
-				MapBuffer(GL_PIXEL_PACK_BUFFER_ARB,
-					  GL_READ_ONLY);
-#else
-			GetBufferSubData(GL_PIXEL_PACK_BUFFER_ARB,
-					 0, bufferSize, b);
-#endif
-			for (int i = 0; i < bufferSize; i++) {
-				sum += b[i];
-			}
-#if MAP_BUFFER
-			UnmapBuffer(GL_PIXEL_PACK_BUFFER_ARB);
-#endif
-
-			// sum upper half
-			BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, PBO2);
-#if MAP_BUFFER
-			b = (GLubyte *) MapBuffer(GL_PIXEL_PACK_BUFFER_ARB,
-						  GL_READ_ONLY);
-#else
-			GetBufferSubData(GL_PIXEL_PACK_BUFFER_ARB,
-					 0, bufferSize, b);
-#endif
-			for (int i = 0; i < bufferSize; i++) {
-				sum += b[i];
-			}
-#if MAP_BUFFER
-			UnmapBuffer(GL_PIXEL_PACK_BUFFER_ARB);
-#endif
-			*sumOut = sum;
-		}
-		double finish = t.getClock();
-		elapsedTime = finish - start;
-	} while (elapsedTime < minInterval);
-
-	BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0);
-
-#if !MAP_BUFFER
-	delete b;
-#endif
-
-	double rate = static_cast<double>(width) * height * iter / elapsedTime / 1000000.0;
-	return rate;
-#else
-	return 0.0;
-#endif /* GL_ARB_pixel_buffer_object */
-}
-
-
-
-// Per visual setup.
-void
-ReadpixPerfTest::setup(void)
-{
-	env->log << name << ":\n";
-
-	glGetIntegerv(GL_DEPTH_BITS, &depthBits);
-	glGetIntegerv(GL_STENCIL_BITS, &stencilBits);
-
-	if (GLUtils::haveExtensions("GL_ARB_pixel_buffer_object")) {
-		BindBuffer = (PFNGLBINDBUFFERARBPROC)
-			GLUtils::getProcAddress("glBindBufferARB");
-		assert(BindBuffer);
-		BufferData = (PFNGLBUFFERDATAARBPROC)
-			GLUtils::getProcAddress("glBufferDataARB");
-		assert(BufferData);
-		MapBuffer = (PFNGLMAPBUFFERARBPROC)
-			GLUtils::getProcAddress("glMapBufferARB");
-		assert(MapBuffer);
-		UnmapBuffer = (PFNGLUNMAPBUFFERARBPROC)
-			GLUtils::getProcAddress("glUnmapBufferARB");
-		assert(UnmapBuffer);
-		GetBufferSubData = (PFNGLGETBUFFERSUBDATAARBPROC)
-			GLUtils::getProcAddress("glGetBufferSubDataARB");
-		assert(GetBufferSubData);
-		numPBOmodes = 4;
-	}
-	else {
-		numPBOmodes = 1;
-	}
-
-	// Fill colorbuffer with random data
-	GLubyte *buffer = new GLubyte [windowSize * windowSize * 4];
-	for (int i = 0; i < windowSize * windowSize * 4; i++)
-		buffer[i] = 5;
-	glDrawPixels(windowSize, windowSize, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
-	if (depthBits > 0) {
-		glEnable(GL_DEPTH_TEST);
-		glDepthFunc(GL_ALWAYS);
-		glDrawPixels(windowSize, windowSize,
-					 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, buffer);
-	}
-	if (stencilBits > 0) {
-		glDrawPixels(windowSize, windowSize,
-					 GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, buffer);
-	}
-	delete buffer;
-}
-
-
-
-void
-ReadpixPerfTest::runOne(ReadpixPerfResult &r, Window &w)
-{
-	ReadpixPerfResult::SubResult res;
-	(void) w;  // silence warning
-
-	setup();
-	assert(numPBOmodes > 0);
-
-	r.pass = true;
-	res.width = windowSize;
-	res.height = windowSize;
-
-	{
-		GLint readBuf;
-		glGetIntegerv(GL_READ_BUFFER, &readBuf);
-		if (readBuf == GL_FRONT)
-			strcpy(res.readBuf, "GL_FRONT");
-		else
-			strcpy(res.readBuf, "GL_BACK");
-	}
-
-	for (res.formatNum = 0; Formats[res.formatNum].Name; res.formatNum++) {
-
-		if (isDepthFormat(Formats[res.formatNum].Format) && depthBits == 0)
-			continue;
-		if (isStencilFormat(Formats[res.formatNum].Format) && stencilBits == 0)
-			continue;
-
-		if (isDepthStencilFormat(Formats[res.formatNum].Format) &&
-			!GLUtils::haveExtensions("GL_EXT_packed_depth_stencil"))
-			continue;
-
-		for (res.work = 0; res.work < 2; res.work++) {
-			GLuint firstSum = 0;
-
-			for (res.pboMode = 0; res.pboMode < numPBOmodes; res.pboMode++) {
-				GLuint sum = 0;
-
-				if (res.pboMode) {
-					GLenum usage = PBOmodes[res.pboMode];
-					res.rate = runPBOtest(res.formatNum, res.width, res.height, usage,
-															res.work ? &sum : NULL);
-				}
-				else {
-					res.rate = runNonPBOtest(res.formatNum, res.width, res.height,
-																 res.work ? &sum : NULL);
-				}
-
-				res.print(env);
-				r.results.push_back(res);
-
-				// sanity check
-				if (res.pboMode == 0) {
-					firstSum = sum;
-				}
-				else if (firstSum != sum) {
-					// this should never happen, probably an OpenGL bug
-					char s0[1000];
-					res.sprint(s0);
-					env->log << name
-						 << " Error: glReadPixels returned inconsistant data:\n"
-						 << s0
-						 << " returned "
-						 << firstSum
-						 << " but expected sum is "
-						 << sum << "\n";
-					r.pass = false;
-				}
-			}
-		}
-	}
-}
-
-
-void
-ReadpixPerfTest::logOne(ReadpixPerfResult &r)
-{
-	logPassFail(r);
-	logConcise(r);
-}
-
-
-void
-ReadpixPerfTest::compareOne(ReadpixPerfResult &oldR,
-			    ReadpixPerfResult &newR)
-{
-	const double threshold = 2.0; // percent
-
-	comparePassFail(oldR, newR);
-
-	if (newR.pass && oldR.pass) {
-		// if both tests failed, compare/report rates
-		ReadpixPerfResult::sub_iterator it_old = oldR.results.begin();
-		ReadpixPerfResult::sub_iterator it_new = newR.results.begin();
-		assert(oldR.results.size() == newR.results.size());
-		for ( ; it_old != oldR.results.end(); ++it_old, ++it_new) {
-			const ReadpixPerfResult::SubResult &oldres = *it_old;
-			const ReadpixPerfResult::SubResult &newres = *it_new;
-
-			double diff = (newres.rate - oldres.rate) / newres.rate;
-			diff *= 100.0;
-			if (fabs(diff) >= threshold) {
-				char descrip[1000];
-				newres.sprint(descrip);
-				env->log << name << ": Warning: rate for '"
-					 << descrip
-					 << "' changed by "
-					 << diff
-					 << " percent (new: "
-					 << newres.rate
-					 << " old: "
-					 << oldres.rate
-					 << " MPixels/sec)\n";
-			}
-		}
-	}
-	else {
-		// one test or the other failed
-		env->log << "\tNew: ";
-		env->log << (newR.pass ? "PASS" : "FAIL");
-		env->log << "\tOld: ";
-		env->log << (oldR.pass ? "PASS" : "FAIL");
-	}
-}
-
-
-// Write vector of sub results
-void
-ReadpixPerfResult::putresults(ostream &s) const
-{
-	s << pass << '\n';
-	s << results.size() << '\n';
-	for (ReadpixPerfResult::sub_iterator it = results.begin();
-	     it != results.end();
-	     ++it) {
-		const ReadpixPerfResult::SubResult &res = *it;
-		s << res.rate << '\n';
-		s << res.width << '\n';
-		s << res.height << '\n';
-		s << res.formatNum << '\n';
-		s << res.pboMode << '\n';
-                s << res.readBuf << '\n';
-		s << res.work << '\n';
-	}
-}
-
-
-// Read vector of sub results
-bool
-ReadpixPerfResult::getresults(istream &s)
-{
-	int count;
-
-	s >> pass
-	  >> count;
-
-	results.reserve(count);
-	for (int i = 0; i < count; i++) {
-		ReadpixPerfResult::SubResult res;
-		s >> res.rate
-		  >> res.width
-		  >> res.height
-		  >> res.formatNum
-		  >> res.pboMode
-		  >> res.readBuf
-		  >> res.work;
-		results.push_back(res);
-	}
-	return s.good();
-}
-
-
-// The test object itself:
-ReadpixPerfTest readpixperfTest("readpixPerf", "window, rgb",
-				"",
-	"Test the performance of glReadPixels for a variety of pixel\n"
-	"formats and datatypes.\n"
-	"When GL_ARB_pixel_buffer_object is supported, we also test reading\n"
-	"pixels into a PBO using the three types of buffer usage modes:\n"
-	"GL_STREAM_READ_ARB, GL_STATIC_READ_ARB and GL_DYNAMIC_READ_ARB.\n"
-	"Furthermore, test effect of summing the value of all image bytes\n"
-	"to simulate host-based image processing.\n"
-	);
-
-
-
-
-} // namespace GLEAN
-
diff --git a/tests/glean/treadpixperf.h b/tests/glean/treadpixperf.h
deleted file mode 100644
index d98aae8..0000000
--- a/tests/glean/treadpixperf.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-// 
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-// 
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the
-// Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ALLEN AKIN BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-// 
-// END_COPYRIGHT
-
-// Brian Paul  September 2006
-
-#ifndef __treadpixperf_h__
-#define __treadpixperf_h__
-
-#include "tbase.h"
-
-namespace GLEAN {
-
-#define windowSize 1000
-
-
-class ReadpixPerfResult: public BaseResult
-{
-public:
-	struct SubResult
-	{
-		double rate;
-		GLsizei width, height;
-		int formatNum;
-		int pboMode;
-		int work; // really bool
-		void sprint(char *s) const;
-		void print(Environment *env) const;
-		char readBuf[10]; // "GL_FRONT" or "GL_BACK"
-	};	
-
-	bool pass;
-
-	vector<SubResult> results;
-
-	typedef vector<ReadpixPerfResult::SubResult>::const_iterator sub_iterator;
-
-	virtual void putresults(ostream& s) const;
-	virtual bool getresults(istream& s);
-};
-
-
-class ReadpixPerfTest: public BaseTest<ReadpixPerfResult>
-{
-public:
-	GLEAN_CLASS_WH(ReadpixPerfTest, ReadpixPerfResult,
-		       windowSize, windowSize);
-
-private:
-        int depthBits, stencilBits;
-	int numPBOmodes;
-
-	double runPBOtest(int formatNum, GLsizei width, GLsizei height,
-			  GLenum bufferUsage, GLuint *sumOut);
-	double runNonPBOtest(int formatNum, GLsizei width, GLsizei height,
-			     GLuint *sumOut);
-
-        void setup(void);
-};
-
-} // namespace GLEAN
-
-#endif // __treadpixperf_h__
-
-- 
1.8.0.3



More information about the Piglit mailing list