← 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.

 

Changeset 35c1d9d96f3d

-- 
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:
  Fix Committed

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