瀏覽代碼

working on GNU/Linux now

Nicolas Winkler 6 年之前
父節點
當前提交
4e6b341f32
共有 6 個文件被更改,包括 45 次插入18 次删除
  1. 2 0
      Almond.cpp
  2. 8 8
      Almond.pro
  3. 3 2
      MandelWidget.cpp
  4. 1 0
      benchmarkdialog.cpp
  5. 2 2
      benchmarks.ui
  6. 29 6
      libmandel/src/Hardware.cpp

+ 2 - 0
Almond.cpp

@@ -4,6 +4,8 @@
 #include <QMessageBox>
 #include "benchmarkdialog.h"
 
+#include <cmath>
+
 Almond::Almond(QWidget *parent) :
     QMainWindow(parent),
     mandelContext(mnd::initializeContext())

+ 8 - 8
Almond.pro

@@ -58,11 +58,11 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
 win32:LIBS += -lopengl32
 else:LIBS += -lOpenGL
 
-#win32:QMAKE_CXXFLAGS+= -openmp
-#else:unix:QMAKE_CXXFLAGS+= -fopenmp
-#win32:QMAKE_LFLAGS +=  -openmp
-#else:unix:QMAKE_LFLAGS+= -fopenmp
-#LIBS += -fopenmp
+win32:QMAKE_CXXFLAGS+= -openmp
+else:unix:QMAKE_CXXFLAGS+= -fopenmp
+win32:QMAKE_LFLAGS +=  -openmp
+else:unix:QMAKE_LFLAGS+= -fopenmp
+LIBS += -fopenmp
 unix:LIBS += -lm -latomic
 
 win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../libs/ffmpeg-4.1.1-win32-dev/lib/ -lavcodec
@@ -121,10 +121,10 @@ else:unix|win32-g++: PRE_TARGETDEPS += $$PWD/libmandel/libmandel.a
 
 win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/lib/x86/' -lopencl
 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/lib/x86/' -lopencl
-else:unix: LIBS += -L$$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/lib/x86/' -lopencl
+else:unix: LIBS += -lOpenCL
 
-INCLUDEPATH += $$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/include'
-DEPENDPATH += $$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/include'
+win32:INCLUDEPATH += $$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/include'
+win32:DEPENDPATH += $$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/include'
 
 win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/lib/x86/libopencl.a'
 else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/'../../../../../Program Files (x86)/OCL_SDK_Light/lib/x86/libopencl.a'

+ 3 - 2
MandelWidget.cpp

@@ -1,4 +1,5 @@
 #include "MandelWidget.h"
+#include <cmath>
 
 using namespace mnd;
 
@@ -88,7 +89,7 @@ void MandelView::adaptViewport(const MandelViewport& vp)
                 auto fmap = Bitmap<float>(mi.bWidth, mi.bHeight);
                 generator.generate(mi, fmap.pixels.get());
                 auto bitmap = fmap.map<RGBColor>([](float i) { return i < 0 ? RGBColor{ 0,0,0 } : RGBColor{ uint8_t(cos(i * 0.015f) * 127 + 127), uint8_t(sin(i * 0.01f) * 127 + 127), uint8_t(i) }; });//uint8_t(::sin(i * 0.01f) * 100 + 100), uint8_t(i) }; });
-                emit updated(new Bitmap(std::move(bitmap)));
+                emit updated(new Bitmap<RGBColor>(std::move(bitmap)));
             } while(hasToCalc.exchange(false));
         });
     }
@@ -102,7 +103,7 @@ void MandelView::adaptViewport(const MandelViewport& vp)
 MandelWidget::MandelWidget(mnd::MandelContext& ctxt, QWidget* parent) :
     QGLWidget{ QGLFormat(QGL::SampleBuffers), parent },
     mndContext{ ctxt },
-    mv{ *ctxt.getDevices()[0].getGeneratorDouble() }
+    mv{ ctxt.getDefaultGenerator() }
 {
     this->setContentsMargins(0, 0, 0, 0);
     this->setSizePolicy(QSizePolicy::Expanding,

+ 1 - 0
benchmarkdialog.cpp

@@ -1,5 +1,6 @@
 #include "benchmarkdialog.h"
 #include <chrono>
+#include <cmath>
 
 BenchmarkDialog::BenchmarkDialog(mnd::MandelContext& mndContext, QWidget *parent) :
     QDialog(parent),

+ 2 - 2
benchmarks.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>545</width>
-    <height>264</height>
+    <width>742</width>
+    <height>423</height>
    </rect>
   </property>
   <property name="windowTitle">

+ 29 - 6
libmandel/src/Hardware.cpp

@@ -3,30 +3,53 @@
 #include <array>
 #include <vector>
 #include <bitset>
+#include <cstring>
 
+#ifdef __GNUC__
+#include <cpuid.h>
+#else
 #include <intrin.h>
+#endif
 
 using mnd::CpuInfo;
 
 
 CpuInfo::CpuInfo(void)
 {
-    std::array<int, 4> dat;
-    std::vector<std::array<int, 4>> cpuData;
-    std::vector<std::array<int, 4>> extData;
-
+    std::array<unsigned int, 4> dat;
+    std::vector<std::array<unsigned int, 4>> cpuData;
+    std::vector<std::array<unsigned int, 4>> extData;
+
+    unsigned int nData;
+    unsigned int nExtData;
+
+#ifdef __GNUC__
+    __cpuid(0, dat[0], dat[1], dat[2], dat[3]);
+    nData = dat[0];
+    __cpuid(0x80000000, dat[0], dat[1], dat[2], dat[3]);
+    nExtData = dat[0];
+#else
     __cpuid(dat.data(), 0);
-    int nData = dat[0];
+    nData = dat[0];
     __cpuid(dat.data(), 0x80000000);
-    int nExtData = dat[0];
+    nExtData = dat[0];
+#endif
 
     for (int i = 0; i <= nData; i++) {
+#ifdef __GNUC__
+        __get_cpuid(i, &dat[0], &dat[1], &dat[2], &dat[3]);
+#else
         __cpuidex(dat.data(), i, 0);
+#endif
         cpuData.push_back(dat);
     }
 
     for (int i = 0x80000000; i <= nExtData; i++) {
+#ifdef __GNUC__
+        __get_cpuid(i, &dat[0], &dat[1], &dat[2], &dat[3]);
+#else
         __cpuidex(dat.data(), i, 0);
+#endif
         extData.push_back(dat);
     }