← Back to team overview

hugin-devs team mailing list archive

[Bug 1362170] Re: nona GPU for remapping : seg fault

 

nona version 2014.0.0.51ff237f209e

nona -g -z LZW -r ldr -m TIFF_m -o test  -i 0 -d ~/raw/pano/test.pto


nona: using graphics card: ATI Technologies Inc. AMD Radeon HD 7900 Series  
destStart=[2719, 862]
destEnd=[6263, 3092]
destSize=[(3544, 2230)]
srcSize=[(5200, 3462)]
srcBuffer=0x7f92f5e40010
srcAlphaBuffer=0x7f92f1851010
destBuffer=0x7f92f3107010
destAlphaBuffer=0x7f92f297d010
destGLInternalFormat=GL_RGBA16
destGLFormat=GL_RGB
destGLType=GL_UNSIGNED_SHORT
srcGLInternalFormat=GL_RGBA16
srcGLFormat=GL_RGB
srcGLType=GL_UNSIGNED_SHORT
srcAlphaGLType=GL_UNSIGNED_BYTE
destAlphaGLType=GL_UNSIGNED_BYTE

warparound=0
needsAtanWorkaround=1
maxTextureSize=16384
Source chunks:
    [(0, 0) to (5200, 3462) = (5200x3462)]
Dest chunks:
    [(0, 0) to (1772, 2230) = (1772x2230)]
    [(1772, 0) to (3544, 2230) = (1772x2230)]
Total GPU memory used: 455759320
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) {
    if (abs(y) > x) {
        return sign(y) * (1.5707963267948965580 - atan(x, abs(y)));
    } else {
        return atan(y, x);
    }
}
float atan2_safe(const in float y, const in float x) {
    if (x >= 0.0) return atan2_xge0(y, x);
    else return (sign(y) * 3.1415926535897931160) - atan2_xge0(y, -x);
}
float atan_safe(const in float yx) {
    if (abs(yx) > 1.0) {
        return sign(yx) * (1.5707963267948965580 - atan(1.0/abs(yx)));
    } else {
        return atan(yx);
    }
}
void main(void)
{
    float discardA = 1.0;
    float discardB = 0.0;
    vec2 src = gl_TexCoord[0].st;
    src -= vec2(3220.0000000000000000, 1610.0000000000000000);

    // erect_pano(2975.6840327762110974)
    src.t = 2975.6840327762110974 * atan_safe(src.t / 2975.6840327762110974);

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

    // sphere_tp_erect(2975.6840327762110974)
    {
        float phi = src.s / 2975.6840327762110974;
        float theta = -src.t / 2975.6840327762110974 + 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 = 2975.6840327762110974 * atan2_safe(r, s * cos(phi));
        src = v * (theta / r);
    }

    // persp_sphere(2975.6840327762110974)
    {
        mat3 m = mat3(0.99971408939535111315, 0.023855460075879894588, -0.0016298739190327593985,
                      -0.023911074095988301552, 0.99738888563214511684, -0.068144488794355015382,
                      0.0000000000000000000, 0.068163977598405450786, 0.99767413124625226040);
        float r = length(src);
        float theta = r / 2975.6840327762110974;
        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 = 2975.6840327762110974 * atan2_safe(r, u.p) / r;
        src = theta * u.st;
    }

    // rect_sphere_tp(2975.6840327762110974)
    {
        float r = length(src);
        float theta = r / 2975.6840327762110974;
        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.3699592566685530048, 1.3699592566685530048)
    src *= vec2(1.3699592566685530048, 1.3699592566685530048);

    // radial(1.0429548248967042134, -0.043442402841601203412, 0.00056606295488714102656, -7.8485009990147399728e-05, 1731.0000000000000000, 10.201688571490457491)
    {
        float r = length(src) / 1731.0000000000000000;
        float scale = 1000.0; 
        if (r < 10.201688571490457491) {
            scale = ((-7.8485009990147399728e-05 * r + 0.00056606295488714102656) * r + -0.043442402841601203412) * r + 1.0429548248967042134;
        }
        src *= scale;
    }

    // vert(-194.77123258848499177)
    src.t += -194.77123258848499177;

    // horiz(55.943272105493100810)
    src.s += 55.943272105493100810;

    src += vec2(2597.5000000000000000, 1730.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 = 6.7287591143856949902e-05
    // srcExposure = 6.2988153004380474133e-05
    // 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(2597.5000000000000000, 1730.5000000000000000);
        float radiusScale=0.00032032259660654335701;
        float radialVigCorrCoeff0 = 1.0000000000000000000;
        float radialVigCorrCoeff1 = -0.40315108769259400123;
        float radialVigCorrCoeff2 = 0.46929248738107898209;
        float radialVigCorrCoeff3 = -0.33239440559684202414;
        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.0682578855610749269, 1.0682578855610749269, 1.0682578855610749269);
    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.063
gpu shader texture/framebuffer setup time = 0.009
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] coord image render time = 0.005
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] source chunk=[(0, 0) to (5200, 3462) = (5200x3462)] src upload = 0.081
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] source chunk=[(0, 0) to (5200, 3462) = (5200x3462)] src alpha upload = 0.007
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] source chunk=[(0, 0) to (5200, 3462) = (5200x3462)] src+alpha render = 0.005
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] source chunk=[(0, 0) to (5200, 3462) = (5200x3462)] interpolation chunk=[(0, 0) to (4, 4) = (4x4)] setup = 0
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] source chunk=[(0, 0) to (5200, 3462) = (5200x3462)] interpolation chunk=[(0, 0) to (4, 4) = (4x4)] render = 0.005
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] normalization setup = 0
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] normalization render = 0.001
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] dest rgb disassembly setup = 0
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] dest rgb disassembly render = 0.003
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] rgb readback = 0.039
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] dest alpha disassembly setup = 0
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] dest alpha disassembly render = 0.001
gpu dest chunk=[(0, 0) to (1772, 2230) = (1772x2230)] alpha readback = 0.009
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] coord image render time = 0.001
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] source chunk=[(0, 0) to (5200, 3462) = (5200x3462)] interpolation chunk=[(0, 0) to (4, 4) = (4x4)] setup = 0
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] source chunk=[(0, 0) to (5200, 3462) = (5200x3462)] interpolation chunk=[(0, 0) to (4, 4) = (4x4)] render = 0.005
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] normalization setup = 0
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] normalization render = 0.001
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] dest rgb disassembly setup = 0
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] dest rgb disassembly render = 0.001
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] rgb readback = 0.025
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] dest alpha disassembly setup = 0.001
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] dest alpha disassembly render = 0.001
gpu dest chunk=[(1772, 0) to (3544, 2230) = (1772x2230)] alpha readback = 0.008
gpu destruct time = 0
gpu total time = 0.273
Erreur de segmentation

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

