// Copyright (c) Meta Platforms, Inc. and affiliates. // All rights reserved. // // This source code is licensed under the license found in the // LICENSE file in the root directory of this source tree. #include #include #include #include #include #include "helper_math.h" __global__ void compute_raydirs_forward_kernel( int N, int H, int W, float3 * viewposim, float3 * viewrotim, float2 * focalim, float2 * princptim, float2 * pixelcoordsim, float volradius, float3 * rayposim, float3 * raydirim, float2 * tminmaxim ) { bool validthread = false; int w, h, n; w = blockIdx.x * blockDim.x + threadIdx.x; h = (blockIdx.y * blockDim.y + threadIdx.y)%H; n = (blockIdx.y * blockDim.y + threadIdx.y)/H; validthread = (w < W) && (h < H) && (n>>( N, H, W, reinterpret_cast(viewposim), reinterpret_cast(viewrotim), reinterpret_cast(focalim), reinterpret_cast(princptim), reinterpret_cast(pixelcoordsim), volradius, reinterpret_cast(rayposim), reinterpret_cast(raydirim), reinterpret_cast(tminmaxim)); } void compute_raydirs_backward_cuda( int N, int H, int W, float * viewposim, float * viewrotim, float * focalim, float * princptim, float * pixelcoordsim, float volradius, float * rayposim, float * raydirim, float * tminmaxim, float * grad_viewposim, float * grad_viewrotim, float * grad_focalim, float * grad_princptim, cudaStream_t stream) { int blocksizex = 16; int blocksizey = 16; dim3 blocksize(blocksizex, blocksizey); dim3 gridsize; gridsize = dim3( (W + blocksize.x - 1) / blocksize.x, (N*H + blocksize.y - 1) / blocksize.y); auto fn = compute_raydirs_backward_kernel; fn<<>>( N, H, W, reinterpret_cast(viewposim), reinterpret_cast(viewrotim), reinterpret_cast(focalim), reinterpret_cast(princptim), reinterpret_cast(pixelcoordsim), volradius, reinterpret_cast(rayposim), reinterpret_cast(raydirim), reinterpret_cast(tminmaxim), reinterpret_cast(grad_viewposim), reinterpret_cast(grad_viewrotim), reinterpret_cast(grad_focalim), reinterpret_cast(grad_princptim)); }