RayTracing.
[GPU.git] / WCudaMSE / Student_Cuda_Image / src / cpp / core / mainFreeGL.cpp
index 2e54bef..e5d126d 100755 (executable)
@@ -1,13 +1,14 @@
 #include <iostream>\r
 #include <stdlib.h>\r
 #include <string.h>\r
+using namespace std;\r
 \r
 #include "Device.h"\r
 #include "cudaTools.h"\r
+#include "Chronos.h"\r
 \r
-using std::cout;\r
-using std::endl;\r
-using std::string;\r
+#include "RayTracingProvider.h"\r
+#include "RayTracingParams.h"\r
 \r
 /*----------------------------------------------------------------------*\\r
  |*                    Declaration                                     *|\r
@@ -33,17 +34,62 @@ int mainFreeGL(void);
  |*                    Implementation                                  *|\r
  \*---------------------------------------------------------------------*/\r
 \r
+void run(uchar4* ptrDevPixels, int dw, int dh, int dg, int db, int nbFrame)\r
+    {\r
+    cout << "Raytracing Without GL ";\r
+#if CURRENT_MEMORY_MODEL == MEMORY_MODEL_GLOBAL\r
+    cout << "(Global memory)" << endl;\r
+#elif CURRENT_MEMORY_MODEL == MEMORY_MODEL_CONSTANT\r
+    cout << "(Constant memory)" << endl;\r
+#elif CURRENT_MEMORY_MODEL == MEMORY_MODEL_SHARED\r
+    cout << "(Shared memory)" << endl;\r
+#endif\r
+\r
+    cout << "Nb frames: " << nbFrame << endl;\r
+\r
+    RayTracing* rayTracing = RayTracingProvider::create(dw, dh, dg, db);\r
+\r
+    Chronos chronos;\r
+    chronos.start();\r
+\r
+    for (int i = 0; i < nbFrame; i++)\r
+        rayTracing->runGPU(ptrDevPixels);\r
+\r
+    HANDLE_ERROR(cudaDeviceSynchronize());\r
+\r
+    chronos.stop();\r
+\r
+    cout << "Time: " << chronos << endl;\r
+    cout << "-------------------" << endl;\r
+    }\r
+\r
 /*--------------------------------------*\\r
  |*            Public                  *|\r
  \*-------------------------------------*/\r
 \r
 int mainFreeGL(void)\r
     {\r
-    cout << "\n[FPS] :  Free GL, please wait ..." << endl;\r
+    const int NB_FRAME_TO_RENDER = 100;\r
+    const int dw = 16 * 50;\r
+    const int dh = 16 * 50;\r
+\r
+    // dg : 8 -> 128.\r
+    const int dgStart = 8;\r
+    const int dgStop = 128;\r
 \r
-    rippling0FreeGL(1000); // bad technique\r
+    // db : 8 -> 32\r
+    const int dbStart = 8;\r
+    const int dbStop = 32;\r
+\r
+    uchar4* ptrDevPixels;\r
+    HANDLE_ERROR(cudaMalloc(&ptrDevPixels, dw * dh * sizeof(uchar4)));\r
+\r
+    run(ptrDevPixels, dw, dh, 32, 32, NB_FRAME_TO_RENDER);\r
+    return EXIT_SUCCESS;\r
 \r
-    // TODO : add other tp here ...\r
+    for (int dg = dgStart; dg <= dgStop; dg *= 2)\r
+        for (int db = dbStart; db <= dbStop; db *= 2)\r
+            run(ptrDevPixels, dw, dh, dg, db, NB_FRAME_TO_RENDER);\r
 \r
     return EXIT_SUCCESS;\r
     }\r