Title:
  nona GPU for remapping : seg fault

Status in Hugin - Panorama Tools GUI:
  New

Bug description:
  If i activate the  GPU for remapping, it's always crash :

  
  ===========================================================================
  ***************  Panorama makefile generated by Hugin       ***************
  ===========================================================================
  System information
  ===========================================================================
  Operating system: GNU/Linux
  Release: 3.14.14-gentoo
  Kernel version: #1 SMP Thu Aug 14 21:23:51 CEST 2014
  Machine: x86_64
  Disc usage
  Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
  /dev/sda2           23G     19G  3,1G  86% /
  devtmpfs           3,9G       0  3,9G   0% /dev
  tmpfs              3,9G    320K  3,9G   1% /dev/shm
  tmpfs              3,9G    1,1M  3,9G   1% /run
  tmpfs              3,9G       0  3,9G   0% /sys/fs/cgroup
  tmpfs              3,9G    2,1M  3,9G   1% /tmp
  /dev/sda3          212G    173G   28G  87% /home
  /dev/sdb2          816G    677G   98G  88% /Backup
  /dev/sdc2          241G    136G   93G  60% /home/roumano/Musique
  /dev/sdc3          1,3T    1,2T   17G  99% /home/roumano/Vidéos
  tmpfs              796M     52K  796M   1% /run/user/500
  Memory usage
               total       used       free     shared    buffers     cached
  Mem:          7956       5647       2308         28        117        820
  -/+ buffers/cache:       4710       3245
  Swap:         3906       1775       2130
  ===========================================================================
  Output options
  ===========================================================================
  Hugin Version: 2014.0.0.51ff237f209e
  Project file: /tmp/huginpto_L9TZUg
  Output prefix: test
  Projection: Cylindrical (1)
  Field of view: 124 x 57
  Canvas dimensions: 6491 x 3246
  Crop area: (235,872) - (6306,3122)
  Output exposure value: 13.82
  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: 3
  Number of active images: 3
  Image 0: /home/roumano/raw/pano/2014-08-06--17.48.49.CR2.tif
  Image 0: Size 5196x3462, Exposure: 13.95
  Image 1: /home/roumano/raw/pano/2014-08-06--17.48.51.CR2.tif
  Image 1: Size 5196x3462, Exposure: 13.80
  Image 2: /home/roumano/raw/pano/2014-08-06--17.48.53.CR2.tif
  Image 2: Size 5196x3462, Exposure: 13.72
  ===========================================================================
  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 test -i 0 /tmp/huginpto_L9TZUg
  nona: using graphics card: ATI Technologies Inc. AMD Radeon HD 7900 Series  
  make: *** [test0000.tif] Erreur de segmentation
  make: *** Suppression du fichier « test0000.tif »

  
  My card it's a ATI 7950 ( lspci : AMD/ATI] Tahiti PRO [Radeon HD 7950/8950 OEM / R9 280] )
  Driver used : ati-drivers-14.6_beta1
  on another exemple, OpenCL on my computer is working great (much faster than via the pcu ) via darktable
  Debug information from darktable :  ( if it's can help ) 
  [opencl_init] device 0 `Tahiti' supports image sizes of 16384 x 16384
  [opencl_init] device 0 `Tahiti' allows GPU memory allocations of up to 1024MB
  [opencl_init] device 0: Tahiti 
       GLOBAL_MEM_SIZE:          2392MB
       MAX_WORK_GROUP_SIZE:      256
       MAX_WORK_ITEM_DIMENSIONS: 3
       MAX_WORK_ITEM_SIZES:      [ 256 256 256 ]
       DRIVER_VERSION:           1526.3 (VM)
       DEVICE_VERSION:           OpenCL 1.2 AMD-APP (1526.3)

  Don't known how to provide more information :
  - I have recompiled higin with debug information (no more information in the GUI)
  - don't known how to test nona from the commande line

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


References