AnsweredAssumed Answered

OpenGL 4.3 compute shaders crash on some ATI cards (6970 HD and probably older)

Question asked by alexene on Jan 16, 2014
Latest reply on Feb 11, 2014 by alexene

Hello,

 

I was looking into compute shaders and Opengl 4.3 and I made a small project to try stuff out.

To my surprise I started experiencing a 100% crash on my home video card (6970 HD, a card that should have OpenGL 4.3 support).

On other (newer from the HD 7xxx series) cards everything works fine. On NVIDIA cards ( the one I tested ) I had no issues with this.

It is my first attempt at learning OpenGL so I might do something really wrong, but I can't figure out what .

Crash always happens here in glDispatchCompute ( at the first call ). I have gl debug callback set and I get no errors at all.

 

Here is the code near the crash:

 

//Bind the position and speed buffers

    glBindBufferRange(GL_SHADER_STORAGE_BUFFER, 0, m_glPositionBuffer, 0, m_ParticleCount*sizeof(ParticlePos));

    glBindBufferRange(GL_SHADER_STORAGE_BUFFER, 1, m_glVelocityBuffer, 0, m_ParticleCount*sizeof(ParticleVelocity));

 

//Setup and execute the compute shader

    const int workgroups_count = 1024/32;

    glDispatchCompute(workgroups_count, workgroups_count, 2);

glMemoryBarrier(GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT);

 

Buffers are allocated with the usual glGenBuffers, glBind, glBufferData flow.

 

This always crashes in if I read AND write to the shader buffer objects in my compute shader. The callstack for this crash is:

atioglxx.dll!53492fce()    Unknown

[Frames below may be incorrect and/or missing, no symbols loaded for atioglxx.dll]

atioglxx.dll!53492755()    Unknown

atioglxx.dll!5348913e()    Unknown

atioglxx.dll!52958bd1()    Unknown

atioglxx.dll!52cf44e6()    Unknown

atioglxx.dll!53035053()    Unknown

Particles_d.exe!ParticleSystem::Update(float dt) Line 127    C++

Particles_d.exe!Update(float dt) Line 161    C++

Particles_d.exe!SDL_main(int argc, char * * argv) Line 238    C++

Particles_d.exe!main(int argc, char * * argv) Line 140    C

Particles_d.exe!__tmainCRTStartup() Line 536    C

Particles_d.exe!mainCRTStartup() Line 377    C

 

The exception that I get is :

First-chance exception at 0x53492FCE (atioglxx.dll) in Particles_d.exe: 0xC0000005: Access violation reading location 0x00000020.

Unhandled exception at 0x53492FCE (atioglxx.dll) in Particles_d.exe: 0xC0000005: Access violation reading location 0x00000020.

 

If I remove the 2 lines from the compute shader (ComputeShader.glsl) that write to the buffers, everything works fine. I can still read from them ok, without any problem.

These are the lines that should write back to the shader storage object buffers: ( by removing them everything will be ok ).

//Save the new possitions and velocities

Pos[index] = particlePos;

Velocity[index] = newParticleVelocity;

 

The project is on github if anybody wants to take a closer look at it : https://github.com/AlexEne/GL_Particles

 

 

Thank you,

Alexandru Ene

 

 

More info from Catalyst Control center:

Driver Packaging Version    13.251-131206a-166389C-ATI

Catalyst Version    13.12

Provider    Advanced Micro Devices, Inc.

2D Driver Version    8.01.01.1360

2D Driver File Path    /REGISTRY/MACHINE/SYSTEM/ControlSet001/Control/CLASS/{4D36E968-E325-11CE-BFC1-08002BE10318}/0000

Direct3D Version    9.14.10.01001

OpenGL Version    6.14.10.12618

AMD Catalyst Control Center Version    2013.1206.1603.28764

Outcomes