← Back to team overview

hugin-devs team mailing list archive

[Bug 1322695] Re: Hugin won't create a panorama with "Use GPU for remapping" checked.

 

Note to self: Read the FAQ _before_ filling up the bug database.

http://http://wiki.panotools.org/Hugin_FAQ#GPU-stitching_.28nona.29

says that only nVidea & AMD graphics cards are supported.

Devs, is it worth adding some code so that the option is greyed out if
hugin does not detect an nVidea or AMD chip?

PS. My version is 2013.0.0.4692917e7a55

-- 
You received this bug notification because you are a member of Hugin
Developers, which is subscribed to Hugin.
https://bugs.launchpad.net/bugs/1322695

Title:
  Hugin won't create a panorama with "Use GPU for remapping" checked.

Status in Hugin - Panorama Tools GUI:
  New

Bug description:
  I've got a SandyBridge i7, no external graphics card.
  Hugin supplied with xubuntu 14.04.

  
  ===========================================================================
  ***************  Panorama makefile generated by Hugin       ***************
  ===========================================================================
  System information
  ===========================================================================
  Operating system: GNU/Linux
  Release: 3.13.0-24-generic
  Kernel version: #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014
  Machine: x86_64
  Disc usage
  Filesystem                                          Size  Used Avail Use% Mounted on
  /dev/sda3                                            94G  5.0G   84G   6% /
  none                                                4.0K     0  4.0K   0% /sys/fs/cgroup
  udev                                                3.8G  4.0K  3.8G   1% /dev
  tmpfs                                               771M  1.4M  769M   1% /run
  none                                                5.0M     0  5.0M   0% /run/lock
  none                                                3.8G  808K  3.8G   1% /run/shm
  none                                                100M   48K  100M   1% /run/user
  /dev/sda1                                           180M   36M  132M  22% /boot
  /dev/sda4                                           816G  436G  339G  57% /home

               total       used       free     shared    buffers     cached
  Mem:          7701       6183       1518        342         67       2464
  -/+ buffers/cache:       3650       4050
  Swap:         7812         56       7756
  ===========================================================================
  Output options
  ===========================================================================
  Hugin Version: 2013.0.0.4692917e7a55
  Project file: /tmp/huginpto_N2njr0
  Output prefix: IMG_8429-1 - IMG_8430-1
  Projection: Equirectangular (2)
  Field of view: 74 x 74
  Canvas dimensions: 4098 x 4098
  Crop area: (88,168) - (4027,3132)
  Output exposure value: 11.39
  Output stacks minimum overlap: 0.700
  Output layers maximum Ev difference: 0.50
  Selected outputs
  Normal panorama
  * Blended panorama
  Using GPU for remapping
  ===========================================================================
  Input images
  ===========================================================================
  Number of images in project file: 2
  Number of active images: 2
  Image 0: /home/ian/Pictures/2014-05-10 Boat Trip Leeds Liverpool/2014-05-12 Wigan Flight Down  Wigam Pier/converted/IMG_8429-1.tif
  Image 0: Size 2848x4282, Exposure: 11.40
  Image 1: /home/ian/Pictures/2014-05-10 Boat Trip Leeds Liverpool/2014-05-12 Wigan Flight Down  Wigam Pier/converted/IMG_8430-1.tif
  Image 1: Size 2848x4282, Exposure: 11.39
  ===========================================================================
  Testing programs
  ===========================================================================
  Checking nona...[OK]
  Checking enblend...[OK]
  Checking enfuse...[OK]
  Checking hugin_hdrmerge...[OK]
  Checking exiftool...[OK]
  ===========================================================================
  Stitching panorama
  ===========================================================================
  nona -g  -z LZW -r ldr -m TIFF_m -o IMG_8429-1\ -\ IMG_8430-1 -i 0 /tmp/huginpto_N2njr0
  nona: using graphics card: Intel Open Source Technology Center Mesa DRI Intel(R) Sandybridge Desktop 
  destStart=[88, 168]
  destEnd=[2664, 3132]
  destSize=[(2576, 2964)]
  srcSize=[(2848, 4282)]
  srcBuffer=0x2b1c5c686010
  srcAlphaBuffer=0
  destBuffer=0x2b1c60c4e010
  destAlphaBuffer=0x2b1c637ff010
  destGLInternalFormat=GL_RGBA16
  destGLFormat=GL_RGB
  destGLType=GL_UNSIGNED_SHORT
  srcGLInternalFormat=GL_RGBA16
  srcGLFormat=GL_RGB
  srcGLType=GL_UNSIGNED_SHORT
  srcAlphaGLType=GL_BYTE
  destAlphaGLType=GL_UNSIGNED_BYTE
  warparound=0
  needsAtanWorkaround=0
  maxTextureSize=8192
  Source chunks:
      [(0, 0) to (2848, 4282) = (2848x4282)]
  Dest chunks:
      [(0, 0) to (1288, 1482) = (1288x1482)]
      [(1288, 0) to (2576, 1482) = (1288x1482)]
      [(0, 1482) to (1288, 2964) = (1288x1482)]
      [(1288, 1482) to (2576, 2964) = (1288x1482)]
  Total GPU memory used: 260446256
  Interpolator chunks:
      [(0, 0) to (4, 4) = (4x4)]
  #version 110
  #extension GL_ARB_texture_rectangle : enable
  uniform sampler2DRect SrcTexture;
  float sinh(in float x) { return (exp(x) - exp(-x)) / 2.0; }
  float cosh(in float x) { return (exp(x) + exp(-x)) / 2.0; }
  float atan2_xge0(const in float y, const in float x) {
      return atan(y, x);
  }
  float atan2_safe(const in float y, const in float x) {
      return atan(y, x);
  }
  float atan_safe(const in float yx) {
      return atan(yx);
  }
  void main(void)
  {
      float discardA = 1.0;
      float discardB = 0.0;
      vec2 src = gl_TexCoord[0].st;
      src -= vec2(2049.0000000000000000, 2049.0000000000000000);

      // rotate_erect(9968.1081081081083539, 734.44677103224705661)
      {
          src.s += 734.44677103224705661;
          float w = (abs(src.s) > 9968.1081081081083539) ? 1.0 : 0.0;
          float n = (src.s < 0.0) ? 0.5 : -0.5;
          src.s += w * -19936.216216216216708 * ceil(src.s / 19936.216216216216708 + n);
      }

      // sphere_tp_erect(3172.9473573596128517)
      {
          float phi = src.s / 3172.9473573596128517;
          float theta = -src.t / 3172.9473573596128517 + 1.5707963267948965580;
          if (theta < 0.0) {
              theta = -theta;
              phi += 3.1415926535897931160;
          }
          if (theta > 3.1415926535897931160) {
              theta = 3.1415926535897931160 - (theta - 3.1415926535897931160);
              phi += 3.1415926535897931160;
          }
          float s = sin(theta);
          vec2 v = vec2(s * sin(phi), cos(theta));
          float r = length(v);
          theta = 3172.9473573596128517 * atan2_safe(r, s * cos(phi));
          src = v * (theta / r);
      }

      // persp_sphere(3172.9473573596128517)
      {
          mat3 m = mat3(1.0000000000000000000, 8.3266726846886789836e-17, 6.1716875719902952767e-18,
                        -8.3495134752153772000e-17, 0.99726441659211662039, 0.073916732876835020138,
                        0.0000000000000000000, -0.073916732876835020138, 0.99726441659211662039);
          float r = length(src);
          float theta = r / 3172.9473573596128517;
          float s = 0.0;
          if (r != 0.0) s = sin(theta) / r;
          vec3 v = vec3(s * src.s, s * src.t, cos(theta));
          vec3 u = v * m;
          r = length(u.st);
          theta = 0.0;
          if (r != 0.0) theta = 3172.9473573596128517 * atan2_safe(r, u.p) / r;
          src = theta * u.st;
      }

      // rect_sphere_tp(3172.9473573596128517)
      {
          float r = length(src);
          float theta = r / 3172.9473573596128517;
          float rho = 0.0;
          if (theta >= 1.5707963267948965580) rho = 1.6e16;
          else if (theta == 0.0) rho = 1.0;
          else rho = tan(theta) / theta;
          src *= rho;
      }

      // resize(1.0270517266772629661, 1.0270517266772629661)
      src *= vec2(1.0270517266772629661, 1.0270517266772629661);

      // radial(0.97371777052458663437, 0.0000000000000000000, 0.026282229475413400321, 0.0000000000000000000, 1424.0000000000000000, 1000.0000000000000000)
      {
          float r = length(src) / 1424.0000000000000000;
          float scale = 1000.0; 
          if (r < 1000.0000000000000000) {
              scale = ((0.0000000000000000000 * r + 0.026282229475413400321) * r + 0.0000000000000000000) * r + 0.97371777052458663437;
          }
          src *= scale;
      }

      src += vec2(1423.5000000000000000, 2140.5000000000000000);

      src = src * discardA + vec2(-1000.0, -1000.0) * discardB;
      gl_FragColor = vec4(src.s, 0.0, 0.0, src.t);
  }
  #version 110
  #extension GL_ARB_texture_rectangle : enable
  uniform sampler2DRect CoordTexture;
  uniform sampler2DRect SrcTexture;
  uniform sampler2DRect AccumTexture;
  uniform vec2 SrcUL;
  uniform vec2 SrcLR;
  uniform vec2 KernelUL;
  uniform vec2 KernelWH;
  float w(const in float i, const in float f) {
      float A = -0.75000000000000000000;
      float c = abs(i - 1.0);
      float m = (i > 1.0) ? -1.0 : 1.0;
      float p = c + m * f;
      if (i == 1.0 || i == 2.0) {
          return (( A + 2.0 )*p - ( A + 3.0 ))*p*p + 1.0;
      } else {
          return (( A * p - 5.0 * A ) * p + 8.0 * A ) * p - 4.0 * A;
      }
  }
  void main(void)
  {
      vec2 src = texture2DRect(CoordTexture, gl_TexCoord[0].st).sq;
      vec4 accum = texture2DRect(AccumTexture, gl_TexCoord[0].st);

      src -= SrcUL;
      vec2 t = floor(src) + -0.50000000000000000000;
      vec2 f = fract(src);
      vec2 k = vec2(0.0, 0.0);

      for (float ky = 0.0; ky < 4.0000000000000000000; ky += 1.0) {
          k.t = ky + KernelUL.t;
          float wy = w(k.t, f.t);
          for (float kx = 0.0; kx < 4.0000000000000000000; kx += 1.0) {
              k.s = kx + KernelUL.s;
              float wx = w(k.s, f.s);
              vec2 ix = t + k;
              vec4 sp = texture2DRect(SrcTexture, ix);
              float weight = wx * wy * sp.a;
              accum += sp * weight;
          }
      }

      gl_FragColor = accum;
  }

  #version 120
  #extension GL_ARB_texture_rectangle : enable
  uniform sampler2DRect NormTexture;
  uniform sampler2DRect CoordTexture;
  uniform sampler2DRect InvLutTexture;
  uniform sampler2DRect DestLutTexture;
  void main(void)
  {
      // Normalization
      vec4 n = texture2DRect(NormTexture, gl_TexCoord[0].st);
      vec4 p = vec4(0.0, 0.0, 0.0, 0.0);
      if (n.a >= 0.2) p = n / n.a;

      // Photometric
      // invLutSize = 1024.0000000000000000
      // pixelMax = 65535.000000000000000
      // destLutSize = 1024.0000000000000000
      // destExposure = 0.00037251857878706234493
      // srcExposure = 0.00037127799462741026227
      // whiteBalanceRed = 1.0000000000000000000
      // whiteBalanceBlue = 1.0000000000000000000
      p.rgb = p.rgb * 1023.0000000000000000;
      vec2 invR = texture2DRect(InvLutTexture, vec2(p.r, 0.0)).sq;
      vec2 invG = texture2DRect(InvLutTexture, vec2(p.g, 0.0)).sq;
      vec2 invB = texture2DRect(InvLutTexture, vec2(p.b, 0.0)).sq;
      vec3 invX = vec3(invR.x, invG.x, invB.x);
      vec3 invY = vec3(invR.y, invG.y, invB.y);
      vec3 invA = fract(p.rgb);
      p.rgb = mix(invX, invY, invA);
      // VigCorrMode=VIGCORR_RADIAL
      float vig = 1.0;
      {
          vec2 vigCorrCenter = vec2(1423.5000000000000000, 2140.5000000000000000);
          float radiusScale=0.00038890617819337537208;
          float radialVigCorrCoeff0 = 1.0000000000000000000;
          float radialVigCorrCoeff1 = 0.016847625337309098809;
          float radialVigCorrCoeff2 = 0.081252655071550994315;
          float radialVigCorrCoeff3 = -0.059167709616513797233;
          vec2 src = texture2DRect(CoordTexture, gl_TexCoord[0].st).sq;
          vec2 d = src - vigCorrCenter;
          d *= radiusScale;
          vig = radialVigCorrCoeff0;
          float r2 = dot(d, d);
          float r = r2;
          vig += radialVigCorrCoeff1 * r;
          r *= r2;
          vig += radialVigCorrCoeff2 * r;
          r *= r2;
          vig += radialVigCorrCoeff3 * r;
      }
      vec3 exposure_whitebalance = vec3(1.0033413888719611151, 1.0033413888719611151, 1.0033413888719611151);
      p.rgb = (p.rgb * exposure_whitebalance) / vig;
      p.rgb = p.rgb * 1023.0000000000000000;
      vec2 destR = texture2DRect(DestLutTexture, vec2(p.r, 0.0)).sq;
      vec2 destG = texture2DRect(DestLutTexture, vec2(p.g, 0.0)).sq;
      vec2 destB = texture2DRect(DestLutTexture, vec2(p.b, 0.0)).sq;
      vec3 destX = vec3(destR.x, destG.x, destB.x);
      vec3 destY = vec3(destR.y, destG.y, destB.y);
      vec3 destA = fract(p.rgb);
      p.rgb = mix(destX, destY, destA);

      gl_FragColor = p;
  }

  gpu shader program compile time = 0.028
  nona: Unsupported framebuffer format in: /build/buildd/hugin-2013.0.0+dfsg/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp:714
  make: *** [IMG_8429-1 - IMG_8430-10000.tif] Error 1

To manage notifications about this bug go to:
https://bugs.launchpad.net/hugin/+bug/1322695/+subscriptions


References