Skip to content

Commit

Permalink
Move nodeCalc unique ptr to the GPU function
Browse files Browse the repository at this point in the history
... and spare some CPU cycles
  • Loading branch information
elpaso committed Dec 3, 2018
1 parent 5ef8737 commit 61dd729
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 5 deletions.
7 changes: 3 additions & 4 deletions src/analysis/raster/qgsrastercalculator.cpp
Expand Up @@ -17,7 +17,6 @@


#include "qgsgdalutils.h" #include "qgsgdalutils.h"
#include "qgsrastercalculator.h" #include "qgsrastercalculator.h"
#include "qgsrastercalcnode.h"
#include "qgsrasterdataprovider.h" #include "qgsrasterdataprovider.h"
#include "qgsrasterinterface.h" #include "qgsrasterinterface.h"
#include "qgsrasterlayer.h" #include "qgsrasterlayer.h"
Expand Down Expand Up @@ -95,7 +94,7 @@ QgsRasterCalculator::Result QgsRasterCalculator::processCalculation( QgsFeedback
// Check for matrix nodes, GPU implementation does not support them // Check for matrix nodes, GPU implementation does not support them
QList<const QgsRasterCalcNode *> nodeList; QList<const QgsRasterCalcNode *> nodeList;
if ( QgsOpenClUtils::enabled() && QgsOpenClUtils::available() && calcNode->findNodes( QgsRasterCalcNode::Type::tMatrix ).isEmpty() ) if ( QgsOpenClUtils::enabled() && QgsOpenClUtils::available() && calcNode->findNodes( QgsRasterCalcNode::Type::tMatrix ).isEmpty() )
return processCalculationGPU( feedback ); return processCalculationGPU( std::move( calcNode ), feedback );
#endif #endif


//open output dataset for writing //open output dataset for writing
Expand Down Expand Up @@ -313,9 +312,9 @@ QgsRasterCalculator::Result QgsRasterCalculator::processCalculation( QgsFeedback
} }


#ifdef HAVE_OPENCL #ifdef HAVE_OPENCL
QgsRasterCalculator::Result QgsRasterCalculator::processCalculationGPU( QgsFeedback *feedback ) QgsRasterCalculator::Result QgsRasterCalculator::processCalculationGPU( std::unique_ptr< QgsRasterCalcNode > calcNode, QgsFeedback *feedback )
{ {
std::unique_ptr< QgsRasterCalcNode > calcNode( QgsRasterCalcNode::parseRasterCalcString( mFormulaString, mLastError ) );
QString cExpression( calcNode->toString( true ) ); QString cExpression( calcNode->toString( true ) );


QList<const QgsRasterCalcNode *> nodeList( calcNode->findNodes( QgsRasterCalcNode::Type::tRasterRef ) ); QList<const QgsRasterCalcNode *> nodeList( calcNode->findNodes( QgsRasterCalcNode::Type::tRasterRef ) );
Expand Down
3 changes: 2 additions & 1 deletion src/analysis/raster/qgsrastercalculator.h
Expand Up @@ -25,6 +25,7 @@
#include "gdal.h" #include "gdal.h"
#include "qgis_analysis.h" #include "qgis_analysis.h"
#include "qgsogrutils.h" #include "qgsogrutils.h"
#include "qgsrastercalcnode.h"


class QgsRasterLayer; class QgsRasterLayer;
class QgsFeedback; class QgsFeedback;
Expand Down Expand Up @@ -152,7 +153,7 @@ class ANALYSIS_EXPORT QgsRasterCalculator
void outputGeoTransform( double *transform ) const; void outputGeoTransform( double *transform ) const;


//! Execute calculations on GPU //! Execute calculations on GPU
Result processCalculationGPU( QgsFeedback *feedback = nullptr ); Result processCalculationGPU( std::unique_ptr< QgsRasterCalcNode > calcNode, QgsFeedback *feedback = nullptr );


QString mFormulaString; QString mFormulaString;
QString mOutputFile; QString mOutputFile;
Expand Down

0 comments on commit 61dd729

Please sign in to comment.