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

Bug #1322695 reported by Ian Prideaux
14
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Hugin
Fix Released
Undecided
Unassigned

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

Revision history for this message
Ian Prideaux (worzel2) wrote :

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

Revision history for this message
tmodes (tmodes) wrote :

The error "nona: Unsupported framebuffer format in.." should be fixed in default branch.

Changed in hugin:
status: New → Fix Committed
Revision history for this message
Martin Pecka (peci1) wrote :

Which commit contains the fix? I can't find any relevant change in the latest 2 months of commits in default.

Revision history for this message
tmodes (tmodes) wrote :

Changeset 35c1d9d96f3d

tmodes (tmodes)
Changed in hugin:
milestone: none → 2016.0beta1
status: Fix Committed → Fix Released
Revision history for this message
Martin Pecka (peci1) wrote :

I confirm the fix fixes this issue on Win 7 64bit / Intel GMA card with 64bit build of Hugin 2016.0. Thanks!

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.