00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "cpl_error.h"
00031 #include "cpl_quad_tree.h"
00032
00033 typedef struct
00034 {
00035 const double* padfX;
00036 const double* padfY;
00037 } GDALGridXYArrays;
00038
00039 typedef struct
00040 {
00041 GDALGridXYArrays* psXYArrays;
00042 int i;
00043 } GDALGridPoint;
00044
00045 typedef struct
00046 {
00047 CPLQuadTree* hQuadTree;
00048 double dfInitialSearchRadius;
00049 const float *pafX;
00050 const float *pafY;
00051 const float *pafZ;
00052 } GDALGridExtraParameters;
00053
00054 #ifdef HAVE_SSE_AT_COMPILE_TIME
00055 int CPLHaveRuntimeSSE();
00056
00057 CPLErr
00058 GDALGridInverseDistanceToAPower2NoSmoothingNoSearchSSE(
00059 const void *poOptions,
00060 GUInt32 nPoints,
00061 const double *unused_padfX,
00062 const double *unused_padfY,
00063 const double *unused_padfZ,
00064 double dfXPoint, double dfYPoint,
00065 double *pdfValue,
00066 void* hExtraParamsIn );
00067 #endif
00068
00069 #ifdef HAVE_AVX_AT_COMPILE_TIME
00070 int CPLHaveRuntimeAVX();
00071
00072 CPLErr GDALGridInverseDistanceToAPower2NoSmoothingNoSearchAVX(
00073 const void *poOptions,
00074 GUInt32 nPoints,
00075 const double *unused_padfX,
00076 const double *unused_padfY,
00077 const double *unused_padfZ,
00078 double dfXPoint, double dfYPoint,
00079 double *pdfValue,
00080 void* hExtraParamsIn );
00081 #endif
00082
00083 #if defined(__GNUC__)
00084 #if defined(__x86_64)
00085 #define GCC_CPUID(level, a, b, c, d) \
00086 __asm__ ("xchgq %%rbx, %q1\n" \
00087 "cpuid\n" \
00088 "xchgq %%rbx, %q1" \
00089 : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
00090 : "0" (level))
00091 #else
00092 #define GCC_CPUID(level, a, b, c, d) \
00093 __asm__ ("xchgl %%ebx, %1\n" \
00094 "cpuid\n" \
00095 "xchgl %%ebx, %1" \
00096 : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
00097 : "0" (level))
00098 #endif
00099 #endif