00001
00002
00003
00004
00005
00006
00007
00008 #ifndef GPUGLOBALS
00009 #define GPUGLOBALS
00010
00011 #ifdef QMC_GPU
00012
00013 #include <windows.h>
00014 #include <GL/glew.h>
00015 #include <GL/glut.h>
00016 #include <Cg/cgGL.h>
00017 #include "Array2D.h"
00018 #include <iostream>
00019 #include <sstream>
00020 #include <fstream>
00021
00022 typedef Array1D< Array2D<qmcfloat> > ArrayGPU;
00023
00024
00025 #define GET_GLERROR(message) \
00026 { \
00027 string temp = __FILE__; \
00028 temp = temp.substr(temp.find_last_of('\\')+1); \
00029 GLenum err = glGetError(); \
00030 if (err != GL_NO_ERROR) { \
00031 fprintf(stderr, "\n[%s line %d] GL Error: %s\n", \
00032 temp.c_str(), __LINE__, gluErrorString(err)); \
00033 fprintf(stderr, " %s\n\n", message); \
00034 fflush(stderr); \
00035 } \
00036 }
00037
00038 extern CGcontext g_cgContext;
00039 extern CGprofile g_cgProfile;
00040
00041 static int gpu_make;
00042
00043 const static int nvidia_gpu = 1;
00044 const static int ati_gpu = 2;
00045 const static int labs3d_gpu = 3;
00046 const static int unknown_gpu = 4;
00047
00048 using namespace std;
00049
00050 class GPUGlobals
00051 {
00052 public:
00060 static void getOpenGLError(char *msg);
00061
00071 static void PrintRGBAPixelsBoxF(float* pix, int w, int h);
00072
00086 static void PrintRGBAPixelsBoxE(float* pix, int w, int h,
00087 int wBorder, int hBorder,
00088 int maxJ, int maxI,
00089 bool printRC);
00090
00098 static void PrintRGBAPixelsColumn(float* pix, int w, int h);
00099
00108 static void PrintRGBPixelsColumn(float* pix, int w, int h);
00109
00114 static void PrintMatrix(Array2D<GLfloat> matrix);
00115
00124 template<class T> void findandreplace( string& source, const string& find, T replace )
00125 {
00126 size_t j;
00127 stringstream strm;
00128 strm << replace;
00129 for (;(j = source.find( find )) != string::npos;)
00130 {
00131 source.replace( j, find.length(), strm.str() );
00132 }
00133 }
00134
00143 static void getFactors(int num, int & fact1, int & fact2);
00144
00149 static const char *gpubench_getDriverVersion(void);
00150
00154 static void printVersions(ostream & strm);
00155
00162 static void writeShader(const char * shader, const char * filename);
00163
00168 static void checkExtensions();
00169
00174 static void specTest();
00175 };
00176
00177
00178 #endif
00179 #endif
00180
00181
00182
00183
00184