我曾尝试在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])
有没有人有想法?
感觉就像你有索引问题。就像你可能正在索引分配空间一样。 – kingchris 2012-02-01 20:29:45
通常情况下,您应该拥有与脸部一样多的索引。它在cuda程序中没有最后两行。 – blacklwhite 2012-02-01 20:39:24