branch: experimental
details: http://hugin.hg.sourceforge.net/hgweb/hugin/hugin/hgrepo/h/hu/hugin/hugin/rev/f0300b1a732b
changeset: 5454:f0300b1a732b
user: tmodes
date: Sun Jul 17 12:09:44 2011 +0200
description:
Removed buggy GPU remapping code
diffstat:
src/hugin1/base_wx/RunStitchPanel.cpp | 1 -
src/hugin1/hugin/PreferencesDialog.cpp | 3 -
src/hugin1/hugin/PreviewPanel.cpp | 2 -
src/hugin1/hugin/wxPanoCommand.cpp | 4 -
src/hugin1/hugin/xrc/pref_dialog.xrc | 8 -
src/hugin_base/CMakeLists.txt | 3 -
src/hugin_base/algorithms/panorama_makefile/PanoramaMakefilelibExport.cpp | 13 +-
src/hugin_base/nona/ImageRemapper.h | 6 -
src/hugin_base/nona/RemappedPanoImage.h | 185 +-
src/hugin_base/panodata/PanoramaOptions.h | 2 -
src/hugin_base/panotools/PanoToolsInterface.h | 5 -
src/hugin_base/panotools/PanoToolsTransformGPU.cpp | 411 ---
src/hugin_base/vigra_ext/ImageTransformsGPU.cpp | 1259 ---------
src/hugin_base/vigra_ext/ImageTransformsGPU.h | 602 ----
src/tools/CMakeLists.txt | 4 +-
src/tools/nona.cpp | 97 +-
16 files changed, 47 insertions(+), 2558 deletions(-)
diffs (truncated from 2921 to 500 lines):
diff -r acac931044e5 -r f0300b1a732b src/hugin1/base_wx/RunStitchPanel.cpp
--- a/src/hugin1/base_wx/RunStitchPanel.cpp Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin1/base_wx/RunStitchPanel.cpp Sun Jul 17 12:09:44 2011 +0200
@@ -160,7 +160,6 @@
opts.enfuseOptions = wxConfigBase::Get()->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(wxConvLocal);
}
- opts.remapUsingGPU = wxConfigBase::Get()->Read(wxT("/Nona/UseGPU"), HUGIN_NONA_USEGPU) == 1;
pano.setOptions(opts);
} else {
wxLogError( wxString::Format(_("error while parsing panotools script: %s"), scriptFile.c_str()) );
diff -r acac931044e5 -r f0300b1a732b src/hugin1/hugin/PreferencesDialog.cpp
--- a/src/hugin1/hugin/PreferencesDialog.cpp Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin1/hugin/PreferencesDialog.cpp Sun Jul 17 12:09:44 2011 +0200
@@ -584,8 +584,6 @@
MY_CHOICE_VAL("prefs_nona_interpolator", cfg->Read(wxT("/Nona/Interpolator"), HUGIN_NONA_INTERPOLATOR));
t = cfg->Read(wxT("/Nona/CroppedImages"), HUGIN_NONA_CROPPEDIMAGES) == 1;
MY_BOOL_VAL("prefs_nona_createCroppedImages", t);
- t = cfg->Read(wxT("/Nona/UseGPU"), HUGIN_NONA_USEGPU) == 1;
- MY_BOOL_VAL("prefs_nona_useGpu", t);
/////
/// ENBLEND
@@ -877,7 +875,6 @@
/// STITCHING
cfg->Write(wxT("/Nona/Interpolator"), MY_G_CHOICE_VAL("prefs_nona_interpolator"));
cfg->Write(wxT("/Nona/CroppedImages"), MY_G_BOOL_VAL("prefs_nona_createCroppedImages"));
- cfg->Write(wxT("/Nona/UseGPU"), MY_G_BOOL_VAL("prefs_nona_useGpu"));
/////
/// ENBLEND
diff -r acac931044e5 -r f0300b1a732b src/hugin1/hugin/PreviewPanel.cpp
--- a/src/hugin1/hugin/PreviewPanel.cpp Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin1/hugin/PreviewPanel.cpp Sun Jul 17 12:09:44 2011 +0200
@@ -308,8 +308,6 @@
}
PanoramaOptions opts = pano->getOptions();
- //don't use GPU for preview
- opts.remapUsingGPU = false;
opts.setWidth(m_panoImgSize.x, false);
opts.setHeight(m_panoImgSize.y);
//m_panoImgSize.y = opts.getHeight();
diff -r acac931044e5 -r f0300b1a732b src/hugin1/hugin/wxPanoCommand.cpp
--- a/src/hugin1/hugin/wxPanoCommand.cpp Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin1/hugin/wxPanoCommand.cpp Sun Jul 17 12:09:44 2011 +0200
@@ -365,9 +365,6 @@
opts.enblendOptions = wxConfigBase::Get()->Read(wxT("/Enblend/Args"), wxT(HUGIN_ENBLEND_ARGS)).mb_str(wxConvLocal);
opts.enfuseOptions = wxConfigBase::Get()->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(wxConvLocal);
}
- // Set the nona gpu flag base on what is in preferences as it is not
- // stored in the file.
- opts.remapUsingGPU = wxConfigBase::Get()->Read(wxT("/Nona/UseGPU"),HUGIN_NONA_USEGPU) == 1;
pano.setOptions(opts);
HuginBase::StandardImageVariableGroups variableGroups(pano);
@@ -564,7 +561,6 @@
opts.enblendOptions = config->Read(wxT("Enblend/Args"),wxT(HUGIN_ENBLEND_ARGS)).mb_str(wxConvLocal);
opts.enfuseOptions = config->Read(wxT("Enfuse/Args"),wxT(HUGIN_ENFUSE_ARGS)).mb_str(wxConvLocal);
opts.interpolator = (vigra_ext::Interpolator)config->Read(wxT("Nona/Interpolator"),HUGIN_NONA_INTERPOLATOR);
- opts.remapUsingGPU = config->Read(wxT("Nona/useGPU"),HUGIN_NONA_USEGPU)!=0;
opts.tiff_saveROI = config->Read(wxT("Nona/CroppedImages"),HUGIN_NONA_CROPPEDIMAGES)!=0;
opts.hdrMergeMode = PanoramaOptions::HDRMERGE_AVERAGE;
opts.hdrmergeOptions = HUGIN_HDRMERGE_ARGS;
diff -r acac931044e5 -r f0300b1a732b src/hugin1/hugin/xrc/pref_dialog.xrc
--- a/src/hugin1/hugin/xrc/pref_dialog.xrc Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin1/hugin/xrc/pref_dialog.xrc Sun Jul 17 12:09:44 2011 +0200
@@ -1030,14 +1030,6 @@
<flag>wxALL|wxSHAPED|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border>
</object>
- <object class="sizeritem">
- <object class="wxCheckBox" name="prefs_nona_useGpu">
- <label>Use GPU for remapping (EXPERIMENTAL)</label>
- <tooltip>Use video card GPU to speed up remapping</tooltip>
- </object>
- <flag>wxLEFT|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
- <border>5</border>
- </object>
</object>
</object>
<flag>wxEXPAND</flag>
diff -r acac931044e5 -r f0300b1a732b src/hugin_base/CMakeLists.txt
--- a/src/hugin_base/CMakeLists.txt Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin_base/CMakeLists.txt Sun Jul 17 12:09:44 2011 +0200
@@ -53,10 +53,8 @@
panotools/PanoToolsInterface.cpp
panotools/PanoToolsOptimizerWrapper.cpp
panotools/PanoToolsUtils.cpp
-panotools/PanoToolsTransformGPU.cpp
vigra_ext/emor.cpp
vigra_ext/MultiThreadOperations.cpp
-vigra_ext/ImageTransformsGPU.cpp
)
SET(HUGIN_BASE_HEADER
@@ -119,7 +117,6 @@
panotools/PanoToolsUtils.h
vigra_ext/emor.h
vigra_ext/MultiThreadOperations.h
-vigra_ext/ImageTransformsGPU.h
)
IF (${HUGIN_SHARED_LIBS})
diff -r acac931044e5 -r f0300b1a732b src/hugin_base/algorithms/panorama_makefile/PanoramaMakefilelibExport.cpp
--- a/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefilelibExport.cpp Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefilelibExport.cpp Sun Jul 17 12:09:44 2011 +0200
@@ -236,7 +236,6 @@
mgr.own_add(new Comment("options for the programs"));
// set remapper specific settings
mf::Variable* vnonaldr = nullvar;
- mf::Variable* vnonaopts = nullvar;
if(opts.remapper == PanoramaOptions::NONA)
{
makefile::string val;
@@ -247,10 +246,6 @@
vnonaldr = mgr.own(new mf::Variable("NONA_LDR_REMAPPED_COMP", val, Makefile::NONE));
vnonaldr->getDef().add();
-
- vnonaopts = mgr.own(new mf::Variable("NONA_OPTS",
- opts.remapUsingGPU ? "-g " : "", Makefile::NONE));
- vnonaopts->getDef().add();
}
// set blender specific settings
@@ -758,8 +753,6 @@
if(opts.outputHDRLayers)
echoInfo(*info,"* Remapped images");
};
- if(opts.remapUsingGPU)
- echoInfo(*info,"Using GPU for remapping");
echoInfo(*info,"===========================================================================");
echoInfo(*info,"Input images");
@@ -801,7 +794,7 @@
ruleldr->addPrereq(source);
ruleldr->addPrereq(vprojectfile);
ruleldr->addCommand(
- vnona->getRef() +" "+ vnonaopts->getRef() +" "+ vnonaldr->getRef()
+ vnona->getRef() + " " + vnonaldr->getRef()
+ " -r ldr -m " + ldrRemappedMode + " -o " + vldrremappedprefixshell->getRef() +
" -i " + imgnr.str() +" "+ vprojectfileshell->getRef());
@@ -811,7 +804,7 @@
rulehdr->addPrereq(source);
rulehdr->addPrereq(vprojectfile);
rulehdr->addCommand(
- vnona->getRef() +" "+ vnonaopts->getRef() +" -r hdr -m " + hdrRemappedMode + " -o " +
+ vnona->getRef() + " -r hdr -m " + hdrRemappedMode + " -o " +
vhdrstackremappedprefixshell->getRef() + " -i " + imgnr.str() +" "+ vprojectfileshell->getRef());
}
@@ -831,7 +824,7 @@
rule->addPrereq(Makefile::quote(pano.getImage(*it).getFilename(), Makefile::MAKE));
rule->addPrereq(vprojectfile);
rule->addCommand(
- vnona->getRef() +" "+ vnonaopts->getRef() +" "+ vnonaldr->getRef()
+ vnona->getRef() +" "+ vnonaldr->getRef()
+ " -r ldr -e " + expvalue.str() + " -m " + ldrRemappedMode + " -o " + vldrexposureremappedprefixshell->getRef() +
" -i " + imgnr.str() +" "+ vprojectfileshell->getRef());
diff -r acac931044e5 -r f0300b1a732b src/hugin_base/nona/ImageRemapper.h
--- a/src/hugin_base/nona/ImageRemapper.h Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin_base/nona/ImageRemapper.h Sun Jul 17 12:09:44 2011 +0200
@@ -190,12 +190,6 @@
int width = info.width();
int height = info.height();
- if (opts.remapUsingGPU) {
- // Extend image width to multiple of 8 for fast GPU transfers.
- const int r = width % 8;
- if (r != 0) width += 8 - r;
- }
-
ImageType srcImg(width, height);
m_remapped->m_ICCProfile = info.getICCProfile();
diff -r acac931044e5 -r f0300b1a732b src/hugin_base/nona/RemappedPanoImage.h
--- a/src/hugin_base/nona/RemappedPanoImage.h Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin_base/nona/RemappedPanoImage.h Sun Jul 17 12:09:44 2011 +0200
@@ -196,7 +196,6 @@
#include <photometric/ResponseTransform.h>
#include <vigra_ext/ImageTransforms.h>
-#include <vigra_ext/ImageTransformsGPU.h>
#ifdef DEBUG
#define DEBUG_REMAP 1
@@ -223,12 +222,6 @@
m_srcImg = src;
m_destImg = dest;
- if (m_destImg.remapUsingGPU) {
- // Make width multiple of 8 for fast GPU transfers.
- const int r = roi.width() % 8;
- if (r != 0) roi.addSize(vigra::Size2D(8 - r, 0));
- }
-
Base::resize(roi);
m_transf.createTransform(src, dest);
@@ -432,18 +425,12 @@
// msg <<"remapping image " << imgNr;
// progress.setMessage(msg.str().c_str());
- const bool useGPU = m_destImg.remapUsingGPU;
-
if (Base::boundingBox().isEmpty())
return;
vigra::Diff2D srcImgSize = srcImg.second - srcImg.first;
vigra::Size2D expectedSize = m_srcImg.getSize();
- if (useGPU) {
- const int r = expectedSize.width() % 8;
- if (r != 0) expectedSize += vigra::Diff2D(8 - r, 0);
- }
DEBUG_DEBUG("srcImgSize: " << srcImgSize << " m_srcImgSize: " << m_srcImg.getSize());
vigra_precondition(srcImgSize == expectedSize,
@@ -482,20 +469,7 @@
switch (m_srcImg.getCropMode()) {
case SrcPanoImage::NO_CROP:
{
- if (useGPU) {
- if (srcImgSize != m_srcImg.getSize()) {
- // src image with was increased for alignment reasons.
- // Need to make an alpha image to mask off the extended region.
- initImage(vigra::destImageRange(alpha),0);
- initImage(alpha.upperLeft(),
- alpha.upperLeft()+m_srcImg.getSize(),
- alpha.accessor(),255);
- }
- else
- initImage(vigra::destImageRange(alpha),255);
- }
- else
- initImage(vigra::destImageRange(alpha),255);
+ initImage(vigra::destImageRange(alpha),255);
break;
}
case SrcPanoImage::CROP_CIRCLE:
@@ -529,72 +503,26 @@
}
if(m_srcImg.hasActiveMasks())
vigra_ext::applyMask(vigra::destImageRange(alpha), m_srcImg.getActiveMasks());
- if (useGPU) {
- transformImageAlphaGPU(srcImg,
- vigra::srcImage(alpha),
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interpol,
- progress);
- } else {
- transformImageAlpha(srcImg,
- vigra::srcImage(alpha),
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interpol,
- progress);
- }
+ transformImageAlpha(srcImg,
+ vigra::srcImage(alpha),
+ destImageRange(Base::m_image),
+ destImage(Base::m_mask),
+ Base::boundingBox().upperLeft(),
+ m_transf,
+ invResponse,
+ m_srcImg.horizontalWarpNeeded(),
+ interpol,
+ progress);
} else {
- if (useGPU) {
- if (srcImgSize != m_srcImg.getSize()) {
- // src image with was increased for alignment reasons.
- // Need to make an alpha image to mask off the extended region.
- vigra::BImage alpha(srcImgSize.x, srcImgSize.y, vigra::UInt8(0));
- initImage(alpha.upperLeft(),
- alpha.upperLeft()+m_srcImg.getSize(),
- alpha.accessor(),255);
- transformImageAlphaGPU(srcImg,
- vigra::srcImage(alpha),
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interpol,
- progress);
-
- }
- else {
- transformImageGPU(srcImg,
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interpol,
- progress);
- }
- } else {
- transformImage(srcImg,
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interpol,
- progress);
- }
+ transformImage(srcImg,
+ destImageRange(Base::m_image),
+ destImage(Base::m_mask),
+ Base::boundingBox().upperLeft(),
+ m_transf,
+ invResponse,
+ m_srcImg.horizontalWarpNeeded(),
+ interpol,
+ progress);
}
}
@@ -609,18 +537,12 @@
vigra_ext::Interpolator interp,
AppBase::MultiProgressDisplay & progress)
{
- const bool useGPU = m_destImg.remapUsingGPU;
-
if (Base::boundingBox().isEmpty())
return;
vigra::Diff2D srcImgSize = srcImg.second - srcImg.first;
vigra::Size2D expectedSize = m_srcImg.getSize();
- if (useGPU) {
- const int r = expectedSize.width() % 8;
- if (r != 0) expectedSize += vigra::Diff2D(8 - r, 0);
- }
vigra_precondition(srcImgSize == expectedSize,
"RemappedPanoImage<RemapImage,AlphaImage>::remapImage(): image sizes not consistent");
@@ -694,54 +616,27 @@
if(m_srcImg.hasActiveMasks())
vigra_ext::applyMask(vigra::destImageRange(alpha), m_srcImg.getActiveMasks());
- if (useGPU) {
- vigra_ext::transformImageAlphaGPU(srcImg,
- vigra::srcImage(alpha),
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interp,
- progress);
- } else {
- vigra_ext::transformImageAlpha(srcImg,
- vigra::srcImage(alpha),
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interp,
- progress);
- }
+ vigra_ext::transformImageAlpha(srcImg,
+ vigra::srcImage(alpha),
+ destImageRange(Base::m_image),
+ destImage(Base::m_mask),
+ Base::boundingBox().upperLeft(),
+ m_transf,
+ invResponse,
+ m_srcImg.horizontalWarpNeeded(),
+ interp,
+ progress);
} else {
- if (useGPU) {
- // extended region (if any) should already be cleared since ImportImageAlpha shouldn't have touched it.
- vigra_ext::transformImageAlphaGPU(srcImg,
- alphaImg,
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interp,
- progress);
- } else {
- vigra_ext::transformImageAlpha(srcImg,
- alphaImg,
- destImageRange(Base::m_image),
- destImage(Base::m_mask),
- Base::boundingBox().upperLeft(),
- m_transf,
- invResponse,
- m_srcImg.horizontalWarpNeeded(),
- interp,
- progress);
- }
+ vigra_ext::transformImageAlpha(srcImg,
+ alphaImg,
+ destImageRange(Base::m_image),
+ destImage(Base::m_mask),
+ Base::boundingBox().upperLeft(),
+ m_transf,
+ invResponse,
+ m_srcImg.horizontalWarpNeeded(),
+ interp,
+ progress);
}
}
diff -r acac931044e5 -r f0300b1a732b src/hugin_base/panodata/PanoramaOptions.h
--- a/src/hugin_base/panodata/PanoramaOptions.h Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin_base/panodata/PanoramaOptions.h Sun Jul 17 12:09:44 2011 +0200
@@ -209,7 +209,6 @@
blendMode = ENBLEND_BLEND;
hdrMergeMode = HDRMERGE_AVERAGE;
remapper = NONA;
- remapUsingGPU = false;
saveCoordImgs = false;
huberSigma = 2;
photometricHuberSigma = 2/255.0;
@@ -365,7 +364,6 @@
BlendingMechanism blendMode;
HDRMergeType hdrMergeMode;
Remapper remapper;
- bool remapUsingGPU;
bool saveCoordImgs;
diff -r acac931044e5 -r f0300b1a732b src/hugin_base/panotools/PanoToolsInterface.h
--- a/src/hugin_base/panotools/PanoToolsInterface.h Sun Jul 17 12:08:26 2011 +0200
+++ b/src/hugin_base/panotools/PanoToolsInterface.h Sun Jul 17 12:09:44 2011 +0200
@@ -213,15 +213,10 @@
bool transformImgCoord(double & x_dest, double & y_dest,
double x_src, double y_src) const;
- bool transformImgCoordPartial(double & x_dest, double & y_dest, double x_src, double y_src) const;
-
///
bool transformImgCoord(hugin_utils::FDiff2D& dest, const hugin_utils::FDiff2D & src) const
{ return transformImgCoord(dest.x, dest.y, src.x, src.y); }
-
- bool emitGLSL(std::ostringstream& oss) const;
-
private:
// update internal PT data structs.
void updatePTData(const vigra::Diff2D &srcSize,
diff -r acac931044e5 -r f0300b1a732b src/hugin_base/panotools/PanoToolsTransformGPU.cpp
--- a/src/hugin_base/panotools/PanoToolsTransformGPU.cpp Sun Jul 17 12:08:26 2011 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-// -*- c-basic-offset: 4 -*-
-
-/** @file PanoToolsTransformGPU.cpp
- *
- * @brief GPU shader program conversion for PTools::Transform
- *
- * @author Andrew Mihal
- *
- * $Id$
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this software; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <hugin_config.h>
-
-#include <stdlib.h>
|