1
$\begingroup$

I built a simple Ray Tracer which takes use of OpenGL's Compute Shader and traces ".obj" Files. The results are passed to the Host-Program via glMapBufferRange after finishing computing. From there I will output the result as png to validate the result... When I change the dimensions for the output the computation will obviously take longer.

Now to the problem/question:

Let's say the computation works fine with a 300x300 .png image file and I get the result I want. When I increase the size of the image to something like 500x500 I'll get a GL_OUT_OF_MEMORY Error after some time. And only when I try to copy data with glMapBufferRange.

When I'm using a BVH-Structure to accelerate the computation it works with 500x500 and larger images within a shorter time period.

So I think that the Operating System is shutting down the GPU after some time and thus resulting into a invalid Memory Access. Not sure though.

I've been using Ubuntu 20.04 for the program.

Can someone explain why I get an GL_OUT_OF_MEMORY? Is it more likly that I just have some Memory Leaks?

the probably critical part of the Code:

/* Some ssbo's and glsl-program defined above */
    glDispatchCompute(workgroup_x, workgroup_y, 1);
    glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT);


    glBindBuffer(GL_SHADER_STORAGE_BARRIER_BIT, defined_ssbo_buffer_idx);
    // Error occurs here when computation took around 5 sec or longer
    void* gpuData = glMapBufferRange(GL_SHADER_STORAGE_BARRIER_BIT, 0, size_of_buffer, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT);
    memcpy(copyDestination, gpuData, size_of_buffer);
    
    glUnmapBuffer(GL_SHADER_STORAGE_BARRIER_BIT)
    glBindBuffer(GL_SHADER_STORAGE_BARRIER_BIT, 0);

I really appreciate any help! Thank you very much and have a great day!

$\endgroup$

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.