| 248 | } |
| 249 | |
| 250 | cudaMipmappedArray_t importTextureToMipmappedArray(ref<Texture> pTex, uint32_t cudaUsageFlags) |
| 251 | { |
| 252 | SharedResourceApiHandle sharedHandle = pTex->getSharedApiHandle(); |
| 253 | FALCOR_CHECK(sharedHandle, "Texture shared handle creation failed"); |
| 254 | |
| 255 | cudaExternalMemoryHandleDesc externalMemoryHandleDesc; |
| 256 | memset(&externalMemoryHandleDesc, 0, sizeof(externalMemoryHandleDesc)); |
| 257 | |
| 258 | externalMemoryHandleDesc.type = cudaExternalMemoryHandleTypeD3D12Resource; |
| 259 | externalMemoryHandleDesc.handle.win32.handle = sharedHandle; |
| 260 | externalMemoryHandleDesc.size = pTex->getTextureSizeInBytes(); |
| 261 | externalMemoryHandleDesc.flags = cudaExternalMemoryDedicated; |
| 262 | |
| 263 | cudaExternalMemory_t externalMemory; |
| 264 | FALCOR_CUDA_CHECK(cudaImportExternalMemory(&externalMemory, &externalMemoryHandleDesc)); |
| 265 | |
| 266 | // Map mipmapped array onto external memory |
| 267 | cudaExternalMemoryMipmappedArrayDesc mipDesc; |
| 268 | memset(&mipDesc, 0, sizeof(mipDesc)); |
| 269 | auto format = pTex->getFormat(); |
| 270 | mipDesc.formatDesc.x = getNumChannelBits(format, 0); |
| 271 | mipDesc.formatDesc.y = getNumChannelBits(format, 1); |
| 272 | mipDesc.formatDesc.z = getNumChannelBits(format, 2); |
| 273 | mipDesc.formatDesc.w = getNumChannelBits(format, 3); |
| 274 | mipDesc.formatDesc.f = (getFormatType(format) == FormatType::Float) ? cudaChannelFormatKindFloat : cudaChannelFormatKindUnsigned; |
| 275 | mipDesc.extent.depth = 1; |
| 276 | mipDesc.extent.width = pTex->getWidth(); |
| 277 | mipDesc.extent.height = pTex->getHeight(); |
| 278 | mipDesc.flags = cudaUsageFlags; |
| 279 | mipDesc.numLevels = 1; |
| 280 | |
| 281 | cudaMipmappedArray_t mipmappedArray; |
| 282 | FALCOR_CUDA_CHECK(cudaExternalMemoryGetMappedMipmappedArray(&mipmappedArray, externalMemory, &mipDesc)); |
| 283 | return mipmappedArray; |
| 284 | } |
| 285 | |
| 286 | cudaSurfaceObject_t mapTextureToSurface(ref<Texture> pTex, uint32_t cudaUsageFlags) |
| 287 | { |
no test coverage detected