2012-02-01 75 views
1

我曾尝试在CUDA中获取未知错误的CUDA程序

RT_PROGRAM void bounds (int primIdx, float result[6]) 
{ 
    int3 v_idx = index_buffer[primIdx]; 

    float3 v0 = vertex_buffer[ v_idx.x ]; 
    float3 v1 = vertex_buffer[ v_idx.y ]; 
    float3 v2 = vertex_buffer[ v_idx.z ]; 

    float3 min = fminf(fminf(v0, v1), v2); 
    float3 max = fmaxf(fmaxf(v0, v1), v2); 

    Aabb* aabb = (Aabb*)result; 
    aabb->m_min = min; 
    aabb->m_max = max; 
} 

如果我使用下面的行,而不是最后都不会发生的错误写边框方案网格:

aabb->m_min = make_float3(0); 
aabb->m_max = make_float3(0); 

在主机上我用这个初始代码:

Program mesh_bounds = g_ctx->createProgramFromPTXFile(ptx_path, "bounds"); 
Program mesh_intersect = g_ctx->createProgramFromPTXFile(ptx_path, "intersect2"); 

// create buffers 
Buffer idx_buffer = g_ctx->createBuffer(RT_BUFFER_INPUT, RT_FORMAT_INT3, mesh->nfaces); // mesh->nfaces should always be 1 for triangles 
Buffer vtx_buffer = g_ctx->createBuffer(RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, mesh->nvertices); 
Buffer nor_buffer = g_ctx->createBuffer(RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, mesh->nfaces); // should only has 1 normal 

// load materials 
Material mat = g_ctx->createMaterial(); 

// create the Geometry 
    Geometry geo = g_ctx->createGeometry(); 
    geo->setPrimitiveCount(mesh->nfaces); // mesh->nfaces should be 1 

// set both programs to geometry 
geo->setBoundingBoxProgram(mesh_bounds); 
geo->setIntersectionProgram(mesh_intersect); 

// set buffers 
geo["vertex_buffer"]->setBuffer(vtx_buffer); 
geo["normal_buffer"]->setBuffer(nor_buffer); 
geo["index_buffer"]->setBuffer(idx_buffer); 

// create Geometry Instance 
GeometryInstance inst = g_ctx->createGeometryInstance(); 
inst->setGeometry(geo); 
inst->setMaterialCount(1); 
inst->setMaterial(0, mat); 

    GeometryGroup grp = g_ctx->createGeometryGroup(); 
grp->setChildCount(1); 
grp->setChild(0, inst); 
    grp->setAcceleration(g_ctx->createAcceleration("Bvh", "Bvh")); 
    g_meshes.push_back(grp); 

启动脚本中,我得到以下错误消息后:

***ERROR***: Unknown error (Details: Function "_rtContextLaunch2D" caught exception: 
Encountered a CUDA error: driver(). cuEventSynchronize(m_event) returned (999): 
Unknown, [6619195]) 

有没有人有想法?

+0

感觉就像你有索引问题。就像你可能正在索引分配空间一样。 – kingchris 2012-02-01 20:29:45

+0

通常情况下,您应该拥有与脸部一样多的索引。它在cuda程序中没有最后两行。 – blacklwhite 2012-02-01 20:39:24

回答

1

对不起,我的无知,但这条线脱颖而出。

Aabb* aabb = (Aabb*)result; 

您确定这是好吗?您将一个浮点指针转换为Aabb指针。你能指出Aabb是什么吗?即使这不是你的问题,为了更好的编译时间检查,也可以考虑使用新式转换。

Aabb* aabb= static_cast<Aabb*> (result) 
+0

这应该是对的。我发现在cuda-examples和这里的球体边界框的每个例子中:https://code.rodsoft.org/svn/rodsoft/branches/rtgpu/using_optix/src/triangle_mesh.cu – blacklwhite 2012-02-01 20:37:28

+0

好的。我找不到Aabb是什么,但这似乎不成问题。 – 2012-02-01 20:45:03