Cannot map CUDA interop buffers

I get the following error on launch:

Invalid context (Details: Function "_rtContextLaunch1D" caught exception: Cannot map CUDA interop buffers, [14614601])
  • using GTX 980 + GTX 670 (not used), Win7 64bit, Visual Studio 12 64bit, cuda 7,
  • when setting the vertex/index buffer names for the Sbvh builder. Without setting these, everything seems to work fine.
  • using this code:
void Optix::init(
		int const idevice
		, ::glm::vec3 const* const vertexbuffer
		, int const numVertices
		, ::glm::ivec3 const* const indexbuffer
		, int const numIndices
		, gl::Texture const& positions
		)
	{
		try {
			using detail::ptxpath;
			using namespace ::gpu;

			m_context = optix::Context::create();

			this->idevice = idevice;
			// set device
			m_context->setDevices(&idevice, &idevice+1);

			cutsizes = m_context->createBufferForCUDA(RT_BUFFER_INPUT, RT_FORMAT_INT);
			m_context["cutsizes"]->setBuffer(cutsizes);

			data = m_context->createBufferForCUDA(RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_UNSIGNED_INT);
			m_context["data"]->setBuffer(data);
                        //initialized later

			
			m_context->setRayTypeCount(1);
			m_context->setEntryPointCount(1);
			
			
			m_context->setRayGenerationProgram(0, m_context->createProgramFromPTXFile(detail::ptxpath("shadow_request"), "shadow_request"));
			m_context->setExceptionProgram(0, m_context->createProgramFromPTXFile(detail::ptxpath("shadow_request"), "exception"));
			
			m_context->setMissProgram(0, m_context->createProgramFromPTXFile(detail::ptxpath("shadow_request"), "miss"));
			
			optix::Material opaque = m_context->createMaterial();
			opaque->setAnyHitProgram(0, m_context->createProgramFromPTXFile(detail::ptxpath("shadow_request"), "any_hit"));

			auto vb = m_context->createBufferForCUDA(RT_BUFFER_INPUT);
			{
				vb->setFormat(RT_FORMAT_FLOAT3);
				auto const ptr = vertexbuffer;
				MLIB_ERROR_ASSERT(ptr);
				auto const p = reinterpret_cast<CUdeviceptr>(ptr);
				vb->setDevicePointer(idevice, p);
				vb->setSize(numVertices);
				vb->validate();
			}
			
			
			auto index_buffer = m_context->createBufferForCUDA(RT_BUFFER_INPUT);
			{
				index_buffer->setFormat(RT_FORMAT_INT3);
				auto const ptr = indexbuffer;
				MLIB_ERROR_ASSERT(ptr);
				auto const p = reinterpret_cast<CUdeviceptr>(ptr);
				index_buffer->setDevicePointer(idevice, p);
				index_buffer->setSize(numIndices);
				index_buffer->validate();
			}
			
			//mesh
			auto geo = m_context->createGeometry();
			geo->setPrimitiveCount(numIndices);
			geo["vb"]->setBuffer(vb);
			geo["ib"]->setBuffer(index_buffer);
			geo->setIntersectionProgram(
				m_context->createProgramFromPTXFile(ptxpath("triangle_mesh_small"), "mesh_intersect")
				);
			geo->setBoundingBoxProgram(
				m_context->createProgramFromPTXFile(ptxpath("triangle_mesh_small"), "mesh_bounds")
				);
			

			
			
			auto const beg = &opaque;
			auto const end = &opaque + 1;
			auto instance = m_context->createGeometryInstance(geo, beg, end);
			instance->setMaterialCount(end - beg);
			for (auto i = 0; i < end - beg; ++i)
			{
				instance->setMaterial(i, beg[i]);
			}

			auto geogroup = m_context->createGeometryGroup();
			geogroup->setChildCount(1);
			geogroup->setChild(0, instance);
			
			auto accel = m_context->createAcceleration("Sbvh", "Bvh");
			//auto accel = m_context->createAcceleration("NoAccel", "NoAccel");
// if enabled, fails, otherwise just works
			accel->setProperty("vertex_buffer_name", "vb");
			accel->setProperty("index_buffer_name", "ib");
			geogroup->setAcceleration(accel);

			accel->markDirty();
			accel->validate();
			
			
			m_context["shadow_casters"]->set(geogroup);
			
			
		}
		catch (optix::Exception& e)
		{
			MLIB_ERROR_SIGNAL(::mlib::error::Exception(e.getErrorString()));
		}

	}

Also, the exact same vertex/index buffers just work when using optix prime:

void init(
			::cuda::Context const* const context
			, int const numTriangles
			, ::glm::ivec3 const* const indices
			, int const numVertices
			, ::glm::vec3 const* const vertices
			)
		{
			try {
				using namespace ::gpu;
				using namespace optix::prime;
				using namespace ::glm;

				rtContext = optix::prime::Context::create(RTP_CONTEXT_TYPE_CUDA);
				auto const device = unsigned(context->deviceId);
				rtContext->setCudaDeviceNumbers(1, &device);

				auto inds = rtContext->createBufferDesc(
				RTP_BUFFER_FORMAT_INDICES_INT3
				, RTP_BUFFER_TYPE_CUDA_LINEAR
				, const_cast<ivec3*>(indices)
				);
				inds->setRange(0, numTriangles);
				
				auto verts = rtContext->createBufferDesc(
				RTP_BUFFER_FORMAT_VERTEX_FLOAT3
				, RTP_BUFFER_TYPE_CUDA_LINEAR
				, const_cast<vec3*>(vertices)
				);
				verts->setRange(0, numVertices);
				
				model = rtContext->createModel();
				model->setTriangles(inds, verts);

				model->update(RTP_MODEL_HINT_NONE);
			}
			catch (optix::prime::Exception& e) 
			{
				MLIB_ERROR_SIGNAL(::mlib::error::Exception(e.getErrorString()));
			}

		}

The buffers are pure CUDA buffers.

Any idea what might be going wrong here?

can you provide a Short, Self Contained, Compilable Example?