render image using CUDA

Aug 20, 2014 at 2:33 PM
( sorry for my english, i am french :) )
Hello, i am a noob in ManagedCuda, and i'm trying to translate a sample code from Cuda 6.0 (volumeRender) into C# using ManagedCuda... And i don't know how to deal with this part:
 // render image using CUDA
void render()
{
    copyInvViewMatrix(invViewMatrix, sizeof(float4)*3);

    // map PBO to get CUDA device pointer
    uint *d_output;
    // map PBO to get CUDA device pointer
    checkCudaErrors(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0));
    size_t num_bytes;
    checkCudaErrors(cudaGraphicsResourceGetMappedPointer((void **)&d_output, &num_bytes,
                                                         cuda_pbo_resource));
    //printf("CUDA mapped PBO: May access %ld bytes\n", num_bytes);

    // clear image
    checkCudaErrors(cudaMemset(d_output, 0, width*height*4));

    // call CUDA kernel, writing results to PBO
    render_kernel(gridSize, blockSize, d_output, width, height, density, brightness, transferOffset, transferScale);

    getLastCudaError("kernel failed");

    checkCudaErrors(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0));
}

void copyInvViewMatrix(float *invViewMatrix, size_t sizeofMatrix)
{
    checkCudaErrors(cudaMemcpyToSymbol(c_invViewMatrix, invViewMatrix, sizeofMatrix));
}

extern "C" void render_kernel(dim3 gridSize, dim3 blockSize, uint *d_output, uint imageW, uint imageH,float density, float brightness, float transferOffset, float transferScale)
{
    d_render<<<gridSize, blockSize>>>(d_output, imageW, imageH, density,
                                      brightness, transferOffset, transferScale);
}
Coordinator
Aug 20, 2014 at 4:25 PM
Bein dans ce cas, en français…
Le code est pour openGL et l’interop cuda <-> openGL, donc tu auras besoin de openTK ou une autre lib pour openGL en C#. Tu peux trouver un exemple pour la connexion cuda-openGL dans les exemples managedCuda dans le projet « FluidsGL ». Mais attention, FluidsGL ne contient pas de PBO (pixel buffer objects, texture/CuArray en Cuda), mais des VBO, des « vertex buffer objects » ou CUdeviceptr en Cuda…

-Michael
Aug 28, 2014 at 11:09 PM
MERCI ! en me basant sur ton code (FluidsGL ) , j'ai pu traduire tout le code en c# . J'avais l'habitude de coder en OpenCL (avec CLOO pour c# ), mais avec managed cuda , je peux maintenant débugger avec les outils de NSIGHT (wow !) [...] bref , Merci 1000x pour Managed Cuda :)