From: <hug...@li...> - 2011-07-27 16:44:24
|
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> |