[BUG] ChannelAccessor has no valid channel pointer with VectorGrid

Abierto
#2,000 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
cpp

Línea de trabajo

Comienza con tools::createNanoGrid, ChannelAccessor, deviceGrid y el kernel de GPU mostrado en el reproductor. Compara las rutas de FloatGrid y VectorGrid y ejecuta el ejemplo de CUDA para determinar por qué el puntero de canal de VectorGrid está vacío; se considera completado cuando el accessor de VectorGrid es válido y el kernel puede obtener el índice de canal.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug nanovdb
Environment

Operating System: Win 10
Version: VDB 12.0

Describe the bug

I'm building an nanovdb::IndexGrid from an openvdb::FloatGrid. It encodes voxel values as blind data that can be accessed with a
nanovdb::ChannelAccessor<float, nanovdb::ValueOnIndex>, there everythings works as it should.

But when using an openvdb::VectorGrid and the accessor nanovdb::ChannelAccessor<nanovdb::Vec3f, nanovdb::ValueOnIndex> the channel ptr is empty.

To Reproduce
using SrcGridT  = openvdb::FloatGrid; // replace by opevdb::VectorGrid 
using DstBuildT = nanovdb::ValueOnIndex;
using BufferT   = nanovdb::cuda::DeviceBuffer;

nanovdb::GridHandle<BufferT> idxHandle = nanovdb::tools::createNanoGrid<SrcGridT, DstBuildT, BufferT>(*floatGrid /* *vectorGrid */, 1u, false , false, 0);
idxHandle.deviceUpload(stream, false);

const auto* gpuGrid = idxHandle.deviceGrid<DstBuildT>();
launch_kernels(gpuGrid, toSample, stream);

Then a cuda kernel is launched to access the grid on the GPU.

__global__ void gpu_kernel(const nanovdb::NanoGrid<nanovdb::ValueOnIndex>* gpuGrid, const float* data) {
	const nanovdb::ChannelAccessor<float /* nanovdb::Vec3f */, nanovdb::ValueOnIndex> acc(*gpuGrid);

	if (!acc) {
		printf("Error: ChannelAccessor has no valid channel pointer! (null)\n");
		return;
	}

	const uint32_t idx000 = acc.idx(0, 0, 0);
	printf("Idx at Coord 0,0,0 : %u\n", idx000);
}
Additional context

I tried different configurations such as adding 3u channel with the VectorGrid and trying to access each component individually but it didn't work.

Lenguaje dominante
C++
Estrellas
3.4k
Forks
781
Merge medio
3 d 21 h
PR fusionados (30 d)
38

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de AcademySoftwareFoundation/openvdb

Todos los issues de AcademySoftwareFoundation/openvdb

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.