| 1133 | } |
| 1134 | |
| 1135 | cudaError_t CUDARTAPI cudaImportExternalSemaphore(cudaExternalSemaphore_t* extSem_out, |
| 1136 | const cudaExternalSemaphoreHandleDesc* semHandleDesc) |
| 1137 | { |
| 1138 | CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC cuSemHandleDesc{}; |
| 1139 | |
| 1140 | switch (semHandleDesc->type) |
| 1141 | { |
| 1142 | case cudaExternalSemaphoreHandleTypeOpaqueFd: |
| 1143 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD; |
| 1144 | break; |
| 1145 | case cudaExternalSemaphoreHandleTypeOpaqueWin32: |
| 1146 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32; |
| 1147 | break; |
| 1148 | case cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt: |
| 1149 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT; |
| 1150 | break; |
| 1151 | case cudaExternalSemaphoreHandleTypeD3D12Fence: |
| 1152 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE; |
| 1153 | break; |
| 1154 | case cudaExternalSemaphoreHandleTypeD3D11Fence: |
| 1155 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE; |
| 1156 | break; |
| 1157 | case cudaExternalSemaphoreHandleTypeNvSciSync: |
| 1158 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC; |
| 1159 | break; |
| 1160 | case cudaExternalSemaphoreHandleTypeKeyedMutex: |
| 1161 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX; |
| 1162 | break; |
| 1163 | case cudaExternalSemaphoreHandleTypeKeyedMutexKmt: |
| 1164 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT; |
| 1165 | break; |
| 1166 | case cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd: |
| 1167 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD; |
| 1168 | break; |
| 1169 | case cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32: |
| 1170 | cuSemHandleDesc.type = CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32; |
| 1171 | break; |
| 1172 | default: |
| 1173 | return Runtime::setError(cudaErrorInvalidValue); |
| 1174 | } |
| 1175 | |
| 1176 | switch (semHandleDesc->type) |
| 1177 | { |
| 1178 | case cudaExternalSemaphoreHandleTypeOpaqueFd: |
| 1179 | case cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd: |
| 1180 | cuSemHandleDesc.handle.fd = semHandleDesc->handle.fd; |
| 1181 | break; |
| 1182 | case cudaExternalSemaphoreHandleTypeNvSciSync: |
| 1183 | cuSemHandleDesc.handle.nvSciSyncObj = semHandleDesc->handle.nvSciSyncObj; |
| 1184 | break; |
| 1185 | default: |
| 1186 | cuSemHandleDesc.handle.win32.handle = semHandleDesc->handle.win32.handle; |
| 1187 | cuSemHandleDesc.handle.win32.name = semHandleDesc->handle.win32.name; |
| 1188 | break; |
| 1189 | } |
| 1190 | |
| 1191 | CUresult result = cuImportExternalSemaphore((CUexternalSemaphore*)extSem_out, &cuSemHandleDesc); |
| 1192 | return Runtime::setError(result); |