Merge "Move CUDA headers to third-party path" into main am: f594a1329a am: 50b856822f am: 0272c2d0de am: d0842c8576 am: 18962d978a
Original change: https://android-review.googlesource.com/c/platform/hardware/google/aemu/+/2765425
Change-Id: Ic0024a68cab267d957749011547bc4696db98d46
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
GitOrigin-RevId: 249be2d2b246a1d4b76320f95e8673e5488b2301
diff --git a/Android.bp b/Android.bp
index 5ca0261..f579940 100644
--- a/Android.bp
+++ b/Android.bp
@@ -36,6 +36,7 @@
"base/include",
"host-common/include",
"snapshot/include",
+ "third-party/cuda/include",
],
apex_available: [
"//apex_available:platform",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index be7a41d..4de86a4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -105,6 +105,7 @@
install(DIRECTORY base/include/aemu DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(DIRECTORY snapshot/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aemu/snapshot)
install(DIRECTORY host-common/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aemu/host-common)
+ install(DIRECTORY third-party/cuda/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aemu/host-common)
set(INSTALL_TARGETS
aemu-base
aemu-host-common
diff --git a/host-common/include/host-common/dynlink_cuda.h b/host-common/include/host-common/dynlink_cuda.h
index 9f4aa45..4fabbcc 100644
--- a/host-common/include/host-common/dynlink_cuda.h
+++ b/host-common/include/host-common/dynlink_cuda.h
@@ -1,21 +1,17 @@
-/*
- * Copyright 1993-2015 NVIDIA Corporation. All rights reserved.
- *
- * Please refer to the NVIDIA end user license agreement (EULA) associated
- * with this source code for terms and conditions that govern your use of
- * this software. Any use, reproduction, disclosure, or distribution of
- * this software and related documentation outside the terms of the EULA
- * is strictly prohibited.
- *
- */
-
-#ifndef __cuda_h__
-#define __cuda_h__
-
-/**
-* CUDA API version support
-*/
-
-#include "host-common/dynlink_cuda_cuda.h"
-
-#endif //__cuda_h__
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+#include "../../../third-party/cuda/include/host-common/dynlink_cuda.h"
diff --git a/host-common/include/host-common/dynlink_cuda_cuda.h b/host-common/include/host-common/dynlink_cuda_cuda.h
index 01ffa53..34afb89 100644
--- a/host-common/include/host-common/dynlink_cuda_cuda.h
+++ b/host-common/include/host-common/dynlink_cuda_cuda.h
@@ -1,1687 +1,17 @@
-/*
- * Copyright 1993-2015 NVIDIA Corporation. All rights reserved.
- *
- * Please refer to the NVIDIA end user license agreement (EULA) associated
- * with this source code for terms and conditions that govern your use of
- * this software. Any use, reproduction, disclosure, or distribution of
- * this software and related documentation outside the terms of the EULA
- * is strictly prohibited.
- *
- */
-
-#ifndef __cuda_cuda_h__
-#define __cuda_cuda_h__
-
-#include <stdlib.h>
-
-#ifndef __CUDA_API_VERSION
-#define __CUDA_API_VERSION 4000
-#endif
-
-/**
- * \defgroup CUDA_DRIVER CUDA Driver API
- *
- * This section describes the low-level CUDA driver application programming
- * interface.
- *
- * @{
- */
-
-/**
- * \defgroup CUDA_TYPES Data types used by CUDA driver
- * @{
- */
-
-/**
- * CUDA API version number
- */
-#define CUDA_VERSION 4000 /* 4.0 */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * CUDA device pointer
- */
-#if __CUDA_API_VERSION >= 3020
-
-#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) || defined(__aarch64__)
- typedef unsigned long long CUdeviceptr;
-#else
- typedef unsigned int CUdeviceptr;
-#endif
-
-#endif /* __CUDA_API_VERSION >= 3020 */
-
-typedef int CUdevice; /**< CUDA device */
-typedef struct CUctx_st *CUcontext; /**< CUDA context */
-typedef struct CUmod_st *CUmodule; /**< CUDA module */
-typedef struct CUfunc_st *CUfunction; /**< CUDA function */
-typedef struct CUarray_st *CUarray; /**< CUDA array */
-typedef struct CUtexref_st *CUtexref; /**< CUDA texture reference */
-typedef struct CUsurfref_st *CUsurfref; /**< CUDA surface reference */
-typedef struct CUevent_st *CUevent; /**< CUDA event */
-typedef struct CUstream_st *CUstream; /**< CUDA stream */
-typedef struct CUgraphicsResource_st *CUgraphicsResource; /**< CUDA graphics interop resource */
-
-typedef struct CUuuid_st /**< CUDA definition of UUID */
-{
- char bytes[16];
-} CUuuid;
-
-/**
- * Context creation flags
- */
-typedef enum CUctx_flags_enum
-{
- CU_CTX_SCHED_AUTO = 0x00, /**< Automatic scheduling */
- CU_CTX_SCHED_SPIN = 0x01, /**< Set spin as default scheduling */
- CU_CTX_SCHED_YIELD = 0x02, /**< Set yield as default scheduling */
- CU_CTX_SCHED_BLOCKING_SYNC = 0x04, /**< Set blocking synchronization as default scheduling */
- CU_CTX_BLOCKING_SYNC = 0x04, /**< Set blocking synchronization as default scheduling \deprecated */
- CU_CTX_MAP_HOST = 0x08, /**< Support mapped pinned allocations */
- CU_CTX_LMEM_RESIZE_TO_MAX = 0x10, /**< Keep local memory allocation after launch */
-#if __CUDA_API_VERSION < 4000
- CU_CTX_SCHED_MASK = 0x03,
- CU_CTX_FLAGS_MASK = 0x1f
-#else
- CU_CTX_SCHED_MASK = 0x07,
- CU_CTX_PRIMARY = 0x20, /**< Initialize and return the primary context */
- CU_CTX_FLAGS_MASK = 0x3f
-#endif
-} CUctx_flags;
-
-/**
- * Event creation flags
- */
-typedef enum CUevent_flags_enum
-{
- CU_EVENT_DEFAULT = 0, /**< Default event flag */
- CU_EVENT_BLOCKING_SYNC = 1, /**< Event uses blocking synchronization */
- CU_EVENT_DISABLE_TIMING = 2 /**< Event will not record timing data */
-} CUevent_flags;
-
-/**
- * Array formats
- */
-typedef enum CUarray_format_enum
-{
- CU_AD_FORMAT_UNSIGNED_INT8 = 0x01, /**< Unsigned 8-bit integers */
- CU_AD_FORMAT_UNSIGNED_INT16 = 0x02, /**< Unsigned 16-bit integers */
- CU_AD_FORMAT_UNSIGNED_INT32 = 0x03, /**< Unsigned 32-bit integers */
- CU_AD_FORMAT_SIGNED_INT8 = 0x08, /**< Signed 8-bit integers */
- CU_AD_FORMAT_SIGNED_INT16 = 0x09, /**< Signed 16-bit integers */
- CU_AD_FORMAT_SIGNED_INT32 = 0x0a, /**< Signed 32-bit integers */
- CU_AD_FORMAT_HALF = 0x10, /**< 16-bit floating point */
- CU_AD_FORMAT_FLOAT = 0x20 /**< 32-bit floating point */
-} CUarray_format;
-
-/**
- * Texture reference addressing modes
- */
-typedef enum CUaddress_mode_enum
-{
- CU_TR_ADDRESS_MODE_WRAP = 0, /**< Wrapping address mode */
- CU_TR_ADDRESS_MODE_CLAMP = 1, /**< Clamp to edge address mode */
- CU_TR_ADDRESS_MODE_MIRROR = 2, /**< Mirror address mode */
- CU_TR_ADDRESS_MODE_BORDER = 3 /**< Border address mode */
-} CUaddress_mode;
-
-/**
- * Texture reference filtering modes
- */
-typedef enum CUfilter_mode_enum
-{
- CU_TR_FILTER_MODE_POINT = 0, /**< Point filter mode */
- CU_TR_FILTER_MODE_LINEAR = 1 /**< Linear filter mode */
-} CUfilter_mode;
-
-/**
- * Device properties
- */
-typedef enum CUdevice_attribute_enum
-{
- CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 1, /**< Maximum number of threads per block */
- CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X = 2, /**< Maximum block dimension X */
- CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y = 3, /**< Maximum block dimension Y */
- CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z = 4, /**< Maximum block dimension Z */
- CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X = 5, /**< Maximum grid dimension X */
- CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y = 6, /**< Maximum grid dimension Y */
- CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z = 7, /**< Maximum grid dimension Z */
- CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK = 8, /**< Maximum shared memory available per block in bytes */
- CU_DEVICE_ATTRIBUTE_SHARED_MEMORY_PER_BLOCK = 8, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK */
- CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY = 9, /**< Memory available on device for __constant__ variables in a CUDA C kernel in bytes */
- CU_DEVICE_ATTRIBUTE_WARP_SIZE = 10, /**< Warp size in threads */
- CU_DEVICE_ATTRIBUTE_MAX_PITCH = 11, /**< Maximum pitch in bytes allowed by memory copies */
- CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK = 12, /**< Maximum number of 32-bit registers available per block */
- CU_DEVICE_ATTRIBUTE_REGISTERS_PER_BLOCK = 12, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK */
- CU_DEVICE_ATTRIBUTE_CLOCK_RATE = 13, /**< Peak clock frequency in kilohertz */
- CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT = 14, /**< Alignment requirement for textures */
- CU_DEVICE_ATTRIBUTE_GPU_OVERLAP = 15, /**< Device can possibly copy memory and execute a kernel concurrently */
- CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT = 16, /**< Number of multiprocessors on device */
- CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT = 17, /**< Specifies whether there is a run time limit on kernels */
- CU_DEVICE_ATTRIBUTE_INTEGRATED = 18, /**< Device is integrated with host memory */
- CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY = 19, /**< Device can map host memory into CUDA address space */
- CU_DEVICE_ATTRIBUTE_COMPUTE_MODE = 20, /**< Compute mode (See ::CUcomputemode for details) */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH = 21, /**< Maximum 1D texture width */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH = 22, /**< Maximum 2D texture width */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT = 23, /**< Maximum 2D texture height */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH = 24, /**< Maximum 3D texture width */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT = 25, /**< Maximum 3D texture height */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH = 26, /**< Maximum 3D texture depth */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_WIDTH = 27, /**< Maximum texture array width */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_HEIGHT = 28, /**< Maximum texture array height */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES = 29, /**< Maximum slices in a texture array */
- CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT = 30, /**< Alignment requirement for surfaces */
- CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS = 31, /**< Device can possibly execute multiple kernels concurrently */
- CU_DEVICE_ATTRIBUTE_ECC_ENABLED = 32, /**< Device has ECC support enabled */
- CU_DEVICE_ATTRIBUTE_PCI_BUS_ID = 33, /**< PCI bus ID of the device */
- CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID = 34, /**< PCI device ID of the device */
- CU_DEVICE_ATTRIBUTE_TCC_DRIVER = 35 /**< Device is using TCC driver model */
-#if __CUDA_API_VERSION >= 4000
- , CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE = 36, /**< Peak memory clock frequency in kilohertz */
- CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH = 37, /**< Global memory bus width in bits */
- CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE = 38, /**< Size of L2 cache in bytes */
- CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR = 39, /**< Maximum resident threads per multiprocessor */
- CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT = 40, /**< Number of asynchronous engines */
- CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING = 41, /**< Device uses shares a unified address space with the host */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH = 42, /**< Maximum 1D layered texture width */
- CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS = 43 /**< Maximum layers in a 1D layered texture */
-#endif
-} CUdevice_attribute;
-
-/**
- * Legacy device properties
- */
-typedef struct CUdevprop_st
-{
- int maxThreadsPerBlock; /**< Maximum number of threads per block */
- int maxThreadsDim[3]; /**< Maximum size of each dimension of a block */
- int maxGridSize[3]; /**< Maximum size of each dimension of a grid */
- int sharedMemPerBlock; /**< Shared memory available per block in bytes */
- int totalConstantMemory; /**< Constant memory available on device in bytes */
- int SIMDWidth; /**< Warp size in threads */
- int memPitch; /**< Maximum pitch in bytes allowed by memory copies */
- int regsPerBlock; /**< 32-bit registers available per block */
- int clockRate; /**< Clock frequency in kilohertz */
- int textureAlign; /**< Alignment requirement for textures */
-} CUdevprop;
-
-/**
- * Function properties
- */
-typedef enum CUfunction_attribute_enum
-{
- /**
- * The maximum number of threads per block, beyond which a launch of the
- * function would fail. This number depends on both the function and the
- * device on which the function is currently loaded.
- */
- CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 0,
-
- /**
- * The size in bytes of statically-allocated shared memory required by
- * this function. This does not include dynamically-allocated shared
- * memory requested by the user at runtime.
- */
- CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES = 1,
-
- /**
- * The size in bytes of user-allocated constant memory required by this
- * function.
- */
- CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES = 2,
-
- /**
- * The size in bytes of local memory used by each thread of this function.
- */
- CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES = 3,
-
- /**
- * The number of registers used by each thread of this function.
- */
- CU_FUNC_ATTRIBUTE_NUM_REGS = 4,
-
- /**
- * The PTX virtual architecture version for which the function was
- * compiled. This value is the major PTX version * 10 + the minor PTX
- * version, so a PTX version 1.3 function would return the value 13.
- * Note that this may return the undefined value of 0 for cubins
- * compiled prior to CUDA 3.0.
- */
- CU_FUNC_ATTRIBUTE_PTX_VERSION = 5,
-
- /**
- * The binary architecture version for which the function was compiled.
- * This value is the major binary version * 10 + the minor binary version,
- * so a binary version 1.3 function would return the value 13. Note that
- * this will return a value of 10 for legacy cubins that do not have a
- * properly-encoded binary architecture version.
- */
- CU_FUNC_ATTRIBUTE_BINARY_VERSION = 6,
-
- CU_FUNC_ATTRIBUTE_MAX
-} CUfunction_attribute;
-
-/**
- * Function cache configurations
- */
-typedef enum CUfunc_cache_enum
-{
- CU_FUNC_CACHE_PREFER_NONE = 0x00, /**< no preference for shared memory or L1 (default) */
- CU_FUNC_CACHE_PREFER_SHARED = 0x01, /**< prefer larger shared memory and smaller L1 cache */
- CU_FUNC_CACHE_PREFER_L1 = 0x02 /**< prefer larger L1 cache and smaller shared memory */
-} CUfunc_cache;
-
-/**
- * Memory types
- */
-typedef enum CUmemorytype_enum
-{
- CU_MEMORYTYPE_HOST = 0x01, /**< Host memory */
- CU_MEMORYTYPE_DEVICE = 0x02, /**< Device memory */
- CU_MEMORYTYPE_ARRAY = 0x03 /**< Array memory */
-#if __CUDA_API_VERSION >= 4000
- , CU_MEMORYTYPE_UNIFIED = 0x04 /**< Unified device or host memory */
-#endif
-} CUmemorytype;
-
-/**
- * Compute Modes
- */
-typedef enum CUcomputemode_enum
-{
- CU_COMPUTEMODE_DEFAULT = 0, /**< Default compute mode (Multiple contexts allowed per device) */
- CU_COMPUTEMODE_EXCLUSIVE = 1, /**< Compute-exclusive-thread mode (Only one context used by a single thread can be present on this device at a time) */
- CU_COMPUTEMODE_PROHIBITED = 2 /**< Compute-prohibited mode (No contexts can be created on this device at this time) */
-#if __CUDA_API_VERSION >= 4000
- , CU_COMPUTEMODE_EXCLUSIVE_PROCESS = 3 /**< Compute-exclusive-process mode (Only one context used by a single process can be present on this device at a time) */
-#endif
-} CUcomputemode;
-
-/**
- * Online compiler options
- */
-typedef enum CUjit_option_enum
-{
- /**
- * Max number of registers that a thread may use.\n
- * Option type: unsigned int
- */
- CU_JIT_MAX_REGISTERS = 0,
-
- /**
- * IN: Specifies minimum number of threads per block to target compilation
- * for\n
- * OUT: Returns the number of threads the compiler actually targeted.
- * This restricts the resource utilization fo the compiler (e.g. max
- * registers) such that a block with the given number of threads should be
- * able to launch based on register limitations. Note, this option does not
- * currently take into account any other resource limitations, such as
- * shared memory utilization.\n
- * Option type: unsigned int
- */
- CU_JIT_THREADS_PER_BLOCK,
-
- /**
- * Returns a float value in the option of the wall clock time, in
- * milliseconds, spent creating the cubin\n
- * Option type: float
- */
- CU_JIT_WALL_TIME,
-
- /**
- * Pointer to a buffer in which to print any log messsages from PTXAS
- * that are informational in nature (the buffer size is specified via
- * option ::CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES) \n
- * Option type: char*
- */
- CU_JIT_INFO_LOG_BUFFER,
-
- /**
- * IN: Log buffer size in bytes. Log messages will be capped at this size
- * (including null terminator)\n
- * OUT: Amount of log buffer filled with messages\n
- * Option type: unsigned int
- */
- CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES,
-
- /**
- * Pointer to a buffer in which to print any log messages from PTXAS that
- * reflect errors (the buffer size is specified via option
- * ::CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES)\n
- * Option type: char*
- */
- CU_JIT_ERROR_LOG_BUFFER,
-
- /**
- * IN: Log buffer size in bytes. Log messages will be capped at this size
- * (including null terminator)\n
- * OUT: Amount of log buffer filled with messages\n
- * Option type: unsigned int
- */
- CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES,
-
- /**
- * Level of optimizations to apply to generated code (0 - 4), with 4
- * being the default and highest level of optimizations.\n
- * Option type: unsigned int
- */
- CU_JIT_OPTIMIZATION_LEVEL,
-
- /**
- * No option value required. Determines the target based on the current
- * attached context (default)\n
- * Option type: No option value needed
- */
- CU_JIT_TARGET_FROM_CUCONTEXT,
-
- /**
- * Target is chosen based on supplied ::CUjit_target_enum.\n
- * Option type: unsigned int for enumerated type ::CUjit_target_enum
- */
- CU_JIT_TARGET,
-
- /**
- * Specifies choice of fallback strategy if matching cubin is not found.
- * Choice is based on supplied ::CUjit_fallback_enum.\n
- * Option type: unsigned int for enumerated type ::CUjit_fallback_enum
- */
- CU_JIT_FALLBACK_STRATEGY
-
-} CUjit_option;
-
-/**
- * Online compilation targets
- */
-typedef enum CUjit_target_enum
-{
- CU_TARGET_COMPUTE_10 = 0, /**< Compute device class 1.0 */
- CU_TARGET_COMPUTE_11, /**< Compute device class 1.1 */
- CU_TARGET_COMPUTE_12, /**< Compute device class 1.2 */
- CU_TARGET_COMPUTE_13, /**< Compute device class 1.3 */
- CU_TARGET_COMPUTE_20, /**< Compute device class 2.0 */
- CU_TARGET_COMPUTE_21 /**< Compute device class 2.1 */
-} CUjit_target;
-
-/**
- * Cubin matching fallback strategies
- */
-typedef enum CUjit_fallback_enum
-{
- CU_PREFER_PTX = 0, /**< Prefer to compile ptx */
-
- CU_PREFER_BINARY /**< Prefer to fall back to compatible binary code */
-
-} CUjit_fallback;
-
-/**
- * Flags to register a graphics resource
- */
-typedef enum CUgraphicsRegisterFlags_enum
-{
- CU_GRAPHICS_REGISTER_FLAGS_NONE = 0x00,
- CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY = 0x01,
- CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD = 0x02,
- CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST = 0x04
-} CUgraphicsRegisterFlags;
-
-/**
- * Flags for mapping and unmapping interop resources
- */
-typedef enum CUgraphicsMapResourceFlags_enum
-{
- CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE = 0x00,
- CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY = 0x01,
- CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD = 0x02
-} CUgraphicsMapResourceFlags;
-
-/**
- * Array indices for cube faces
- */
-typedef enum CUarray_cubemap_face_enum
-{
- CU_CUBEMAP_FACE_POSITIVE_X = 0x00, /**< Positive X face of cubemap */
- CU_CUBEMAP_FACE_NEGATIVE_X = 0x01, /**< Negative X face of cubemap */
- CU_CUBEMAP_FACE_POSITIVE_Y = 0x02, /**< Positive Y face of cubemap */
- CU_CUBEMAP_FACE_NEGATIVE_Y = 0x03, /**< Negative Y face of cubemap */
- CU_CUBEMAP_FACE_POSITIVE_Z = 0x04, /**< Positive Z face of cubemap */
- CU_CUBEMAP_FACE_NEGATIVE_Z = 0x05 /**< Negative Z face of cubemap */
-} CUarray_cubemap_face;
-
-/**
- * Limits
- */
-typedef enum CUlimit_enum
-{
- CU_LIMIT_STACK_SIZE = 0x00, /**< GPU thread stack size */
- CU_LIMIT_PRINTF_FIFO_SIZE = 0x01, /**< GPU printf FIFO size */
- CU_LIMIT_MALLOC_HEAP_SIZE = 0x02 /**< GPU malloc heap size */
-} CUlimit;
-
-/**
- * Error codes
- */
-typedef enum cudaError_enum
-{
- /**
- * The API call returned with no errors. In the case of query calls, this
- * can also mean that the operation being queried is complete (see
- * ::cuEventQuery() and ::cuStreamQuery()).
- */
- CUDA_SUCCESS = 0,
-
- /**
- * This indicates that one or more of the parameters passed to the API call
- * is not within an acceptable range of values.
- */
- CUDA_ERROR_INVALID_VALUE = 1,
-
- /**
- * The API call failed because it was unable to allocate enough memory to
- * perform the requested operation.
- */
- CUDA_ERROR_OUT_OF_MEMORY = 2,
-
- /**
- * This indicates that the CUDA driver has not been initialized with
- * ::cuInit() or that initialization has failed.
- */
- CUDA_ERROR_NOT_INITIALIZED = 3,
-
- /**
- * This indicates that the CUDA driver is in the process of shutting down.
- */
- CUDA_ERROR_DEINITIALIZED = 4,
-
- /**
- * This indicates profiling APIs are called while application is running
- * in visual profiler mode.
- */
- CUDA_ERROR_PROFILER_DISABLED = 5,
- /**
- * This indicates profiling has not been initialized for this context.
- * Call cuProfilerInitialize() to resolve this.
- */
- CUDA_ERROR_PROFILER_NOT_INITIALIZED = 6,
- /**
- * This indicates profiler has already been started and probably
- * cuProfilerStart() is incorrectly called.
- */
- CUDA_ERROR_PROFILER_ALREADY_STARTED = 7,
- /**
- * This indicates profiler has already been stopped and probably
- * cuProfilerStop() is incorrectly called.
- */
- CUDA_ERROR_PROFILER_ALREADY_STOPPED = 8,
- /**
- * This indicates that no CUDA-capable devices were detected by the installed
- * CUDA driver.
- */
- CUDA_ERROR_NO_DEVICE = 100,
-
- /**
- * This indicates that the device ordinal supplied by the user does not
- * correspond to a valid CUDA device.
- */
- CUDA_ERROR_INVALID_DEVICE = 101,
-
-
- /**
- * This indicates that the device kernel image is invalid. This can also
- * indicate an invalid CUDA module.
- */
- CUDA_ERROR_INVALID_IMAGE = 200,
-
- /**
- * This most frequently indicates that there is no context bound to the
- * current thread. This can also be returned if the context passed to an
- * API call is not a valid handle (such as a context that has had
- * ::cuCtxDestroy() invoked on it). This can also be returned if a user
- * mixes different API versions (i.e. 3010 context with 3020 API calls).
- * See ::cuCtxGetApiVersion() for more details.
- */
- CUDA_ERROR_INVALID_CONTEXT = 201,
-
- /**
- * This indicated that the context being supplied as a parameter to the
- * API call was already the active context.
- * \deprecated
- * This error return is deprecated as of CUDA 3.2. It is no longer an
- * error to attempt to push the active context via ::cuCtxPushCurrent().
- */
- CUDA_ERROR_CONTEXT_ALREADY_CURRENT = 202,
-
- /**
- * This indicates that a map or register operation has failed.
- */
- CUDA_ERROR_MAP_FAILED = 205,
-
- /**
- * This indicates that an unmap or unregister operation has failed.
- */
- CUDA_ERROR_UNMAP_FAILED = 206,
-
- /**
- * This indicates that the specified array is currently mapped and thus
- * cannot be destroyed.
- */
- CUDA_ERROR_ARRAY_IS_MAPPED = 207,
-
- /**
- * This indicates that the resource is already mapped.
- */
- CUDA_ERROR_ALREADY_MAPPED = 208,
-
- /**
- * This indicates that there is no kernel image available that is suitable
- * for the device. This can occur when a user specifies code generation
- * options for a particular CUDA source file that do not include the
- * corresponding device configuration.
- */
- CUDA_ERROR_NO_BINARY_FOR_GPU = 209,
-
- /**
- * This indicates that a resource has already been acquired.
- */
- CUDA_ERROR_ALREADY_ACQUIRED = 210,
-
- /**
- * This indicates that a resource is not mapped.
- */
- CUDA_ERROR_NOT_MAPPED = 211,
-
- /**
- * This indicates that a mapped resource is not available for access as an
- * array.
- */
- CUDA_ERROR_NOT_MAPPED_AS_ARRAY = 212,
-
- /**
- * This indicates that a mapped resource is not available for access as a
- * pointer.
- */
- CUDA_ERROR_NOT_MAPPED_AS_POINTER = 213,
-
- /**
- * This indicates that an uncorrectable ECC error was detected during
- * execution.
- */
- CUDA_ERROR_ECC_UNCORRECTABLE = 214,
-
- /**
- * This indicates that the ::CUlimit passed to the API call is not
- * supported by the active device.
- */
- CUDA_ERROR_UNSUPPORTED_LIMIT = 215,
-
- /**
- * This indicates that the ::CUcontext passed to the API call can
- * only be bound to a single CPU thread at a time but is already
- * bound to a CPU thread.
- */
- CUDA_ERROR_CONTEXT_ALREADY_IN_USE = 216,
-
- /**
- * This indicates that the device kernel source is invalid.
- */
- CUDA_ERROR_INVALID_SOURCE = 300,
-
- /**
- * This indicates that the file specified was not found.
- */
- CUDA_ERROR_FILE_NOT_FOUND = 301,
-
- /**
- * This indicates that a link to a shared object failed to resolve.
- */
- CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND = 302,
-
- /**
- * This indicates that initialization of a shared object failed.
- */
- CUDA_ERROR_SHARED_OBJECT_INIT_FAILED = 303,
-
- /**
- * This indicates that an OS call failed.
- */
- CUDA_ERROR_OPERATING_SYSTEM = 304,
-
-
- /**
- * This indicates that a resource handle passed to the API call was not
- * valid. Resource handles are opaque types like ::CUstream and ::CUevent.
- */
- CUDA_ERROR_INVALID_HANDLE = 400,
-
-
- /**
- * This indicates that a named symbol was not found. Examples of symbols
- * are global/constant variable names, texture names, and surface names.
- */
- CUDA_ERROR_NOT_FOUND = 500,
-
-
- /**
- * This indicates that asynchronous operations issued previously have not
- * completed yet. This result is not actually an error, but must be indicated
- * differently than ::CUDA_SUCCESS (which indicates completion). Calls that
- * may return this value include ::cuEventQuery() and ::cuStreamQuery().
- */
- CUDA_ERROR_NOT_READY = 600,
-
-
- /**
- * An exception occurred on the device while executing a kernel. Common
- * causes include dereferencing an invalid device pointer and accessing
- * out of bounds shared memory. The context cannot be used, so it must
- * be destroyed (and a new one should be created). All existing device
- * memory allocations from this context are invalid and must be
- * reconstructed if the program is to continue using CUDA.
- */
- CUDA_ERROR_LAUNCH_FAILED = 700,
-
- /**
- * This indicates that a launch did not occur because it did not have
- * appropriate resources. This error usually indicates that the user has
- * attempted to pass too many arguments to the device kernel, or the
- * kernel launch specifies too many threads for the kernel's register
- * count. Passing arguments of the wrong size (i.e. a 64-bit pointer
- * when a 32-bit int is expected) is equivalent to passing too many
- * arguments and can also result in this error.
- */
- CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES = 701,
-
- /**
- * This indicates that the device kernel took too long to execute. This can
- * only occur if timeouts are enabled - see the device attribute
- * ::CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT for more information. The
- * context cannot be used (and must be destroyed similar to
- * ::CUDA_ERROR_LAUNCH_FAILED). All existing device memory allocations from
- * this context are invalid and must be reconstructed if the program is to
- * continue using CUDA.
- */
- CUDA_ERROR_LAUNCH_TIMEOUT = 702,
-
- /**
- * This error indicates a kernel launch that uses an incompatible texturing
- * mode.
- */
- CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING = 703,
-
- /**
- * This error indicates that a call to ::cuCtxEnablePeerAccess() is
- * trying to re-enable peer access to a context which has already
- * had peer access to it enabled.
- */
- CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED = 704,
-
- /**
- * This error indicates that a call to ::cuMemPeerRegister is trying to
- * register memory from a context which has not had peer access
- * enabled yet via ::cuCtxEnablePeerAccess(), or that
- * ::cuCtxDisablePeerAccess() is trying to disable peer access
- * which has not been enabled yet.
- */
- CUDA_ERROR_PEER_ACCESS_NOT_ENABLED = 705,
-
- /**
- * This error indicates that a call to ::cuMemPeerRegister is trying to
- * register already-registered memory.
- */
- CUDA_ERROR_PEER_MEMORY_ALREADY_REGISTERED = 706,
-
- /**
- * This error indicates that a call to ::cuMemPeerUnregister is trying to
- * unregister memory that has not been registered.
- */
- CUDA_ERROR_PEER_MEMORY_NOT_REGISTERED = 707,
-
- /**
- * This error indicates that ::cuCtxCreate was called with the flag
- * ::CU_CTX_PRIMARY on a device which already has initialized its
- * primary context.
- */
- CUDA_ERROR_PRIMARY_CONTEXT_ACTIVE = 708,
-
- /**
- * This error indicates that the context current to the calling thread
- * has been destroyed using ::cuCtxDestroy, or is a primary context which
- * has not yet been initialized.
- */
- CUDA_ERROR_CONTEXT_IS_DESTROYED = 709,
-
- /**
- * This indicates that an unknown internal error has occurred.
- */
- CUDA_ERROR_UNKNOWN = 999
-} CUresult;
-
-#if __CUDA_API_VERSION >= 4000
-/**
- * If set, host memory is portable between CUDA contexts.
- * Flag for ::cuMemHostAlloc()
- */
-#define CU_MEMHOSTALLOC_PORTABLE 0x01
-
-/**
- * If set, host memory is mapped into CUDA address space and
- * ::cuMemHostGetDevicePointer() may be called on the host pointer.
- * Flag for ::cuMemHostAlloc()
- */
-#define CU_MEMHOSTALLOC_DEVICEMAP 0x02
-
-/**
- * If set, host memory is allocated as write-combined - fast to write,
- * faster to DMA, slow to read except via SSE4 streaming load instruction
- * (MOVNTDQA).
- * Flag for ::cuMemHostAlloc()
- */
-#define CU_MEMHOSTALLOC_WRITECOMBINED 0x04
-
-/**
- * If set, host memory is portable between CUDA contexts.
- * Flag for ::cuMemHostRegister()
- */
-#define CU_MEMHOSTREGISTER_PORTABLE 0x01
-
-/**
- * If set, host memory is mapped into CUDA address space and
- * ::cuMemHostGetDevicePointer() may be called on the host pointer.
- * Flag for ::cuMemHostRegister()
- */
-#define CU_MEMHOSTREGISTER_DEVICEMAP 0x02
-
-/**
- * If set, peer memory is mapped into CUDA address space and
- * ::cuMemPeerGetDevicePointer() may be called on the host pointer.
- * Flag for ::cuMemPeerRegister()
- */
-#define CU_MEMPEERREGISTER_DEVICEMAP 0x02
-#endif
-
-#if __CUDA_API_VERSION >= 3020
-/**
- * 2D memory copy parameters
- */
-typedef struct CUDA_MEMCPY2D_st
-{
- size_t srcXInBytes; /**< Source X in bytes */
- size_t srcY; /**< Source Y */
-
- CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
- const void *srcHost; /**< Source host pointer */
- CUdeviceptr srcDevice; /**< Source device pointer */
- CUarray srcArray; /**< Source array reference */
- size_t srcPitch; /**< Source pitch (ignored when src is array) */
-
- size_t dstXInBytes; /**< Destination X in bytes */
- size_t dstY; /**< Destination Y */
-
- CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
- void *dstHost; /**< Destination host pointer */
- CUdeviceptr dstDevice; /**< Destination device pointer */
- CUarray dstArray; /**< Destination array reference */
- size_t dstPitch; /**< Destination pitch (ignored when dst is array) */
-
- size_t WidthInBytes; /**< Width of 2D memory copy in bytes */
- size_t Height; /**< Height of 2D memory copy */
-} CUDA_MEMCPY2D;
-
-/**
- * 3D memory copy parameters
- */
-typedef struct CUDA_MEMCPY3D_st
-{
- size_t srcXInBytes; /**< Source X in bytes */
- size_t srcY; /**< Source Y */
- size_t srcZ; /**< Source Z */
- size_t srcLOD; /**< Source LOD */
- CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
- const void *srcHost; /**< Source host pointer */
- CUdeviceptr srcDevice; /**< Source device pointer */
- CUarray srcArray; /**< Source array reference */
- void *reserved0; /**< Must be NULL */
- size_t srcPitch; /**< Source pitch (ignored when src is array) */
- size_t srcHeight; /**< Source height (ignored when src is array; may be 0 if Depth==1) */
-
- size_t dstXInBytes; /**< Destination X in bytes */
- size_t dstY; /**< Destination Y */
- size_t dstZ; /**< Destination Z */
- size_t dstLOD; /**< Destination LOD */
- CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
- void *dstHost; /**< Destination host pointer */
- CUdeviceptr dstDevice; /**< Destination device pointer */
- CUarray dstArray; /**< Destination array reference */
- void *reserved1; /**< Must be NULL */
- size_t dstPitch; /**< Destination pitch (ignored when dst is array) */
- size_t dstHeight; /**< Destination height (ignored when dst is array; may be 0 if Depth==1) */
-
- size_t WidthInBytes; /**< Width of 3D memory copy in bytes */
- size_t Height; /**< Height of 3D memory copy */
- size_t Depth; /**< Depth of 3D memory copy */
-} CUDA_MEMCPY3D;
-
-/**
- * 3D memory cross-context copy parameters
- */
-typedef struct CUDA_MEMCPY3D_PEER_st
-{
- size_t srcXInBytes; /**< Source X in bytes */
- size_t srcY; /**< Source Y */
- size_t srcZ; /**< Source Z */
- size_t srcLOD; /**< Source LOD */
- CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
- const void *srcHost; /**< Source host pointer */
- CUdeviceptr srcDevice; /**< Source device pointer */
- CUarray srcArray; /**< Source array reference */
- CUcontext srcContext; /**< Source context (ignored with srcMemoryType is ::CU_MEMORYTYPE_ARRAY) */
- size_t srcPitch; /**< Source pitch (ignored when src is array) */
- size_t srcHeight; /**< Source height (ignored when src is array; may be 0 if Depth==1) */
-
- size_t dstXInBytes; /**< Destination X in bytes */
- size_t dstY; /**< Destination Y */
- size_t dstZ; /**< Destination Z */
- size_t dstLOD; /**< Destination LOD */
- CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
- void *dstHost; /**< Destination host pointer */
- CUdeviceptr dstDevice; /**< Destination device pointer */
- CUarray dstArray; /**< Destination array reference */
- CUcontext dstContext; /**< Destination context (ignored with dstMemoryType is ::CU_MEMORYTYPE_ARRAY) */
- size_t dstPitch; /**< Destination pitch (ignored when dst is array) */
- size_t dstHeight; /**< Destination height (ignored when dst is array; may be 0 if Depth==1) */
-
- size_t WidthInBytes; /**< Width of 3D memory copy in bytes */
- size_t Height; /**< Height of 3D memory copy */
- size_t Depth; /**< Depth of 3D memory copy */
-} CUDA_MEMCPY3D_PEER;
-
-/**
- * Array descriptor
- */
-typedef struct CUDA_ARRAY_DESCRIPTOR_st
-{
- size_t Width; /**< Width of array */
- size_t Height; /**< Height of array */
-
- CUarray_format Format; /**< Array format */
- unsigned int NumChannels; /**< Channels per array element */
-} CUDA_ARRAY_DESCRIPTOR;
-
-/**
- * 3D array descriptor
- */
-typedef struct CUDA_ARRAY3D_DESCRIPTOR_st
-{
- size_t Width; /**< Width of 3D array */
- size_t Height; /**< Height of 3D array */
- size_t Depth; /**< Depth of 3D array */
-
- CUarray_format Format; /**< Array format */
- unsigned int NumChannels; /**< Channels per array element */
- unsigned int Flags; /**< Flags */
-} CUDA_ARRAY3D_DESCRIPTOR;
-
-#endif /* __CUDA_API_VERSION >= 3020 */
-
-/**
- * If set, the CUDA array is a collection of layers, where each layer is either a 1D
- * or a 2D array and the Depth member of CUDA_ARRAY3D_DESCRIPTOR specifies the number
- * of layers, not the depth of a 3D array.
- */
-#define CUDA_ARRAY3D_LAYERED 0x01
-
-/**
- * Deprecated, use CUDA_ARRAY3D_LAYERED
- */
-#define CUDA_ARRAY3D_2DARRAY 0x01
-
-/**
- * This flag must be set in order to bind a surface reference
- * to the CUDA array
- */
-#define CUDA_ARRAY3D_SURFACE_LDST 0x02
-
-/**
- * Override the texref format with a format inferred from the array.
- * Flag for ::cuTexRefSetArray()
- */
-#define CU_TRSA_OVERRIDE_FORMAT 0x01
-
-/**
- * Read the texture as integers rather than promoting the values to floats
- * in the range [0,1].
- * Flag for ::cuTexRefSetFlags()
- */
-#define CU_TRSF_READ_AS_INTEGER 0x01
-
-/**
- * Use normalized texture coordinates in the range [0,1) instead of [0,dim).
- * Flag for ::cuTexRefSetFlags()
- */
-#define CU_TRSF_NORMALIZED_COORDINATES 0x02
-
-/**
- * Perform sRGB->linear conversion during texture read.
- * Flag for ::cuTexRefSetFlags()
- */
-#define CU_TRSF_SRGB 0x10
-
-/**
- * End of array terminator for the \p extra parameter to
- * ::cuLaunchKernel
- */
-#define CU_LAUNCH_PARAM_END ((void*)0x00)
-
-/**
- * Indicator that the next value in the \p extra parameter to
- * ::cuLaunchKernel will be a pointer to a buffer containing all kernel
- * parameters used for launching kernel \p f. This buffer needs to
- * honor all alignment/padding requirements of the individual parameters.
- * If ::CU_LAUNCH_PARAM_BUFFER_SIZE is not also specified in the
- * \p extra array, then ::CU_LAUNCH_PARAM_BUFFER_POINTER will have no
- * effect.
- */
-#define CU_LAUNCH_PARAM_BUFFER_POINTER ((void*)0x01)
-
-/**
- * Indicator that the next value in the \p extra parameter to
- * ::cuLaunchKernel will be a pointer to a size_t which contains the
- * size of the buffer specified with ::CU_LAUNCH_PARAM_BUFFER_POINTER.
- * It is required that ::CU_LAUNCH_PARAM_BUFFER_POINTER also be specified
- * in the \p extra array if the value associated with
- * ::CU_LAUNCH_PARAM_BUFFER_SIZE is not zero.
- */
-#define CU_LAUNCH_PARAM_BUFFER_SIZE ((void*)0x02)
-
-/**
- * For texture references loaded into the module, use default texunit from
- * texture reference.
- */
-#define CU_PARAM_TR_DEFAULT -1
-
-/**
- * CUDA API made obselete at API version 3020
- */
-#if defined(__CUDA_API_VERSION_INTERNAL)
- #define CUdeviceptr CUdeviceptr_v1
- #define CUDA_MEMCPY2D_st CUDA_MEMCPY2D_v1_st
- #define CUDA_MEMCPY2D CUDA_MEMCPY2D_v1
- #define CUDA_MEMCPY3D_st CUDA_MEMCPY3D_v1_st
- #define CUDA_MEMCPY3D CUDA_MEMCPY3D_v1
- #define CUDA_ARRAY_DESCRIPTOR_st CUDA_ARRAY_DESCRIPTOR_v1_st
- #define CUDA_ARRAY_DESCRIPTOR CUDA_ARRAY_DESCRIPTOR_v1
- #define CUDA_ARRAY3D_DESCRIPTOR_st CUDA_ARRAY3D_DESCRIPTOR_v1_st
- #define CUDA_ARRAY3D_DESCRIPTOR CUDA_ARRAY3D_DESCRIPTOR_v1
-#endif /* CUDA_FORCE_LEGACY32_INTERNAL */
-
-#if defined(__CUDA_API_VERSION_INTERNAL) || __CUDA_API_VERSION < 3020
-typedef unsigned int CUdeviceptr;
-
-typedef struct CUDA_MEMCPY2D_st
-{
- unsigned int srcXInBytes; /**< Source X in bytes */
- unsigned int srcY; /**< Source Y */
- CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
- const void *srcHost; /**< Source host pointer */
- CUdeviceptr srcDevice; /**< Source device pointer */
- CUarray srcArray; /**< Source array reference */
- unsigned int srcPitch; /**< Source pitch (ignored when src is array) */
-
- unsigned int dstXInBytes; /**< Destination X in bytes */
- unsigned int dstY; /**< Destination Y */
- CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
- void *dstHost; /**< Destination host pointer */
- CUdeviceptr dstDevice; /**< Destination device pointer */
- CUarray dstArray; /**< Destination array reference */
- unsigned int dstPitch; /**< Destination pitch (ignored when dst is array) */
-
- unsigned int WidthInBytes; /**< Width of 2D memory copy in bytes */
- unsigned int Height; /**< Height of 2D memory copy */
-} CUDA_MEMCPY2D;
-
-typedef struct CUDA_MEMCPY3D_st
-{
- unsigned int srcXInBytes; /**< Source X in bytes */
- unsigned int srcY; /**< Source Y */
- unsigned int srcZ; /**< Source Z */
- unsigned int srcLOD; /**< Source LOD */
- CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
- const void *srcHost; /**< Source host pointer */
- CUdeviceptr srcDevice; /**< Source device pointer */
- CUarray srcArray; /**< Source array reference */
- void *reserved0; /**< Must be NULL */
- unsigned int srcPitch; /**< Source pitch (ignored when src is array) */
- unsigned int srcHeight; /**< Source height (ignored when src is array; may be 0 if Depth==1) */
-
- unsigned int dstXInBytes; /**< Destination X in bytes */
- unsigned int dstY; /**< Destination Y */
- unsigned int dstZ; /**< Destination Z */
- unsigned int dstLOD; /**< Destination LOD */
- CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
- void *dstHost; /**< Destination host pointer */
- CUdeviceptr dstDevice; /**< Destination device pointer */
- CUarray dstArray; /**< Destination array reference */
- void *reserved1; /**< Must be NULL */
- unsigned int dstPitch; /**< Destination pitch (ignored when dst is array) */
- unsigned int dstHeight; /**< Destination height (ignored when dst is array; may be 0 if Depth==1) */
-
- unsigned int WidthInBytes; /**< Width of 3D memory copy in bytes */
- unsigned int Height; /**< Height of 3D memory copy */
- unsigned int Depth; /**< Depth of 3D memory copy */
-} CUDA_MEMCPY3D;
-
-typedef struct CUDA_ARRAY_DESCRIPTOR_st
-{
- unsigned int Width; /**< Width of array */
- unsigned int Height; /**< Height of array */
-
- CUarray_format Format; /**< Array format */
- unsigned int NumChannels; /**< Channels per array element */
-} CUDA_ARRAY_DESCRIPTOR;
-
-typedef struct CUDA_ARRAY3D_DESCRIPTOR_st
-{
- unsigned int Width; /**< Width of 3D array */
- unsigned int Height; /**< Height of 3D array */
- unsigned int Depth; /**< Depth of 3D array */
-
- CUarray_format Format; /**< Array format */
- unsigned int NumChannels; /**< Channels per array element */
- unsigned int Flags; /**< Flags */
-} CUDA_ARRAY3D_DESCRIPTOR;
-
-#endif /* (__CUDA_API_VERSION_INTERNAL) || __CUDA_API_VERSION < 3020 */
-
-/*
- * If set, the CUDA array contains an array of 2D slices
- * and the Depth member of CUDA_ARRAY3D_DESCRIPTOR specifies
- * the number of slices, not the depth of a 3D array.
- */
-#define CUDA_ARRAY3D_2DARRAY 0x01
-
-/**
- * This flag must be set in order to bind a surface reference
- * to the CUDA array
- */
-#define CUDA_ARRAY3D_SURFACE_LDST 0x02
-
-/**
- * Override the texref format with a format inferred from the array.
- * Flag for ::cuTexRefSetArray()
- */
-#define CU_TRSA_OVERRIDE_FORMAT 0x01
-
-/**
- * Read the texture as integers rather than promoting the values to floats
- * in the range [0,1].
- * Flag for ::cuTexRefSetFlags()
- */
-#define CU_TRSF_READ_AS_INTEGER 0x01
-
-/**
- * Use normalized texture coordinates in the range [0,1) instead of [0,dim).
- * Flag for ::cuTexRefSetFlags()
- */
-#define CU_TRSF_NORMALIZED_COORDINATES 0x02
-
-/**
- * Perform sRGB->linear conversion during texture read.
- * Flag for ::cuTexRefSetFlags()
- */
-#define CU_TRSF_SRGB 0x10
-
-/**
- * For texture references loaded into the module, use default texunit from
- * texture reference.
- */
-#define CU_PARAM_TR_DEFAULT -1
-
-/** @} */ /* END CUDA_TYPES */
-
-#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
- #define CUDAAPI __stdcall
-#else
- #define CUDAAPI
-#endif
-
-/**
- * \defgroup CUDA_INITIALIZE Initialization
- *
- * This section describes the initialization functions of the low-level CUDA
- * driver application programming interface.
- *
- * @{
- */
-
-/*********************************
- ** Initialization
- *********************************/
-typedef CUresult CUDAAPI tcuInit(unsigned int Flags);
-
-/*********************************
- ** Driver Version Query
- *********************************/
-typedef CUresult CUDAAPI tcuDriverGetVersion(int *driverVersion);
-
-/************************************
- **
- ** Device management
- **
- ***********************************/
-
-typedef CUresult CUDAAPI tcuDeviceGet(CUdevice *device, int ordinal);
-typedef CUresult CUDAAPI tcuDeviceGetCount(int *count);
-typedef CUresult CUDAAPI tcuDeviceGetName(char *name, int len, CUdevice dev);
-typedef CUresult CUDAAPI tcuDeviceComputeCapability(int *major, int *minor, CUdevice dev);
-#if __CUDA_API_VERSION >= 3020
- typedef CUresult CUDAAPI tcuDeviceTotalMem(size_t *bytes, CUdevice dev);
-#else
- typedef CUresult CUDAAPI tcuDeviceTotalMem(unsigned int *bytes, CUdevice dev);
-#endif
-
-typedef CUresult CUDAAPI tcuDeviceGetProperties(CUdevprop *prop, CUdevice dev);
-typedef CUresult CUDAAPI tcuDeviceGetAttribute(int *pi, CUdevice_attribute attrib, CUdevice dev);
-
-/************************************
- **
- ** Context management
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuCtxCreate(CUcontext *pctx, unsigned int flags, CUdevice dev);
-typedef CUresult CUDAAPI tcuCtxDestroy(CUcontext ctx);
-typedef CUresult CUDAAPI tcuCtxAttach(CUcontext *pctx, unsigned int flags);
-typedef CUresult CUDAAPI tcuCtxDetach(CUcontext ctx);
-typedef CUresult CUDAAPI tcuCtxPushCurrent(CUcontext ctx);
-typedef CUresult CUDAAPI tcuCtxPopCurrent(CUcontext *pctx);
-
-typedef CUresult CUDAAPI tcuCtxSetCurrent(CUcontext ctx);
-typedef CUresult CUDAAPI tcuCtxGetCurrent(CUcontext *pctx);
-
-typedef CUresult CUDAAPI tcuCtxGetDevice(CUdevice *device);
-typedef CUresult CUDAAPI tcuCtxSynchronize(void);
-
-
-/************************************
- **
- ** Module management
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuModuleLoad(CUmodule *module, const char *fname);
-typedef CUresult CUDAAPI tcuModuleLoadData(CUmodule *module, const void *image);
-typedef CUresult CUDAAPI tcuModuleLoadDataEx(CUmodule *module, const void *image, unsigned int numOptions, CUjit_option *options, void **optionValues);
-typedef CUresult CUDAAPI tcuModuleLoadFatBinary(CUmodule *module, const void *fatCubin);
-typedef CUresult CUDAAPI tcuModuleUnload(CUmodule hmod);
-typedef CUresult CUDAAPI tcuModuleGetFunction(CUfunction *hfunc, CUmodule hmod, const char *name);
-
-#if __CUDA_API_VERSION >= 3020
- typedef CUresult CUDAAPI tcuModuleGetGlobal(CUdeviceptr *dptr, size_t *bytes, CUmodule hmod, const char *name);
-#else
- typedef CUresult CUDAAPI tcuModuleGetGlobal(CUdeviceptr *dptr, unsigned int *bytes, CUmodule hmod, const char *name);
-#endif
-
-typedef CUresult CUDAAPI tcuModuleGetTexRef(CUtexref *pTexRef, CUmodule hmod, const char *name);
-typedef CUresult CUDAAPI tcuModuleGetSurfRef(CUsurfref *pSurfRef, CUmodule hmod, const char *name);
-
-/************************************
- **
- ** Memory management
- **
- ***********************************/
-#if __CUDA_API_VERSION >= 3020
- typedef CUresult CUDAAPI tcuMemGetInfo(size_t *free, size_t *total);
- typedef CUresult CUDAAPI tcuMemAlloc(CUdeviceptr *dptr, size_t bytesize);
- typedef CUresult CUDAAPI tcuMemGetAddressRange(CUdeviceptr *pbase, size_t *psize, CUdeviceptr dptr);
- typedef CUresult CUDAAPI tcuMemAllocPitch(CUdeviceptr *dptr,
- size_t *pPitch,
- size_t WidthInBytes,
- size_t Height,
- // size of biggest r/w to be performed by kernels on this memory
- // 4, 8 or 16 bytes
- unsigned int ElementSizeBytes
- );
-#else
- typedef CUresult CUDAAPI tcuMemGetInfo(unsigned int *free, unsigned int *total);
- typedef CUresult CUDAAPI tcuMemAlloc(CUdeviceptr *dptr, unsigned int bytesize);
- typedef CUresult CUDAAPI tcuMemGetAddressRange(CUdeviceptr *pbase, unsigned int *psize, CUdeviceptr dptr);
- typedef CUresult CUDAAPI tcuMemAllocPitch(CUdeviceptr *dptr,
- unsigned int *pPitch,
- unsigned int WidthInBytes,
- unsigned int Height,
- // size of biggest r/w to be performed by kernels on this memory
- // 4, 8 or 16 bytes
- unsigned int ElementSizeBytes
- );
-#endif
-
-typedef CUresult CUDAAPI tcuMemFree(CUdeviceptr dptr);
-
-#if __CUDA_API_VERSION >= 3020
- typedef CUresult CUDAAPI tcuMemAllocHost(void **pp, size_t bytesize);
-#else
- typedef CUresult CUDAAPI tcuMemAllocHost(void **pp, unsigned int bytesize);
-#endif
-
-typedef CUresult CUDAAPI tcuMemFreeHost(void *p);
-typedef CUresult CUDAAPI tcuMemHostAlloc(void **pp, size_t bytesize, unsigned int Flags);
-
-typedef CUresult CUDAAPI tcuMemHostGetDevicePointer(CUdeviceptr *pdptr, void *p, unsigned int Flags);
-typedef CUresult CUDAAPI tcuMemHostGetFlags(unsigned int *pFlags, void *p);
-
-typedef CUresult CUDAAPI tcuMemHostRegister(void *p, size_t bytesize, unsigned int Flags);
-typedef CUresult CUDAAPI tcuMemHostUnregister(void *p);;
-typedef CUresult CUDAAPI tcuMemcpy(CUdeviceptr dst, CUdeviceptr src, size_t ByteCount);
-typedef CUresult CUDAAPI tcuMemcpyPeer(CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext, size_t ByteCount);
-
-/************************************
- **
- ** Synchronous Memcpy
- **
- ** Intra-device memcpy's done with these functions may execute in parallel with the CPU,
- ** but if host memory is involved, they wait until the copy is done before returning.
- **
- ***********************************/
-// 1D functions
-#if __CUDA_API_VERSION >= 3020
- // system <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyHtoD(CUdeviceptr dstDevice, const void *srcHost, size_t ByteCount);
- typedef CUresult CUDAAPI tcuMemcpyDtoH(void *dstHost, CUdeviceptr srcDevice, size_t ByteCount);
-
- // device <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyDtoD(CUdeviceptr dstDevice, CUdeviceptr srcDevice, size_t ByteCount);
-
- // device <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyDtoA(CUarray dstArray, size_t dstOffset, CUdeviceptr srcDevice, size_t ByteCount);
- typedef CUresult CUDAAPI tcuMemcpyAtoD(CUdeviceptr dstDevice, CUarray srcArray, size_t srcOffset, size_t ByteCount);
-
- // system <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyHtoA(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount);
- typedef CUresult CUDAAPI tcuMemcpyAtoH(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount);
-
- // array <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyAtoA(CUarray dstArray, size_t dstOffset, CUarray srcArray, size_t srcOffset, size_t ByteCount);
-#else
- // system <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyHtoD(CUdeviceptr dstDevice, const void *srcHost, unsigned int ByteCount);
- typedef CUresult CUDAAPI tcuMemcpyDtoH(void *dstHost, CUdeviceptr srcDevice, unsigned int ByteCount);
-
- // device <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyDtoD(CUdeviceptr dstDevice, CUdeviceptr srcDevice, unsigned int ByteCount);
-
- // device <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyDtoA(CUarray dstArray, unsigned int dstOffset, CUdeviceptr srcDevice, unsigned int ByteCount);
- typedef CUresult CUDAAPI tcuMemcpyAtoD(CUdeviceptr dstDevice, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
-
- // system <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyHtoA(CUarray dstArray, unsigned int dstOffset, const void *srcHost, unsigned int ByteCount);
- typedef CUresult CUDAAPI tcuMemcpyAtoH(void *dstHost, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
-
- // array <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyAtoA(CUarray dstArray, unsigned int dstOffset, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
-#endif
-
-// 2D memcpy
-typedef CUresult CUDAAPI tcuMemcpy2D(const CUDA_MEMCPY2D *pCopy);
-typedef CUresult CUDAAPI tcuMemcpy2DUnaligned(const CUDA_MEMCPY2D *pCopy);
-
-// 3D memcpy
-typedef CUresult CUDAAPI tcuMemcpy3D(const CUDA_MEMCPY3D *pCopy);
-
-/************************************
- **
- ** Asynchronous Memcpy
- **
- ** Any host memory involved must be DMA'able (e.g., allocated with cuMemAllocHost).
- ** memcpy's done with these functions execute in parallel with the CPU and, if
- ** the hardware is available, may execute in parallel with the GPU.
- ** Asynchronous memcpy must be accompanied by appropriate stream synchronization.
- **
- ***********************************/
-
-// 1D functions
-#if __CUDA_API_VERSION >= 3020
- // system <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyHtoDAsync(CUdeviceptr dstDevice,
- const void *srcHost, size_t ByteCount, CUstream hStream);
- typedef CUresult CUDAAPI tcuMemcpyDtoHAsync(void *dstHost,
- CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
-
- // device <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyDtoDAsync(CUdeviceptr dstDevice,
- CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
-
- // system <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyHtoAAsync(CUarray dstArray, size_t dstOffset,
- const void *srcHost, size_t ByteCount, CUstream hStream);
- typedef CUresult CUDAAPI tcuMemcpyAtoHAsync(void *dstHost, CUarray srcArray, size_t srcOffset,
- size_t ByteCount, CUstream hStream);
-#else
- // system <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyHtoDAsync(CUdeviceptr dstDevice,
- const void *srcHost, unsigned int ByteCount, CUstream hStream);
- typedef CUresult CUDAAPI tcuMemcpyDtoHAsync(void *dstHost,
- CUdeviceptr srcDevice, unsigned int ByteCount, CUstream hStream);
-
- // device <-> device memory
- typedef CUresult CUDAAPI tcuMemcpyDtoDAsync(CUdeviceptr dstDevice,
- CUdeviceptr srcDevice, unsigned int ByteCount, CUstream hStream);
-
- // system <-> array memory
- typedef CUresult CUDAAPI tcuMemcpyHtoAAsync(CUarray dstArray, unsigned int dstOffset,
- const void *srcHost, unsigned int ByteCount, CUstream hStream);
- typedef CUresult CUDAAPI tcuMemcpyAtoHAsync(void *dstHost, CUarray srcArray, unsigned int srcOffset,
- unsigned int ByteCount, CUstream hStream);
-#endif
-
-// 2D memcpy
-typedef CUresult CUDAAPI tcuMemcpy2DAsync(const CUDA_MEMCPY2D *pCopy, CUstream hStream);
-
-// 3D memcpy
-typedef CUresult CUDAAPI tcuMemcpy3DAsync(const CUDA_MEMCPY3D *pCopy, CUstream hStream);
-
-/************************************
- **
- ** Memset
- **
- ***********************************/
-#if __CUDA_API_VERSION >= 3020
- typedef CUresult CUDAAPI tcuMemsetD8(CUdeviceptr dstDevice, unsigned char uc, size_t N);
- typedef CUresult CUDAAPI tcuMemsetD16(CUdeviceptr dstDevice, unsigned short us, size_t N);
- typedef CUresult CUDAAPI tcuMemsetD32(CUdeviceptr dstDevice, unsigned int ui, size_t N);
- typedef CUresult CUDAAPI tcuMemsetD2D8(CUdeviceptr dstDevice, unsigned int dstPitch, unsigned char uc, size_t Width, size_t Height);
- typedef CUresult CUDAAPI tcuMemsetD2D16(CUdeviceptr dstDevice, unsigned int dstPitch, unsigned short us, size_t Width, size_t Height);
- typedef CUresult CUDAAPI tcuMemsetD2D32(CUdeviceptr dstDevice, unsigned int dstPitch, unsigned int ui, size_t Width, size_t Height);
-#else
- typedef CUresult CUDAAPI tcuMemsetD8(CUdeviceptr dstDevice, unsigned char uc, unsigned int N);
- typedef CUresult CUDAAPI tcuMemsetD16(CUdeviceptr dstDevice, unsigned short us, unsigned int N);
- typedef CUresult CUDAAPI tcuMemsetD32(CUdeviceptr dstDevice, unsigned int ui, unsigned int N);
- typedef CUresult CUDAAPI tcuMemsetD2D8(CUdeviceptr dstDevice, unsigned int dstPitch, unsigned char uc, unsigned int Width, unsigned int Height);
- typedef CUresult CUDAAPI tcuMemsetD2D16(CUdeviceptr dstDevice, unsigned int dstPitch, unsigned short us, unsigned int Width, unsigned int Height);
- typedef CUresult CUDAAPI tcuMemsetD2D32(CUdeviceptr dstDevice, unsigned int dstPitch, unsigned int ui, unsigned int Width, unsigned int Height);
-#endif
-
-/************************************
- **
- ** Function management
- **
- ***********************************/
-
-
-typedef CUresult CUDAAPI tcuFuncSetBlockShape(CUfunction hfunc, int x, int y, int z);
-typedef CUresult CUDAAPI tcuFuncSetSharedSize(CUfunction hfunc, unsigned int bytes);
-typedef CUresult CUDAAPI tcuFuncGetAttribute(int *pi, CUfunction_attribute attrib, CUfunction hfunc);
-typedef CUresult CUDAAPI tcuFuncSetCacheConfig(CUfunction hfunc, CUfunc_cache config);
-typedef CUresult CUDAAPI tcuLaunchKernel(CUfunction f,
- unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ,
- unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ,
- unsigned int sharedMemBytes,
- CUstream hStream, void **kernelParams, void **extra);
-
-/************************************
- **
- ** Array management
- **
- ***********************************/
-
-typedef CUresult CUDAAPI tcuArrayCreate(CUarray *pHandle, const CUDA_ARRAY_DESCRIPTOR *pAllocateArray);
-typedef CUresult CUDAAPI tcuArrayGetDescriptor(CUDA_ARRAY_DESCRIPTOR *pArrayDescriptor, CUarray hArray);
-typedef CUresult CUDAAPI tcuArrayDestroy(CUarray hArray);
-
-typedef CUresult CUDAAPI tcuArray3DCreate(CUarray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR *pAllocateArray);
-typedef CUresult CUDAAPI tcuArray3DGetDescriptor(CUDA_ARRAY3D_DESCRIPTOR *pArrayDescriptor, CUarray hArray);
-
-
-/************************************
- **
- ** Texture reference management
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuTexRefCreate(CUtexref *pTexRef);
-typedef CUresult CUDAAPI tcuTexRefDestroy(CUtexref hTexRef);
-
-typedef CUresult CUDAAPI tcuTexRefSetArray(CUtexref hTexRef, CUarray hArray, unsigned int Flags);
-
-#if __CUDA_API_VERSION >= 3020
- typedef CUresult CUDAAPI tcuTexRefSetAddress(size_t *ByteOffset, CUtexref hTexRef, CUdeviceptr dptr, size_t bytes);
- typedef CUresult CUDAAPI tcuTexRefSetAddress2D(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR *desc, CUdeviceptr dptr, size_t Pitch);
-#else
- typedef CUresult CUDAAPI tcuTexRefSetAddress(unsigned int *ByteOffset, CUtexref hTexRef, CUdeviceptr dptr, unsigned int bytes);
- typedef CUresult CUDAAPI tcuTexRefSetAddress2D(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR *desc, CUdeviceptr dptr, unsigned int Pitch);
-#endif
-
-typedef CUresult CUDAAPI tcuTexRefSetFormat(CUtexref hTexRef, CUarray_format fmt, int NumPackedComponents);
-typedef CUresult CUDAAPI tcuTexRefSetAddressMode(CUtexref hTexRef, int dim, CUaddress_mode am);
-typedef CUresult CUDAAPI tcuTexRefSetFilterMode(CUtexref hTexRef, CUfilter_mode fm);
-typedef CUresult CUDAAPI tcuTexRefSetFlags(CUtexref hTexRef, unsigned int Flags);
-
-typedef CUresult CUDAAPI tcuTexRefGetAddress(CUdeviceptr *pdptr, CUtexref hTexRef);
-typedef CUresult CUDAAPI tcuTexRefGetArray(CUarray *phArray, CUtexref hTexRef);
-typedef CUresult CUDAAPI tcuTexRefGetAddressMode(CUaddress_mode *pam, CUtexref hTexRef, int dim);
-typedef CUresult CUDAAPI tcuTexRefGetFilterMode(CUfilter_mode *pfm, CUtexref hTexRef);
-typedef CUresult CUDAAPI tcuTexRefGetFormat(CUarray_format *pFormat, int *pNumChannels, CUtexref hTexRef);
-typedef CUresult CUDAAPI tcuTexRefGetFlags(unsigned int *pFlags, CUtexref hTexRef);
-
-/************************************
- **
- ** Surface reference management
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuSurfRefSetArray(CUsurfref hSurfRef, CUarray hArray, unsigned int Flags);
-typedef CUresult CUDAAPI tcuSurfRefGetArray(CUarray *phArray, CUsurfref hSurfRef);
-
-/************************************
- **
- ** Parameter management
- **
- ***********************************/
-
-typedef CUresult CUDAAPI tcuParamSetSize(CUfunction hfunc, unsigned int numbytes);
-typedef CUresult CUDAAPI tcuParamSeti(CUfunction hfunc, int offset, unsigned int value);
-typedef CUresult CUDAAPI tcuParamSetf(CUfunction hfunc, int offset, float value);
-typedef CUresult CUDAAPI tcuParamSetv(CUfunction hfunc, int offset, void *ptr, unsigned int numbytes);
-typedef CUresult CUDAAPI tcuParamSetTexRef(CUfunction hfunc, int texunit, CUtexref hTexRef);
-
-
-/************************************
- **
- ** Launch functions
- **
- ***********************************/
-
-typedef CUresult CUDAAPI tcuLaunch(CUfunction f);
-typedef CUresult CUDAAPI tcuLaunchGrid(CUfunction f, int grid_width, int grid_height);
-typedef CUresult CUDAAPI tcuLaunchGridAsync(CUfunction f, int grid_width, int grid_height, CUstream hStream);
-
-/************************************
- **
- ** Events
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuEventCreate(CUevent *phEvent, unsigned int Flags);
-typedef CUresult CUDAAPI tcuEventRecord(CUevent hEvent, CUstream hStream);
-typedef CUresult CUDAAPI tcuEventQuery(CUevent hEvent);
-typedef CUresult CUDAAPI tcuEventSynchronize(CUevent hEvent);
-typedef CUresult CUDAAPI tcuEventDestroy(CUevent hEvent);
-typedef CUresult CUDAAPI tcuEventElapsedTime(float *pMilliseconds, CUevent hStart, CUevent hEnd);
-
-/************************************
- **
- ** Streams
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuStreamCreate(CUstream *phStream, unsigned int Flags);
-typedef CUresult CUDAAPI tcuStreamQuery(CUstream hStream);
-typedef CUresult CUDAAPI tcuStreamSynchronize(CUstream hStream);
-typedef CUresult CUDAAPI tcuStreamDestroy(CUstream hStream);
-
-/************************************
- **
- ** Graphics interop
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuGraphicsUnregisterResource(CUgraphicsResource resource);
-typedef CUresult CUDAAPI tcuGraphicsSubResourceGetMappedArray(CUarray *pArray, CUgraphicsResource resource, unsigned int arrayIndex, unsigned int mipLevel);
-
-#if __CUDA_API_VERSION >= 3020
- typedef CUresult CUDAAPI tcuGraphicsResourceGetMappedPointer(CUdeviceptr *pDevPtr, size_t *pSize, CUgraphicsResource resource);
-#else
- typedef CUresult CUDAAPI tcuGraphicsResourceGetMappedPointer(CUdeviceptr *pDevPtr, unsigned int *pSize, CUgraphicsResource resource);
-#endif
-
-typedef CUresult CUDAAPI tcuGraphicsResourceSetMapFlags(CUgraphicsResource resource, unsigned int flags);
-typedef CUresult CUDAAPI tcuGraphicsMapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
-typedef CUresult CUDAAPI tcuGraphicsUnmapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
-
-/************************************
- **
- ** Export tables
- **
- ***********************************/
-typedef CUresult CUDAAPI tcuGetExportTable(const void **ppExportTable, const CUuuid *pExportTableId);
-
-/************************************
- **
- ** Limits
- **
- ***********************************/
-
-typedef CUresult CUDAAPI tcuCtxSetLimit(CUlimit limit, size_t value);
-typedef CUresult CUDAAPI tcuCtxGetLimit(size_t *pvalue, CUlimit limit);
-
-
-extern tcuDriverGetVersion *cuDriverGetVersion;
-extern tcuDeviceGet *cuDeviceGet;
-extern tcuDeviceGetCount *cuDeviceGetCount;
-extern tcuDeviceGetName *cuDeviceGetName;
-extern tcuDeviceComputeCapability *cuDeviceComputeCapability;
-extern tcuDeviceGetProperties *cuDeviceGetProperties;
-extern tcuDeviceGetAttribute *cuDeviceGetAttribute;
-extern tcuCtxDestroy *cuCtxDestroy;
-extern tcuCtxAttach *cuCtxAttach;
-extern tcuCtxDetach *cuCtxDetach;
-extern tcuCtxPushCurrent *cuCtxPushCurrent;
-extern tcuCtxPopCurrent *cuCtxPopCurrent;
-
-extern tcuCtxSetCurrent *cuCtxSetCurrent;
-extern tcuCtxGetCurrent *cuCtxGetCurrent;
-
-extern tcuCtxGetDevice *cuCtxGetDevice;
-extern tcuCtxSynchronize *cuCtxSynchronize;
-extern tcuModuleLoad *cuModuleLoad;
-extern tcuModuleLoadData *cuModuleLoadData;
-extern tcuModuleLoadDataEx *cuModuleLoadDataEx;
-extern tcuModuleLoadFatBinary *cuModuleLoadFatBinary;
-extern tcuModuleUnload *cuModuleUnload;
-extern tcuModuleGetFunction *cuModuleGetFunction;
-extern tcuModuleGetTexRef *cuModuleGetTexRef;
-extern tcuModuleGetSurfRef *cuModuleGetSurfRef;
-extern tcuMemFreeHost *cuMemFreeHost;
-extern tcuMemHostAlloc *cuMemHostAlloc;
-extern tcuMemHostGetFlags *cuMemHostGetFlags;
-
-extern tcuMemHostRegister *cuMemHostRegister;
-extern tcuMemHostUnregister *cuMemHostUnregister;
-extern tcuMemcpy *cuMemcpy;
-extern tcuMemcpyPeer *cuMemcpyPeer;
-
-extern tcuDeviceTotalMem *cuDeviceTotalMem;
-extern tcuCtxCreate *cuCtxCreate;
-extern tcuModuleGetGlobal *cuModuleGetGlobal;
-extern tcuMemGetInfo *cuMemGetInfo;
-extern tcuMemAlloc *cuMemAlloc;
-extern tcuMemAllocPitch *cuMemAllocPitch;
-extern tcuMemFree *cuMemFree;
-extern tcuMemGetAddressRange *cuMemGetAddressRange;
-extern tcuMemAllocHost *cuMemAllocHost;
-extern tcuMemHostGetDevicePointer *cuMemHostGetDevicePointer;
-extern tcuFuncSetBlockShape *cuFuncSetBlockShape;
-extern tcuFuncSetSharedSize *cuFuncSetSharedSize;
-extern tcuFuncGetAttribute *cuFuncGetAttribute;
-extern tcuFuncSetCacheConfig *cuFuncSetCacheConfig;
-extern tcuLaunchKernel *cuLaunchKernel;
-extern tcuArrayDestroy *cuArrayDestroy;
-extern tcuTexRefCreate *cuTexRefCreate;
-extern tcuTexRefDestroy *cuTexRefDestroy;
-extern tcuTexRefSetArray *cuTexRefSetArray;
-extern tcuTexRefSetFormat *cuTexRefSetFormat;
-extern tcuTexRefSetAddressMode *cuTexRefSetAddressMode;
-extern tcuTexRefSetFilterMode *cuTexRefSetFilterMode;
-extern tcuTexRefSetFlags *cuTexRefSetFlags;
-extern tcuTexRefGetArray *cuTexRefGetArray;
-extern tcuTexRefGetAddressMode *cuTexRefGetAddressMode;
-extern tcuTexRefGetFilterMode *cuTexRefGetFilterMode;
-extern tcuTexRefGetFormat *cuTexRefGetFormat;
-extern tcuTexRefGetFlags *cuTexRefGetFlags;
-extern tcuSurfRefSetArray *cuSurfRefSetArray;
-extern tcuSurfRefGetArray *cuSurfRefGetArray;
-extern tcuParamSetSize *cuParamSetSize;
-extern tcuParamSeti *cuParamSeti;
-extern tcuParamSetf *cuParamSetf;
-extern tcuParamSetv *cuParamSetv;
-extern tcuParamSetTexRef *cuParamSetTexRef;
-extern tcuLaunch *cuLaunch;
-extern tcuLaunchGrid *cuLaunchGrid;
-extern tcuLaunchGridAsync *cuLaunchGridAsync;
-extern tcuEventCreate *cuEventCreate;
-extern tcuEventRecord *cuEventRecord;
-extern tcuEventQuery *cuEventQuery;
-extern tcuEventSynchronize *cuEventSynchronize;
-extern tcuEventDestroy *cuEventDestroy;
-extern tcuEventElapsedTime *cuEventElapsedTime;
-extern tcuStreamCreate *cuStreamCreate;
-extern tcuStreamQuery *cuStreamQuery;
-extern tcuStreamSynchronize *cuStreamSynchronize;
-extern tcuStreamDestroy *cuStreamDestroy;
-extern tcuGraphicsUnregisterResource *cuGraphicsUnregisterResource;
-extern tcuGraphicsSubResourceGetMappedArray *cuGraphicsSubResourceGetMappedArray;
-extern tcuGraphicsResourceSetMapFlags *cuGraphicsResourceSetMapFlags;
-extern tcuGraphicsMapResources *cuGraphicsMapResources;
-extern tcuGraphicsUnmapResources *cuGraphicsUnmapResources;
-extern tcuGetExportTable *cuGetExportTable;
-extern tcuCtxSetLimit *cuCtxSetLimit;
-extern tcuCtxGetLimit *cuCtxGetLimit;
-
-// These functions could be using the CUDA 3.2 interface (_v2)
-extern tcuMemcpyHtoD *cuMemcpyHtoD;
-extern tcuMemcpyDtoH *cuMemcpyDtoH;
-extern tcuMemcpyDtoD *cuMemcpyDtoD;
-extern tcuMemcpyDtoA *cuMemcpyDtoA;
-extern tcuMemcpyAtoD *cuMemcpyAtoD;
-extern tcuMemcpyHtoA *cuMemcpyHtoA;
-extern tcuMemcpyAtoH *cuMemcpyAtoH;
-extern tcuMemcpyAtoA *cuMemcpyAtoA;
-extern tcuMemcpy2D *cuMemcpy2D;
-extern tcuMemcpy2DUnaligned *cuMemcpy2DUnaligned;
-extern tcuMemcpy3D *cuMemcpy3D;
-extern tcuMemcpyHtoDAsync *cuMemcpyHtoDAsync;
-extern tcuMemcpyDtoHAsync *cuMemcpyDtoHAsync;
-extern tcuMemcpyDtoDAsync *cuMemcpyDtoDAsync;
-extern tcuMemcpyHtoAAsync *cuMemcpyHtoAAsync;
-extern tcuMemcpyAtoHAsync *cuMemcpyAtoHAsync;
-extern tcuMemcpy2DAsync *cuMemcpy2DAsync;
-extern tcuMemcpy3DAsync *cuMemcpy3DAsync;
-extern tcuMemsetD8 *cuMemsetD8;
-extern tcuMemsetD16 *cuMemsetD16;
-extern tcuMemsetD32 *cuMemsetD32;
-extern tcuMemsetD2D8 *cuMemsetD2D8;
-extern tcuMemsetD2D16 *cuMemsetD2D16;
-extern tcuMemsetD2D32 *cuMemsetD2D32;
-extern tcuArrayCreate *cuArrayCreate;
-extern tcuArrayGetDescriptor *cuArrayGetDescriptor;
-extern tcuArray3DCreate *cuArray3DCreate;
-extern tcuArray3DGetDescriptor *cuArray3DGetDescriptor;
-extern tcuTexRefSetAddress *cuTexRefSetAddress;
-extern tcuTexRefSetAddress2D *cuTexRefSetAddress2D;
-extern tcuTexRefGetAddress *cuTexRefGetAddress;
-extern tcuGraphicsResourceGetMappedPointer *cuGraphicsResourceGetMappedPointer;
-
-/************************************/
-CUresult CUDAAPI cuInit (unsigned int, int cudaVersion, void *hHandleDriver);
-/************************************/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //__cuda_cuda_h__
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+#include "../../../third-party/cuda/include/host-common/dynlink_cuda_cuda.h"
diff --git a/host-common/include/host-common/dynlink_cuviddec.h b/host-common/include/host-common/dynlink_cuviddec.h
index 43b8b32..00edd37 100644
--- a/host-common/include/host-common/dynlink_cuviddec.h
+++ b/host-common/include/host-common/dynlink_cuviddec.h
@@ -1,913 +1,17 @@
-/*
- * This copyright notice applies to this header file only:
- *
- * Copyright (c) 2010-2017 NVIDIA Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the software, and to permit persons to whom the
- * software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*****************************************************************************************************/
-//! \file cuviddec.h
-//! NVDECODE API provides video decoding interface to NVIDIA GPU devices.
-//! \date 2015-2017
-//! This file contains constants, structure definitions and function prototypes used for decoding.
-/*****************************************************************************************************/
-
-#if !defined(__CUDA_VIDEO_H__)
-#define __CUDA_VIDEO_H__
-
-#ifndef __dynlink_cuda_h__
-#include "host-common/dynlink_cuda.h"
-#endif // __dynlink_cuda_h__
-
-#if defined(_WIN64) || defined(__LP64__) || defined(__x86_64) || defined(AMD64) || defined(_M_AMD64)
-#if (CUDA_VERSION >= 3020) && (!defined(CUDA_FORCE_API_VERSION) || (CUDA_FORCE_API_VERSION >= 3020))
-#define __CUVID_DEVPTR64
-#endif
-#endif
-
-#if defined(__cplusplus)
-extern "C" {
-#endif /* __cplusplus */
-
-typedef void *CUvideodecoder;
-typedef struct _CUcontextlock_st *CUvideoctxlock;
-
-/*********************************************************************************/
-//! \enum cudaVideoCodec
-//! Video codec enums
-//! These enums are used in CUVIDDECODECREATEINFO and CUVIDDECODECAPS structures
-/*********************************************************************************/
-typedef enum cudaVideoCodec_enum {
- cudaVideoCodec_MPEG1=0, /**< MPEG1 */
- cudaVideoCodec_MPEG2, /**< MPEG2 */
- cudaVideoCodec_MPEG4, /**< MPEG4 */
- cudaVideoCodec_VC1, /**< VC1 */
- cudaVideoCodec_H264, /**< H264 */
- cudaVideoCodec_JPEG, /**< JPEG */
- cudaVideoCodec_H264_SVC, /**< H264-SVC */
- cudaVideoCodec_H264_MVC, /**< H264-MVC */
- cudaVideoCodec_HEVC, /**< HEVC */
- cudaVideoCodec_VP8, /**< VP8 */
- cudaVideoCodec_VP9, /**< VP9 */
- cudaVideoCodec_NumCodecs, /**< Max codecs */
- // Uncompressed YUV
- cudaVideoCodec_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), /**< Y,U,V (4:2:0) */
- cudaVideoCodec_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')), /**< Y,V,U (4:2:0) */
- cudaVideoCodec_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')), /**< Y,UV (4:2:0) */
- cudaVideoCodec_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')), /**< YUYV/YUY2 (4:2:2) */
- cudaVideoCodec_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')) /**< UYVY (4:2:2) */
-} cudaVideoCodec;
-
-/*********************************************************************************/
-//! \enum cudaVideoSurfaceFormat
-//! Video surface format enums used for output format of decoded output
-//! These enums are used in CUVIDDECODECREATEINFO structure
-/*********************************************************************************/
-typedef enum cudaVideoSurfaceFormat_enum {
- cudaVideoSurfaceFormat_NV12=0, /**< NV12 format */
- cudaVideoSurfaceFormat_P016=1 /**< 16 bit semiplaner format. Can be used for 10 bit(6LSB bits 0),
- 12 bit (4LSB bits 0) */
-} cudaVideoSurfaceFormat;
-
-/******************************************************************************************************************/
-//! \enum cudaVideoDeinterlaceMode
-//! Deinterlacing mode enums
-//! These enums are used in CUVIDDECODECREATEINFO structure
-//! Use cudaVideoDeinterlaceMode_Weave for progressive content and for content that doesn't need deinterlacing
-//! cudaVideoDeinterlaceMode_Adaptive needs more video memory than other DImodes
-/******************************************************************************************************************/
-typedef enum cudaVideoDeinterlaceMode_enum {
- cudaVideoDeinterlaceMode_Weave=0, /**< Weave both fields (no deinterlacing) */
- cudaVideoDeinterlaceMode_Bob, /**< Drop one field */
- cudaVideoDeinterlaceMode_Adaptive /**< Adaptive deinterlacing */
-} cudaVideoDeinterlaceMode;
-
-/**************************************************************************************************************/
-//! \enum cudaVideoChromaFormat
-//! Chroma format enums
-//! These enums are used in CUVIDDECODECREATEINFO and CUVIDDECODECAPS structures
-//! JPEG supports Monochrome, YUV 4:2:0, YUV 4:2:2 and YUV 4:4:4 chroma formats.
-//! H264, HEVC, VP9, VP8, VC1, MPEG1, MPEG2 and MPEG4 support YUV 4:2:0 chroma format only.
-/**************************************************************************************************************/
-typedef enum cudaVideoChromaFormat_enum {
- cudaVideoChromaFormat_Monochrome=0, /**< MonoChrome */
- cudaVideoChromaFormat_420, /**< YUV 4:2:0 */
- cudaVideoChromaFormat_422, /**< YUV 4:2:2 */
- cudaVideoChromaFormat_444 /**< YUV 4:4:4 */
-} cudaVideoChromaFormat;
-
-/*************************************************************************************************************/
-//! \enum cudaVideoCreateFlags
-//! Decoder flag enums to select preferred decode path
-//! cudaVideoCreate_Default and cudaVideoCreate_PreferCUVID are most optimized, use these whenever possible
-/*************************************************************************************************************/
-typedef enum cudaVideoCreateFlags_enum {
- cudaVideoCreate_Default = 0x00, /**< Default operation mode: use dedicated video engines */
- cudaVideoCreate_PreferCUDA = 0x01, /**< Use CUDA-based decoder (requires valid vidLock object for multi-threading) */
- cudaVideoCreate_PreferDXVA = 0x02, /**< Go through DXVA internally if possible (requires D3D9 interop) */
- cudaVideoCreate_PreferCUVID = 0x04 /**< Use dedicated video engines directly */
-} cudaVideoCreateFlags;
-
-
-/**************************************************************************************************************/
-//! \struct CUVIDDECODECAPS;
-//! This structure is used in cuvidGetDecoderCaps API
-/**************************************************************************************************************/
-typedef struct _CUVIDDECODECAPS
-{
- cudaVideoCodec eCodecType; /**< IN: cudaVideoCodec_XXX */
- cudaVideoChromaFormat eChromaFormat; /**< IN: cudaVideoChromaFormat_XXX */
- unsigned int nBitDepthMinus8; /**< IN: The Value "BitDepth minus 8" */
- unsigned int reserved1[3]; /**< Reserved for future use - set to zero */
-
- unsigned char bIsSupported; /**< OUT: 1 if codec supported, 0 if not supported */
- unsigned char reserved2[3]; /**< Reserved for future use - set to zero */
- unsigned int nMaxWidth; /**< OUT: Max supported coded width in pixels */
- unsigned int nMaxHeight; /**< OUT: Max supported coded height in pixels */
- unsigned int nMaxMBCount; /**< OUT: Max supported macroblock count
- CodedWidth*CodedHeight/256 must be <= nMaxMBCount */
- unsigned short nMinWidth; /**< OUT: Min supported coded width in pixels */
- unsigned short nMinHeight; /**< OUT: Min supported coded height in pixels */
- unsigned int reserved3[11]; /**< Reserved for future use - set to zero */
-} CUVIDDECODECAPS;
-
-/**************************************************************************************************************/
-//! \struct CUVIDDECODECREATEINFO
-//! This structure is used in cuvidCreateDecoder API
-/**************************************************************************************************************/
-typedef struct _CUVIDDECODECREATEINFO
-{
- unsigned long ulWidth; /**< IN: Coded sequence width in pixels */
- unsigned long ulHeight; /**< IN: Coded sequence height in pixels */
- unsigned long ulNumDecodeSurfaces; /**< IN: Maximum number of internal decode surfaces */
- cudaVideoCodec CodecType; /**< IN: cudaVideoCodec_XXX */
- cudaVideoChromaFormat ChromaFormat; /**< IN: cudaVideoChromaFormat_XXX */
- unsigned long ulCreationFlags; /**< IN: Decoder creation flags (cudaVideoCreateFlags_XXX) */
- unsigned long bitDepthMinus8; /**< IN: The value "BitDepth minus 8" */
- unsigned long ulIntraDecodeOnly; /**< IN: Set 1 only if video has all intra frames (default value is 0). This will
- optimize video memory for Intra frames only decoding. The support is limited
- to specific codecs(H264 rightnow), the flag will be ignored for codecs which
- are not supported. However decoding might fail if the flag is enabled in case
- of supported codecs for regular bit streams having P and/or B frames. */
- unsigned long Reserved1[3]; /**< Reserved for future use - set to zero */
- /**
- * IN: area of the frame that should be displayed
- */
- struct {
- short left;
- short top;
- short right;
- short bottom;
- } display_area;
-
- cudaVideoSurfaceFormat OutputFormat; /**< IN: cudaVideoSurfaceFormat_XXX */
- cudaVideoDeinterlaceMode DeinterlaceMode; /**< IN: cudaVideoDeinterlaceMode_XXX */
- unsigned long ulTargetWidth; /**< IN: Post-processed output width (Should be aligned to 2) */
- unsigned long ulTargetHeight; /**< IN: Post-processed output height (Should be aligbed to 2) */
- unsigned long ulNumOutputSurfaces; /**< IN: Maximum number of output surfaces simultaneously mapped */
- CUvideoctxlock vidLock; /**< IN: If non-NULL, context lock used for synchronizing ownership of
- the cuda context. Needed for cudaVideoCreate_PreferCUDA decode */
- /**
- * IN: target rectangle in the output frame (for aspect ratio conversion)
- * if a null rectangle is specified, {0,0,ulTargetWidth,ulTargetHeight} will be used
- */
- struct {
- short left;
- short top;
- short right;
- short bottom;
- } target_rect;
- unsigned long Reserved2[5]; /**< Reserved for future use - set to zero */
-} CUVIDDECODECREATEINFO;
-
-/*********************************************************/
-//! \struct CUVIDH264DPBENTRY
-//! H.264 DPB entry
-//! This structure is used in CUVIDH264PICPARAMS structure
-/*********************************************************/
-typedef struct _CUVIDH264DPBENTRY
-{
- int PicIdx; /**< picture index of reference frame */
- int FrameIdx; /**< frame_num(short-term) or LongTermFrameIdx(long-term) */
- int is_long_term; /**< 0=short term reference, 1=long term reference */
- int not_existing; /**< non-existing reference frame (corresponding PicIdx should be set to -1) */
- int used_for_reference; /**< 0=unused, 1=top_field, 2=bottom_field, 3=both_fields */
- int FieldOrderCnt[2]; /**< field order count of top and bottom fields */
-} CUVIDH264DPBENTRY;
-
-/************************************************************/
-//! \struct CUVIDH264MVCEXT
-//! H.264 MVC picture parameters ext
-//! This structure is used in CUVIDH264PICPARAMS structure
-/************************************************************/
-typedef struct _CUVIDH264MVCEXT
-{
- int num_views_minus1; /**< Max number of coded views minus 1 in video : Range - 0 to 1023 */
- int view_id; /**< view identifier */
- unsigned char inter_view_flag; /**< 1 if used for inter-view prediction, 0 if not */
- unsigned char num_inter_view_refs_l0; /**< number of inter-view ref pics in RefPicList0 */
- unsigned char num_inter_view_refs_l1; /**< number of inter-view ref pics in RefPicList1 */
- unsigned char MVCReserved8Bits; /**< Reserved bits */
- int InterViewRefsL0[16]; /**< view id of the i-th view component for inter-view prediction in RefPicList0 */
- int InterViewRefsL1[16]; /**< view id of the i-th view component for inter-view prediction in RefPicList1 */
-} CUVIDH264MVCEXT;
-
-/*********************************************************/
-//! \struct CUVIDH264SVCEXT
-//! H.264 SVC picture parameters ext
-//! This structure is used in CUVIDH264PICPARAMS structure
-/*********************************************************/
-typedef struct _CUVIDH264SVCEXT
-{
- unsigned char profile_idc;
- unsigned char level_idc;
- unsigned char DQId;
- unsigned char DQIdMax;
- unsigned char disable_inter_layer_deblocking_filter_idc;
- unsigned char ref_layer_chroma_phase_y_plus1;
- signed char inter_layer_slice_alpha_c0_offset_div2;
- signed char inter_layer_slice_beta_offset_div2;
-
- unsigned short DPBEntryValidFlag;
- unsigned char inter_layer_deblocking_filter_control_present_flag;
- unsigned char extended_spatial_scalability_idc;
- unsigned char adaptive_tcoeff_level_prediction_flag;
- unsigned char slice_header_restriction_flag;
- unsigned char chroma_phase_x_plus1_flag;
- unsigned char chroma_phase_y_plus1;
-
- unsigned char tcoeff_level_prediction_flag;
- unsigned char constrained_intra_resampling_flag;
- unsigned char ref_layer_chroma_phase_x_plus1_flag;
- unsigned char store_ref_base_pic_flag;
- unsigned char Reserved8BitsA;
- unsigned char Reserved8BitsB;
-
- short scaled_ref_layer_left_offset;
- short scaled_ref_layer_top_offset;
- short scaled_ref_layer_right_offset;
- short scaled_ref_layer_bottom_offset;
- unsigned short Reserved16Bits;
- struct _CUVIDPICPARAMS *pNextLayer; /**< Points to the picparams for the next layer to be decoded.
- Linked list ends at the target layer. */
- int bRefBaseLayer; /**< whether to store ref base pic */
-} CUVIDH264SVCEXT;
-
-/******************************************************/
-//! \struct CUVIDH264PICPARAMS
-//! H.264 picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/******************************************************/
-typedef struct _CUVIDH264PICPARAMS
-{
- // SPS
- int log2_max_frame_num_minus4;
- int pic_order_cnt_type;
- int log2_max_pic_order_cnt_lsb_minus4;
- int delta_pic_order_always_zero_flag;
- int frame_mbs_only_flag;
- int direct_8x8_inference_flag;
- int num_ref_frames; // NOTE: shall meet level 4.1 restrictions
- unsigned char residual_colour_transform_flag;
- unsigned char bit_depth_luma_minus8; // Must be 0 (only 8-bit supported)
- unsigned char bit_depth_chroma_minus8; // Must be 0 (only 8-bit supported)
- unsigned char qpprime_y_zero_transform_bypass_flag;
- // PPS
- int entropy_coding_mode_flag;
- int pic_order_present_flag;
- int num_ref_idx_l0_active_minus1;
- int num_ref_idx_l1_active_minus1;
- int weighted_pred_flag;
- int weighted_bipred_idc;
- int pic_init_qp_minus26;
- int deblocking_filter_control_present_flag;
- int redundant_pic_cnt_present_flag;
- int transform_8x8_mode_flag;
- int MbaffFrameFlag;
- int constrained_intra_pred_flag;
- int chroma_qp_index_offset;
- int second_chroma_qp_index_offset;
- int ref_pic_flag;
- int frame_num;
- int CurrFieldOrderCnt[2];
- // DPB
- CUVIDH264DPBENTRY dpb[16]; // List of reference frames within the DPB
- // Quantization Matrices (raster-order)
- unsigned char WeightScale4x4[6][16];
- unsigned char WeightScale8x8[2][64];
- // FMO/ASO
- unsigned char fmo_aso_enable;
- unsigned char num_slice_groups_minus1;
- unsigned char slice_group_map_type;
- signed char pic_init_qs_minus26;
- unsigned int slice_group_change_rate_minus1;
- union
- {
- unsigned long long slice_group_map_addr;
- const unsigned char *pMb2SliceGroupMap;
- } fmo;
- unsigned int Reserved[12];
- // SVC/MVC
- union
- {
- CUVIDH264MVCEXT mvcext;
- CUVIDH264SVCEXT svcext;
- };
-} CUVIDH264PICPARAMS;
-
-
-/********************************************************/
-//! \struct CUVIDMPEG2PICPARAMS
-//! MPEG-2 picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/********************************************************/
-typedef struct _CUVIDMPEG2PICPARAMS
-{
- int ForwardRefIdx; // Picture index of forward reference (P/B-frames)
- int BackwardRefIdx; // Picture index of backward reference (B-frames)
- int picture_coding_type;
- int full_pel_forward_vector;
- int full_pel_backward_vector;
- int f_code[2][2];
- int intra_dc_precision;
- int frame_pred_frame_dct;
- int concealment_motion_vectors;
- int q_scale_type;
- int intra_vlc_format;
- int alternate_scan;
- int top_field_first;
- // Quantization matrices (raster order)
- unsigned char QuantMatrixIntra[64];
- unsigned char QuantMatrixInter[64];
-} CUVIDMPEG2PICPARAMS;
-
-// MPEG-4 has VOP types instead of Picture types
-#define I_VOP 0
-#define P_VOP 1
-#define B_VOP 2
-#define S_VOP 3
-
-/*******************************************************/
-//! \struct CUVIDMPEG4PICPARAMS
-//! MPEG-4 picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/*******************************************************/
-typedef struct _CUVIDMPEG4PICPARAMS
-{
- int ForwardRefIdx; // Picture index of forward reference (P/B-frames)
- int BackwardRefIdx; // Picture index of backward reference (B-frames)
- // VOL
- int video_object_layer_width;
- int video_object_layer_height;
- int vop_time_increment_bitcount;
- int top_field_first;
- int resync_marker_disable;
- int quant_type;
- int quarter_sample;
- int short_video_header;
- int divx_flags;
- // VOP
- int vop_coding_type;
- int vop_coded;
- int vop_rounding_type;
- int alternate_vertical_scan_flag;
- int interlaced;
- int vop_fcode_forward;
- int vop_fcode_backward;
- int trd[2];
- int trb[2];
- // Quantization matrices (raster order)
- unsigned char QuantMatrixIntra[64];
- unsigned char QuantMatrixInter[64];
- int gmc_enabled;
-} CUVIDMPEG4PICPARAMS;
-
-/********************************************************/
-//! \struct CUVIDVC1PICPARAMS
-//! VC1 picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/********************************************************/
-typedef struct _CUVIDVC1PICPARAMS
-{
- int ForwardRefIdx; /**< Picture index of forward reference (P/B-frames) */
- int BackwardRefIdx; /**< Picture index of backward reference (B-frames) */
- int FrameWidth; /**< Actual frame width */
- int FrameHeight; /**< Actual frame height */
- // PICTURE
- int intra_pic_flag; /**< Set to 1 for I,BI frames */
- int ref_pic_flag; /**< Set to 1 for I,P frames */
- int progressive_fcm; /**< Progressive frame */
- // SEQUENCE
- int profile;
- int postprocflag;
- int pulldown;
- int interlace;
- int tfcntrflag;
- int finterpflag;
- int psf;
- int multires;
- int syncmarker;
- int rangered;
- int maxbframes;
- // ENTRYPOINT
- int panscan_flag;
- int refdist_flag;
- int extended_mv;
- int dquant;
- int vstransform;
- int loopfilter;
- int fastuvmc;
- int overlap;
- int quantizer;
- int extended_dmv;
- int range_mapy_flag;
- int range_mapy;
- int range_mapuv_flag;
- int range_mapuv;
- int rangeredfrm; // range reduction state
-} CUVIDVC1PICPARAMS;
-
-/***********************************************************/
-//! \struct CUVIDJPEGPICPARAMS
-//! JPEG picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/***********************************************************/
-typedef struct _CUVIDJPEGPICPARAMS
-{
- int Reserved;
-} CUVIDJPEGPICPARAMS;
-
-
-/*******************************************************/
-//! \struct CUVIDHEVCPICPARAMS
-//! HEVC picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/*******************************************************/
-typedef struct _CUVIDHEVCPICPARAMS
-{
- // sps
- int pic_width_in_luma_samples;
- int pic_height_in_luma_samples;
- unsigned char log2_min_luma_coding_block_size_minus3;
- unsigned char log2_diff_max_min_luma_coding_block_size;
- unsigned char log2_min_transform_block_size_minus2;
- unsigned char log2_diff_max_min_transform_block_size;
- unsigned char pcm_enabled_flag;
- unsigned char log2_min_pcm_luma_coding_block_size_minus3;
- unsigned char log2_diff_max_min_pcm_luma_coding_block_size;
- unsigned char pcm_sample_bit_depth_luma_minus1;
-
- unsigned char pcm_sample_bit_depth_chroma_minus1;
- unsigned char pcm_loop_filter_disabled_flag;
- unsigned char strong_intra_smoothing_enabled_flag;
- unsigned char max_transform_hierarchy_depth_intra;
- unsigned char max_transform_hierarchy_depth_inter;
- unsigned char amp_enabled_flag;
- unsigned char separate_colour_plane_flag;
- unsigned char log2_max_pic_order_cnt_lsb_minus4;
-
- unsigned char num_short_term_ref_pic_sets;
- unsigned char long_term_ref_pics_present_flag;
- unsigned char num_long_term_ref_pics_sps;
- unsigned char sps_temporal_mvp_enabled_flag;
- unsigned char sample_adaptive_offset_enabled_flag;
- unsigned char scaling_list_enable_flag;
- unsigned char IrapPicFlag;
- unsigned char IdrPicFlag;
-
- unsigned char bit_depth_luma_minus8;
- unsigned char bit_depth_chroma_minus8;
- unsigned char reserved1[14];
-
- // pps
- unsigned char dependent_slice_segments_enabled_flag;
- unsigned char slice_segment_header_extension_present_flag;
- unsigned char sign_data_hiding_enabled_flag;
- unsigned char cu_qp_delta_enabled_flag;
- unsigned char diff_cu_qp_delta_depth;
- signed char init_qp_minus26;
- signed char pps_cb_qp_offset;
- signed char pps_cr_qp_offset;
-
- unsigned char constrained_intra_pred_flag;
- unsigned char weighted_pred_flag;
- unsigned char weighted_bipred_flag;
- unsigned char transform_skip_enabled_flag;
- unsigned char transquant_bypass_enabled_flag;
- unsigned char entropy_coding_sync_enabled_flag;
- unsigned char log2_parallel_merge_level_minus2;
- unsigned char num_extra_slice_header_bits;
-
- unsigned char loop_filter_across_tiles_enabled_flag;
- unsigned char loop_filter_across_slices_enabled_flag;
- unsigned char output_flag_present_flag;
- unsigned char num_ref_idx_l0_default_active_minus1;
- unsigned char num_ref_idx_l1_default_active_minus1;
- unsigned char lists_modification_present_flag;
- unsigned char cabac_init_present_flag;
- unsigned char pps_slice_chroma_qp_offsets_present_flag;
-
- unsigned char deblocking_filter_override_enabled_flag;
- unsigned char pps_deblocking_filter_disabled_flag;
- signed char pps_beta_offset_div2;
- signed char pps_tc_offset_div2;
- unsigned char tiles_enabled_flag;
- unsigned char uniform_spacing_flag;
- unsigned char num_tile_columns_minus1;
- unsigned char num_tile_rows_minus1;
-
- unsigned short column_width_minus1[21];
- unsigned short row_height_minus1[21];
- unsigned int reserved3[15];
-
- // RefPicSets
- int NumBitsForShortTermRPSInSlice;
- int NumDeltaPocsOfRefRpsIdx;
- int NumPocTotalCurr;
- int NumPocStCurrBefore;
- int NumPocStCurrAfter;
- int NumPocLtCurr;
- int CurrPicOrderCntVal;
- int RefPicIdx[16]; // [refpic] Indices of valid reference pictures (-1 if unused for reference)
- int PicOrderCntVal[16]; // [refpic]
- unsigned char IsLongTerm[16]; // [refpic] 0=not a long-term reference, 1=long-term reference
- unsigned char RefPicSetStCurrBefore[8]; // [0..NumPocStCurrBefore-1] -> refpic (0..15)
- unsigned char RefPicSetStCurrAfter[8]; // [0..NumPocStCurrAfter-1] -> refpic (0..15)
- unsigned char RefPicSetLtCurr[8]; // [0..NumPocLtCurr-1] -> refpic (0..15)
- unsigned char RefPicSetInterLayer0[8];
- unsigned char RefPicSetInterLayer1[8];
- unsigned int reserved4[12];
-
- // scaling lists (diag order)
- unsigned char ScalingList4x4[6][16]; // [matrixId][i]
- unsigned char ScalingList8x8[6][64]; // [matrixId][i]
- unsigned char ScalingList16x16[6][64]; // [matrixId][i]
- unsigned char ScalingList32x32[2][64]; // [matrixId][i]
- unsigned char ScalingListDCCoeff16x16[6]; // [matrixId]
- unsigned char ScalingListDCCoeff32x32[2]; // [matrixId]
-} CUVIDHEVCPICPARAMS;
-
-
-/***********************************************************/
-//! \struct CUVIDVP8PICPARAMS
-//! VP8 picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/***********************************************************/
-typedef struct _CUVIDVP8PICPARAMS
-{
- int width;
- int height;
- unsigned int first_partition_size;
- //Frame Indexes
- unsigned char LastRefIdx;
- unsigned char GoldenRefIdx;
- unsigned char AltRefIdx;
- union {
- struct {
- unsigned char frame_type : 1; /**< 0 = KEYFRAME, 1 = INTERFRAME */
- unsigned char version : 3;
- unsigned char show_frame : 1;
- unsigned char update_mb_segmentation_data : 1; /**< Must be 0 if segmentation is not enabled */
- unsigned char Reserved2Bits : 2;
- };
- unsigned char wFrameTagFlags;
- };
- unsigned char Reserved1[4];
- unsigned int Reserved2[3];
-} CUVIDVP8PICPARAMS;
-
-/***********************************************************/
-//! \struct CUVIDVP9PICPARAMS
-//! VP9 picture parameters
-//! This structure is used in CUVIDPICPARAMS structure
-/***********************************************************/
-typedef struct _CUVIDVP9PICPARAMS
-{
- unsigned int width;
- unsigned int height;
-
- //Frame Indices
- unsigned char LastRefIdx;
- unsigned char GoldenRefIdx;
- unsigned char AltRefIdx;
- unsigned char colorSpace;
-
- unsigned short profile : 3;
- unsigned short frameContextIdx : 2;
- unsigned short frameType : 1;
- unsigned short showFrame : 1;
- unsigned short errorResilient : 1;
- unsigned short frameParallelDecoding : 1;
- unsigned short subSamplingX : 1;
- unsigned short subSamplingY : 1;
- unsigned short intraOnly : 1;
- unsigned short allow_high_precision_mv : 1;
- unsigned short refreshEntropyProbs : 1;
- unsigned short reserved2Bits : 2;
-
- unsigned short reserved16Bits;
-
- unsigned char refFrameSignBias[4];
-
- unsigned char bitDepthMinus8Luma;
- unsigned char bitDepthMinus8Chroma;
- unsigned char loopFilterLevel;
- unsigned char loopFilterSharpness;
-
- unsigned char modeRefLfEnabled;
- unsigned char log2_tile_columns;
- unsigned char log2_tile_rows;
-
- unsigned char segmentEnabled : 1;
- unsigned char segmentMapUpdate : 1;
- unsigned char segmentMapTemporalUpdate : 1;
- unsigned char segmentFeatureMode : 1;
- unsigned char reserved4Bits : 4;
-
-
- unsigned char segmentFeatureEnable[8][4];
- short segmentFeatureData[8][4];
- unsigned char mb_segment_tree_probs[7];
- unsigned char segment_pred_probs[3];
- unsigned char reservedSegment16Bits[2];
-
- int qpYAc;
- int qpYDc;
- int qpChDc;
- int qpChAc;
-
- unsigned int activeRefIdx[3];
- unsigned int resetFrameContext;
- unsigned int mcomp_filter_type;
- unsigned int mbRefLfDelta[4];
- unsigned int mbModeLfDelta[2];
- unsigned int frameTagSize;
- unsigned int offsetToDctParts;
- unsigned int reserved128Bits[4];
-
-} CUVIDVP9PICPARAMS;
-
-
-/******************************************************************************************/
-//! \struct CUVIDPICPARAMS
-//! Picture parameters for decoding
-//! This structure is used in cuvidDecodePicture API
-//! IN for cuvidDecodePicture
-/******************************************************************************************/
-typedef struct _CUVIDPICPARAMS
-{
- int PicWidthInMbs; /**< IN: Coded frame size in macroblocks */
- int FrameHeightInMbs; /**< IN: Coded frame height in macroblocks */
- int CurrPicIdx; /**< IN: Output index of the current picture */
- int field_pic_flag; /**< IN: 0=frame picture, 1=field picture */
- int bottom_field_flag; /**< IN: 0=top field, 1=bottom field (ignored if field_pic_flag=0) */
- int second_field; /**< IN: Second field of a complementary field pair */
- // Bitstream data
- unsigned int nBitstreamDataLen; /**< IN: Number of bytes in bitstream data buffer */
- const unsigned char *pBitstreamData; /**< IN: Ptr to bitstream data for this picture (slice-layer) */
- unsigned int nNumSlices; /**< IN: Number of slices in this picture */
- const unsigned int *pSliceDataOffsets; /**< IN: nNumSlices entries, contains offset of each slice within
- the bitstream data buffer */
- int ref_pic_flag; /**< IN: This picture is a reference picture */
- int intra_pic_flag; /**< IN: This picture is entirely intra coded */
- unsigned int Reserved[30]; /**< Reserved for future use */
- // IN: Codec-specific data
- union {
- CUVIDMPEG2PICPARAMS mpeg2; /**< Also used for MPEG-1 */
- CUVIDH264PICPARAMS h264;
- CUVIDVC1PICPARAMS vc1;
- CUVIDMPEG4PICPARAMS mpeg4;
- CUVIDJPEGPICPARAMS jpeg;
- CUVIDHEVCPICPARAMS hevc;
- CUVIDVP8PICPARAMS vp8;
- CUVIDVP9PICPARAMS vp9;
- unsigned int CodecReserved[1024];
- } CodecSpecific;
-} CUVIDPICPARAMS;
-
-
-/******************************************************/
-//! \struct CUVIDPROCPARAMS
-//! Picture parameters for postprocessing
-//! This structure is used in cuvidMapVideoFrame API
-/******************************************************/
-typedef struct _CUVIDPROCPARAMS
-{
- int progressive_frame; /**< IN: Input is progressive (deinterlace_mode will be ignored) */
- int second_field; /**< IN: Output the second field (ignored if deinterlace mode is Weave) */
- int top_field_first; /**< IN: Input frame is top field first (1st field is top, 2nd field is bottom) */
- int unpaired_field; /**< IN: Input only contains one field (2nd field is invalid) */
- // The fields below are used for raw YUV input
- unsigned int reserved_flags; /**< Reserved for future use (set to zero) */
- unsigned int reserved_zero; /**< Reserved (set to zero) */
- unsigned long long raw_input_dptr; /**< IN: Input CUdeviceptr for raw YUV extensions */
- unsigned int raw_input_pitch; /**< IN: pitch in bytes of raw YUV input (should be aligned appropriately) */
- unsigned int raw_input_format; /**< IN: Input YUV format (cudaVideoCodec_enum) */
- unsigned long long raw_output_dptr; /**< IN: Output CUdeviceptr for raw YUV extensions */
- unsigned int raw_output_pitch; /**< IN: pitch in bytes of raw YUV output (should be aligned appropriately) */
- unsigned int Reserved1; /**< Reserved for future use (set to zero) */
- CUstream output_stream; /**< IN: stream object used by cuvidMapVideoFrame */
- unsigned int Reserved[46]; /**< Reserved for future use (set to zero) */
- void *Reserved2[2]; /**< Reserved for future use (set to zero) */
-} CUVIDPROCPARAMS;
-
-
-/***********************************************************************************************************/
-//! VIDEO_DECODER
-//!
-//! In order to minimize decode latencies, there should be always at least 2 pictures in the decode
-//! queue at any time, in order to make sure that all decode engines are always busy.
-//!
-//! Overall data flow:
-//! - cuvidGetDecoderCaps(...)
-//! - cuvidCreateDecoder(...)
-//! - For each picture:
-//! + cuvidDecodePicture(N)
-//! + cuvidMapVideoFrame(N-4)
-//! + do some processing in cuda
-//! + cuvidUnmapVideoFrame(N-4)
-//! + cuvidDecodePicture(N+1)
-//! + cuvidMapVideoFrame(N-3)
-//! + ...
-//! - cuvidDestroyDecoder(...)
-//!
-//! NOTE:
-//! - When the cuda context is created from a D3D device, the D3D device must also be created
-//! with the D3DCREATE_MULTITHREADED flag.
-//! - There is a limit to how many pictures can be mapped simultaneously (ulNumOutputSurfaces)
-//! - cuvidDecodePicture may block the calling thread if there are too many pictures pending
-//! in the decode queue
-/***********************************************************************************************************/
-
-
-/**********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidGetDecoderCaps(CUVIDDECODECAPS *pdc)
-//! Queries decode capabilities of NVDEC-HW based on CodecType, ChromaFormat and BitDepthMinus8 parameters.
-//! 1. Application fills IN parameters CodecType, ChromaFormat and BitDepthMinus8 of CUVIDDECODECAPS structure
-//! 2. On calling cuvidGetDecoderCaps, driver fills OUT parameters if the IN parameters are supported
-//! If IN parameters passed to the driver are not supported by NVDEC-HW, then all OUT params are set to 0.
-//! E.g. on Geforce GTX 960:
-//! App fills - eCodecType = cudaVideoCodec_H264; eChromaFormat = cudaVideoChromaFormat_420; nBitDepthMinus8 = 0;
-//! Given IN parameters are supported, hence driver fills: bIsSupported = 1; nMinWidth = 48; nMinHeight = 16;
-//! nMaxWidth = 4096; nMaxHeight = 4096; nMaxMBCount = 65536;
-//! CodedWidth*CodedHeight/256 must be less than or equal to nMaxMBCount
-/**********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidGetDecoderCaps(CUVIDDECODECAPS *pdc);
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCreateDecoder(CUvideodecoder *phDecoder, CUVIDDECODECREATEINFO *pdci)
-//! Create the decoder object based on pdci. A handle to the created decoder is returned
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCreateDecoder(CUvideodecoder *phDecoder, CUVIDDECODECREATEINFO *pdci);
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidDestroyDecoder(CUvideodecoder hDecoder)
-//! Destroy the decoder object.
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidDestroyDecoder(CUvideodecoder hDecoder);
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidDecodePicture(CUvideodecoder hDecoder, CUVIDPICPARAMS *pPicParams)
-//! Decode a single picture (field or frame)
-//! Kicks off HW decoding
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidDecodePicture(CUvideodecoder hDecoder, CUVIDPICPARAMS *pPicParams);
-
-
-#if !defined(__CUVID_DEVPTR64) || defined(__CUVID_INTERNAL)
-/************************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidMapVideoFrame(CUvideodecoder hDecoder, int nPicIdx, unsigned int *pDevPtr,
-//! unsigned int *pPitch, CUVIDPROCPARAMS *pVPP);
-//! Post-process and map video frame corresponding to nPicIdx for use in cuda. Returns cuda device pointer and associated
-//! pitch of the video frame
-/************************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidMapVideoFrame(CUvideodecoder hDecoder, int nPicIdx,
- unsigned int *pDevPtr, unsigned int *pPitch,
- CUVIDPROCPARAMS *pVPP);
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidUnmapVideoFrame(CUvideodecoder hDecoder, unsigned int DevPtr)
-//! Unmap a previously mapped video frame
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidUnmapVideoFrame(CUvideodecoder hDecoder, unsigned int DevPtr);
-#endif
-
-#if defined(_WIN64) || defined(__LP64__) || defined(__x86_64) || defined(AMD64) || defined(_M_AMD64)
-/************************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidMapVideoFrame64(CUvideodecoder hDecoder, int nPicIdx, unsigned long long *pDevPtr,
-//! unsigned int *pPitch, CUVIDPROCPARAMS *pVPP);
-//! Post-process and map video frame corresponding to nPicIdx for use in cuda. Returns cuda device pointer and associated
-//! pitch of the video frame
-/************************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidMapVideoFrame64(CUvideodecoder hDecoder, int nPicIdx, unsigned long long *pDevPtr,
- unsigned int *pPitch, CUVIDPROCPARAMS *pVPP);
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidUnmapVideoFrame64(CUvideodecoder hDecoder, unsigned long long DevPtr);
-//! Unmap a previously mapped video frame
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidUnmapVideoFrame64(CUvideodecoder hDecoder, unsigned long long DevPtr);
-
-#if defined(__CUVID_DEVPTR64) && !defined(__CUVID_INTERNAL)
-#define tcuvidMapVideoFrame tcuvidMapVideoFrame64
-#define tcuvidUnmapVideoFrame tcuvidUnmapVideoFrame64
-#endif
-#endif
-
-
-
-/********************************************************************************************************************/
-//!
-//! Context-locking: to facilitate multi-threaded implementations, the following 4 functions
-//! provide a simple mutex-style host synchronization. If a non-NULL context is specified
-//! in CUVIDDECODECREATEINFO, the codec library will acquire the mutex associated with the given
-//! context before making any cuda calls.
-//! A multi-threaded application could create a lock associated with a context handle so that
-//! multiple threads can safely share the same cuda context:
-//! - use cuCtxPopCurrent immediately after context creation in order to create a 'floating' context
-//! that can be passed to cuvidCtxLockCreate.
-//! - When using a floating context, all cuda calls should only be made within a cuvidCtxLock/cuvidCtxUnlock section.
-//!
-//! NOTE: This is a safer alternative to cuCtxPushCurrent and cuCtxPopCurrent, and is not related to video
-//! decoder in any way (implemented as a critical section associated with cuCtx{Push|Pop}Current calls).
-/********************************************************************************************************************/
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCtxLockCreate(CUvideoctxlock *pLock, CUcontext ctx)
-//! This API is used to create CtxLock object
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCtxLockCreate(CUvideoctxlock *pLock, CUcontext ctx);
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCtxLockDestroy(CUvideoctxlock lck)
-//! This API is used to free CtxLock object
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCtxLockDestroy(CUvideoctxlock lck);
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCtxLock(CUvideoctxlock lck, unsigned int reserved_flags)
-//! This API is used to acquire ctxlock
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCtxLock(CUvideoctxlock lck, unsigned int reserved_flags);
-
-/********************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCtxUnlock(CUvideoctxlock lck, unsigned int reserved_flags)
-//! This API is used to release ctxlock
-/********************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCtxUnlock(CUvideoctxlock lck, unsigned int reserved_flags);
-
-/**********************************************************************************************/
-
-extern tcuvidGetDecoderCaps *cuvidGetDecoderCaps;
-extern tcuvidCreateDecoder *cuvidCreateDecoder;
-extern tcuvidDestroyDecoder *cuvidDestroyDecoder;
-extern tcuvidDecodePicture *cuvidDecodePicture;
-extern tcuvidMapVideoFrame *cuvidMapVideoFrame;
-extern tcuvidUnmapVideoFrame *cuvidUnmapVideoFrame;
-
-#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64)
-extern tcuvidMapVideoFrame64 *cuvidMapVideoFrame64;
-extern tcuvidUnmapVideoFrame64 *cuvidUnmapVideoFrame64;
-#endif
-
-// extern tcuvidGetVideoFrameSurface *cuvidGetVideoFrameSurface;
-
-extern tcuvidCtxLockCreate *cuvidCtxLockCreate;
-extern tcuvidCtxLockDestroy *cuvidCtxLockDestroy;
-extern tcuvidCtxLock *cuvidCtxLock;
-extern tcuvidCtxUnlock *cuvidCtxUnlock;
-
-#if defined(__cplusplus)
-}
-// Auto-lock helper for C++ applications
-class CCtxAutoLock
-{
-private:
- CUvideoctxlock m_ctx;
-public:
- CCtxAutoLock(CUvideoctxlock ctx);
- ~CCtxAutoLock();
-};
-#endif /* __cplusplus */
-
-#endif // __CUDA_VIDEO_H__
-
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+#include "../../../third-party/cuda/include/host-common/dynlink_cuviddec.h"
diff --git a/host-common/include/host-common/dynlink_nvcuvid.h b/host-common/include/host-common/dynlink_nvcuvid.h
index 74d9d1d..1d43e54 100644
--- a/host-common/include/host-common/dynlink_nvcuvid.h
+++ b/host-common/include/host-common/dynlink_nvcuvid.h
@@ -1,368 +1,17 @@
-/*
- * This copyright notice applies to this header file only:
- *
- * Copyright (c) 2010-2017 NVIDIA Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the software, and to permit persons to whom the
- * software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/********************************************************************************************************************/
-//! \file nvcuvid.h
-//! NVDECODE API provides video decoding interface to NVIDIA GPU devices.
-//! \date 2015-2017
-//! This file contains the interface constants, structure definitions and function prototypes.
-/********************************************************************************************************************/
-
-#if !defined(__NVCUVID_H__)
-#define __NVCUVID_H__
-
-#include "host-common/dynlink_cuviddec.h"
-
-#if defined(__cplusplus)
-extern "C" {
-#endif /* __cplusplus */
-
-/*********************************
-** Initialization
-*********************************/
-CUresult CUDAAPI cuvidInit(unsigned int Flags);
-
-/***********************************************/
-//!
-//! High-level helper APIs for video sources
-//!
-/***********************************************/
-
-typedef void *CUvideosource;
-typedef void *CUvideoparser;
-typedef long long CUvideotimestamp;
-
-
-/************************************************************************/
-//! \enum cudaVideoState
-//! Video source state enums
-//! Used in cuvidSetVideoSourceState and cuvidGetVideoSourceState APIs
-/************************************************************************/
-typedef enum {
- cudaVideoState_Error = -1, /**< Error state (invalid source) */
- cudaVideoState_Stopped = 0, /**< Source is stopped (or reached end-of-stream) */
- cudaVideoState_Started = 1 /**< Source is running and delivering data */
-} cudaVideoState;
-
-/************************************************************************/
-//! \enum cudaAudioCodec
-//! Audio compression enums
-//! Used in CUAUDIOFORMAT structure
-/************************************************************************/
-typedef enum {
- cudaAudioCodec_MPEG1=0, /**< MPEG-1 Audio */
- cudaAudioCodec_MPEG2, /**< MPEG-2 Audio */
- cudaAudioCodec_MP3, /**< MPEG-1 Layer III Audio */
- cudaAudioCodec_AC3, /**< Dolby Digital (AC3) Audio */
- cudaAudioCodec_LPCM, /**< PCM Audio */
- cudaAudioCodec_AAC, /**< AAC Audio */
-} cudaAudioCodec;
-
-/************************************************************************************************/
-//! \ingroup STRUCTS
-//! \struct CUVIDEOFORMAT
-//! Video format
-//! Used in cuvidGetSourceVideoFormat API
-/************************************************************************************************/
-typedef struct
-{
- cudaVideoCodec codec; /**< OUT: Compression format */
- /**
- * OUT: frame rate = numerator / denominator (for example: 30000/1001)
- */
- struct {
- /**< OUT: frame rate numerator (0 = unspecified or variable frame rate) */
- unsigned int numerator;
- /**< OUT: frame rate denominator (0 = unspecified or variable frame rate) */
- unsigned int denominator;
- } frame_rate;
- unsigned char progressive_sequence; /**< OUT: 0=interlaced, 1=progressive */
- unsigned char bit_depth_luma_minus8; /**< OUT: high bit depth luma. E.g, 2 for 10-bitdepth, 4 for 12-bitdepth */
- unsigned char bit_depth_chroma_minus8; /**< OUT: high bit depth chroma. E.g, 2 for 10-bitdepth, 4 for 12-bitdepth */
- unsigned char reserved1; /**< Reserved for future use */
- unsigned int coded_width; /**< OUT: coded frame width in pixels */
- unsigned int coded_height; /**< OUT: coded frame height in pixels */
- /**
- * area of the frame that should be displayed
- * typical example:
- * coded_width = 1920, coded_height = 1088
- * display_area = { 0,0,1920,1080 }
- */
- struct {
- int left; /**< OUT: left position of display rect */
- int top; /**< OUT: top position of display rect */
- int right; /**< OUT: right position of display rect */
- int bottom; /**< OUT: bottom position of display rect */
- } display_area;
- cudaVideoChromaFormat chroma_format; /**< OUT: Chroma format */
- unsigned int bitrate; /**< OUT: video bitrate (bps, 0=unknown) */
- /**
- * OUT: Display Aspect Ratio = x:y (4:3, 16:9, etc)
- */
- struct {
- int x;
- int y;
- } display_aspect_ratio;
- /**
- * Video Signal Description
- * Refer section E.2.1 (VUI parameters semantics) of H264 spec file
- */
- struct {
- unsigned char video_format : 3; /**< OUT: 0-Component, 1-PAL, 2-NTSC, 3-SECAM, 4-MAC, 5-Unspecified */
- unsigned char video_full_range_flag : 1; /**< OUT: indicates the black level and luma and chroma range */
- unsigned char reserved_zero_bits : 4; /**< Reserved bits */
- unsigned char color_primaries; /**< OUT: chromaticity coordinates of source primaries */
- unsigned char transfer_characteristics; /**< OUT: opto-electronic transfer characteristic of the source picture */
- unsigned char matrix_coefficients; /**< OUT: used in deriving luma and chroma signals from RGB primaries */
- } video_signal_description;
- unsigned int seqhdr_data_length; /**< OUT: Additional bytes following (CUVIDEOFORMATEX) */
-} CUVIDEOFORMAT;
-
-/****************************************************************/
-//! \ingroup STRUCTS
-//! \struct CUVIDEOFORMATEX
-//! Video format including raw sequence header information
-//! Used in cuvidGetSourceVideoFormat API
-/****************************************************************/
-typedef struct
-{
- CUVIDEOFORMAT format; /**< OUT: CUVIDEOFORMAT structure */
- unsigned char raw_seqhdr_data[1024]; /**< OUT: Sequence header data */
-} CUVIDEOFORMATEX;
-
-/****************************************************************/
-//! \ingroup STRUCTS
-//! \struct CUAUDIOFORMAT
-//! Audio formats
-//! Used in cuvidGetSourceAudioFormat API
-/****************************************************************/
-typedef struct
-{
- cudaAudioCodec codec; /**< OUT: Compression format */
- unsigned int channels; /**< OUT: number of audio channels */
- unsigned int samplespersec; /**< OUT: sampling frequency */
- unsigned int bitrate; /**< OUT: For uncompressed, can also be used to determine bits per sample */
- unsigned int reserved1; /**< Reserved for future use */
- unsigned int reserved2; /**< Reserved for future use */
-} CUAUDIOFORMAT;
-
-
-/***************************************************************/
-//! \enum CUvideopacketflags
-//! Data packet flags
-//! Used in CUVIDSOURCEDATAPACKET structure
-/***************************************************************/
-typedef enum {
- CUVID_PKT_ENDOFSTREAM = 0x01, /**< Set when this is the last packet for this stream */
- CUVID_PKT_TIMESTAMP = 0x02, /**< Timestamp is valid */
- CUVID_PKT_DISCONTINUITY = 0x04, /**< Set when a discontinuity has to be signalled */
- CUVID_PKT_ENDOFPICTURE = 0x08, /**< Set when the packet contains exactly one frame */
-} CUvideopacketflags;
-
-/*****************************************************************************/
-//! \ingroup STRUCTS
-//! \struct CUVIDSOURCEDATAPACKET
-//! Data Packet
-//! Used in cuvidParseVideoData API
-//! IN for cuvidParseVideoData
-/*****************************************************************************/
-typedef struct _CUVIDSOURCEDATAPACKET
-{
- unsigned long flags; /**< IN: Combination of CUVID_PKT_XXX flags */
- unsigned long payload_size; /**< IN: number of bytes in the payload (may be zero if EOS flag is set) */
- const unsigned char *payload; /**< IN: Pointer to packet payload data (may be NULL if EOS flag is set) */
- CUvideotimestamp timestamp; /**< IN: Presentation time stamp (10MHz clock), only valid if
- CUVID_PKT_TIMESTAMP flag is set */
-} CUVIDSOURCEDATAPACKET;
-
-// Callback for packet delivery
-typedef int (CUDAAPI *PFNVIDSOURCECALLBACK)(void *, CUVIDSOURCEDATAPACKET *);
-
-/**************************************************************************************************************************/
-//! \ingroup STRUCTS
-//! \struct CUVIDSOURCEPARAMS
-//! Describes parameters needed in cuvidCreateVideoSource API
-//! NVDECODE API is intended for HW accelerated video decoding so CUvideosource doesn't have audio demuxer for all supported
-//! containers. It's recommended to clients to use their own or third party demuxer if audio support is needed.
-/**************************************************************************************************************************/
-typedef struct _CUVIDSOURCEPARAMS
-{
- unsigned int ulClockRate; /**< IN: Time stamp units in Hz (0=default=10000000Hz) */
- unsigned int uReserved1[7]; /**< Reserved for future use - set to zero */
- void *pUserData; /**< IN: User private data passed in to the data handlers */
- PFNVIDSOURCECALLBACK pfnVideoDataHandler; /**< IN: Called to deliver video packets */
- PFNVIDSOURCECALLBACK pfnAudioDataHandler; /**< IN: Called to deliver audio packets. */
- void *pvReserved2[8]; /**< Reserved for future use - set to NULL */
-} CUVIDSOURCEPARAMS;
-
-
-/**********************************************/
-//! \ingroup ENUMS
-//! \enum CUvideosourceformat_flags
-//! CUvideosourceformat_flags
-//! Used in cuvidGetSourceVideoFormat API
-/**********************************************/
-typedef enum {
- CUVID_FMT_EXTFORMATINFO = 0x100 /**< Return extended format structure (CUVIDEOFORMATEX) */
-} CUvideosourceformat_flags;
-
-#if !defined(__APPLE__)
-/**************************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCreateVideoSource(CUvideosource *pObj, const char *pszFileName, CUVIDSOURCEPARAMS *pParams)
-//! Create CUvideosource object. CUvideosource spawns demultiplexer thread that provides two callbacks:
-//! pfnVideoDataHandler() and pfnAudioDataHandler()
-//! NVDECODE API is intended for HW accelerated video decoding so CUvideosource doesn't have audio demuxer for all supported
-//! containers. It's recommended to clients to use their own or third party demuxer if audio support is needed.
-/**************************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCreateVideoSource(CUvideosource *pObj, const char *pszFileName, CUVIDSOURCEPARAMS *pParams);
-
-/****************************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCreateVideoSourceW(CUvideosource *pObj, const wchar_t *pwszFileName, CUVIDSOURCEPARAMS *pParams)
-//! Create video source object and initialize
-/****************************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCreateVideoSourceW(CUvideosource *pObj, const wchar_t *pwszFileName, CUVIDSOURCEPARAMS *pParams);
-
-/*********************************************************************/
-//! \fn CUresult CUDAAPI cuvidDestroyVideoSource(CUvideosource obj)
-//! Destroy video source
-/*********************************************************************/
-typedef CUresult CUDAAPI tcuvidDestroyVideoSource(CUvideosource obj);
-
-/******************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidSetVideoSourceState(CUvideosource obj, cudaVideoState state)
-//! Set video source state
-/******************************************************************************************/
-typedef CUresult CUDAAPI tcuvidSetVideoSourceState(CUvideosource obj, cudaVideoState state);
-
-/******************************************************************************************/
-//! \fn cudaVideoState CUDAAPI cuvidGetVideoSourceState(CUvideosource obj)
-//! Get video source state
-/******************************************************************************************/
-typedef cudaVideoState CUDAAPI tcuvidGetVideoSourceState(CUvideosource obj);
-
-/****************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidGetSourceVideoFormat(CUvideosource obj, CUVIDEOFORMAT *pvidfmt, unsigned int flags)
-//! Gets details of video stream in pvidfmt
-/****************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidGetSourceVideoFormat(CUvideosource obj, CUVIDEOFORMAT *pvidfmt, unsigned int flags);
-
-/****************************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidGetSourceAudioFormat(CUvideosource obj, CUAUDIOFORMAT *paudfmt, unsigned int flags)
-//! Get audio source format
-//! NVDECODE API is intended for HW accelarated video decoding so CUvideosource doesn't have audio demuxer for all suppported
-//! containers. It's recommended to clients to use their own or third party demuxer if audio support is needed.
-/****************************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidGetSourceAudioFormat(CUvideosource obj, CUAUDIOFORMAT *paudfmt, unsigned int flags);
-
-#endif
-/**********************************************************************************/
-//! \ingroup STRUCTS
-//! \struct CUVIDPARSERDISPINFO
-//! Used in cuvidParseVideoData API with PFNVIDDISPLAYCALLBACK pfnDisplayPicture
-/**********************************************************************************/
-typedef struct _CUVIDPARSERDISPINFO
-{
- int picture_index; /**< OUT: Index of the current picture */
- int progressive_frame; /**< OUT: 1 if progressive frame; 0 otherwise */
- int top_field_first; /**< OUT: 1 if top field is displayed first; 0 otherwise */
- int repeat_first_field; /**< OUT: Number of additional fields (1=ivtc, 2=frame doubling, 4=frame tripling,
- -1=unpaired field) */
- CUvideotimestamp timestamp; /**< OUT: Presentation time stamp */
-} CUVIDPARSERDISPINFO;
-
-/***********************************************************************************************************************/
-//! Parser callbacks
-//! The parser will call these synchronously from within cuvidParseVideoData(), whenever a picture is ready to
-//! be decoded and/or displayed. First argument in functions is "void *pUserData" member of structure CUVIDSOURCEPARAMS
-/***********************************************************************************************************************/
-typedef int (CUDAAPI *PFNVIDSEQUENCECALLBACK)(void *, CUVIDEOFORMAT *);
-typedef int (CUDAAPI *PFNVIDDECODECALLBACK)(void *, CUVIDPICPARAMS *);
-typedef int (CUDAAPI *PFNVIDDISPLAYCALLBACK)(void *, CUVIDPARSERDISPINFO *);
-
-/**************************************/
-//! \ingroup STRUCTS
-//! \struct CUVIDPARSERPARAMS
-//! Used in cuvidCreateVideoParser API
-/**************************************/
-typedef struct _CUVIDPARSERPARAMS
-{
- cudaVideoCodec CodecType; /**< IN: cudaVideoCodec_XXX */
- unsigned int ulMaxNumDecodeSurfaces; /**< IN: Max # of decode surfaces (parser will cycle through these) */
- unsigned int ulClockRate; /**< IN: Timestamp units in Hz (0=default=10000000Hz) */
- unsigned int ulErrorThreshold; /**< IN: % Error threshold (0-100) for calling pfnDecodePicture (100=always
- IN: call pfnDecodePicture even if picture bitstream is fully corrupted) */
- unsigned int ulMaxDisplayDelay; /**< IN: Max display queue delay (improves pipelining of decode with display)
- 0=no delay (recommended values: 2..4) */
- unsigned int uReserved1[5]; /**< IN: Reserved for future use - set to 0 */
- void *pUserData; /**< IN: User data for callbacks */
- PFNVIDSEQUENCECALLBACK pfnSequenceCallback; /**< IN: Called before decoding frames and/or whenever there is a fmt change */
- PFNVIDDECODECALLBACK pfnDecodePicture; /**< IN: Called when a picture is ready to be decoded (decode order) */
- PFNVIDDISPLAYCALLBACK pfnDisplayPicture; /**< IN: Called whenever a picture is ready to be displayed (display order) */
- void *pvReserved2[7]; /**< Reserved for future use - set to NULL */
- CUVIDEOFORMATEX *pExtVideoInfo; /**< IN: [Optional] sequence header data from system layer */
-} CUVIDPARSERPARAMS;
-
-/************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidCreateVideoParser(CUvideoparser *pObj, CUVIDPARSERPARAMS *pParams)
-//! Create video parser object and initialize
-/************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidCreateVideoParser(CUvideoparser *pObj, CUVIDPARSERPARAMS *pParams);
-
-/************************************************************************************************/
-//! \fn CUresult CUDAAPI cuvidParseVideoData(CUvideoparser obj, CUVIDSOURCEDATAPACKET *pPacket)
-//! Parse the video data from source data packet in pPacket
-//! Extracts parameter sets like SPS, PPS, bitstream etc. from pPacket and
-//! calls back pfnDecodePicture with CUVIDPICPARAMS data for kicking of HW decoding
-/************************************************************************************************/
-typedef CUresult CUDAAPI tcuvidParseVideoData(CUvideoparser obj, CUVIDSOURCEDATAPACKET *pPacket);
-
-/*******************************************************************/
-//! \fn CUresult CUDAAPI cuvidDestroyVideoParser(CUvideoparser obj)
-/*******************************************************************/
-typedef CUresult CUDAAPI tcuvidDestroyVideoParser(CUvideoparser obj);
-
-extern tcuvidCreateVideoSource *cuvidCreateVideoSource;
-extern tcuvidCreateVideoSourceW *cuvidCreateVideoSourceW;
-extern tcuvidDestroyVideoSource *cuvidDestroyVideoSource;
-extern tcuvidSetVideoSourceState *cuvidSetVideoSourceState;
-extern tcuvidGetVideoSourceState *cuvidGetVideoSourceState;
-extern tcuvidGetSourceVideoFormat *cuvidGetSourceVideoFormat;
-extern tcuvidGetSourceAudioFormat *cuvidGetSourceAudioFormat;
-
-extern tcuvidCreateVideoParser *cuvidCreateVideoParser;
-extern tcuvidParseVideoData *cuvidParseVideoData;
-extern tcuvidDestroyVideoParser *cuvidDestroyVideoParser;
-
-/**********************************************************************************************/
-
-#if defined(__cplusplus)
-}
-#endif /* __cplusplus */
-
-#endif // __NVCUVID_H__
-
-
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+#include "../../../third-party/cuda/include/host-common/dynlink_nvcuvid.h"