Requirements and Functionality#

NPPDx is a CUDA C++ header-only library. To use this, the following software is required:

  • CUDA Toolkit: 13.0 or newer

  • CUDA compiler: C++17 required

  • Host Compiler: C++17 required

  • CMake (Optional): 3.30 or newer – to build the shipped examples or consume the CMake package; not required for a manual nvcc -I build

Supported Hardware and Platforms#

  • CPU architecture: x86_64 on Linux or x64 on Windows. aarch64 is not officially supported.

  • NVIDIA GPU architectures: sm_75 (Turing) or newer.

Supported Compilers#

CUDA compilers:

  • NVCC: 13.0+ (CUDA Toolkit 13.0 or newer)

  • Clang: 21+ for Clang device compilation to PTX (see Installation Guide)

Host / C++ compilers (C++17 required):

  • GCC 10 or newer on Linux

  • Clang 15 or newer when using Clang as the host compiler on Linux

  • MSVC 1944 or newer with Visual Studio 2022 on Windows

Dependencies#

  • commonDx headers (bundled under include/ in the repository)

Supported Functionality#

This is an Early Access (EA) version of NPPDx. The current functionality of the library is a subset of the capabilities that will be available in the first official release.

Supported memory packing formats#

The following packing_format values are supported for ingest and exgest (for definitions, see Terminology). FFmpeg names are the closest matching pixel formats. Texture Buffer support marks formats that can use the hardware accelerated (CUDA array) texture and surface path.

NPPDx format

Description

FFmpeg equivalent

Texture Buffer support

Packed RGB

rgb24

8-bit packed RGB

rgb24

Yes

rgb10

10-bit packed RGB (uint32_t word per 1 pixel (2X:10R:10G:10B))

x2rgb10le

rgb16

16-bit packed RGB

rgb48le

Packed YUV 4:2:2

y210

10-bit packed Y0 U0 Y1 V0 in 16-bit samples

y210le

uyvp

10-bit packed (2 pixels per 5 bytes)

n/a

v210

10-bit packed (4 uint32_t words per 6 pixels)

v210

yuv2

8-bit packed Y0 U01 Y1 V01 (4 bytes per 2 pixels; YUYV-style)

yuyv422

Semi-planar YUV

nv12

8-bit semi-planar 4:2:0

nv12

Yes

p010

10-bit semi-planar 4:2:0

p010le

Yes

nv16

8-bit semi-planar 4:2:2

nv16

Yes

p216

16-bit semi-planar 4:2:2

p216le

Yes

Planar RGB/BGR

rgbp

8-bit planar RGB (R, G, B plane order)

gbrp

Yes

bgrp

8-bit planar BGR (B, G, R plane order)

gbrp

Yes

Planar YUV

yuv420p

8-bit planar 4:2:0

yuv420p

yuv420p10

10-bit planar 4:2:0

yuv420p10le

yuv422p

8-bit planar 4:2:2

yuv422p

yuv422p10

10-bit planar 4:2:2

yuv422p10le

yuv444p

8-bit planar 4:4:4

yuv444p

Yes

yuv444p10

10-bit planar 4:4:4

yuv444p10le

Yes

The authoritative enum is in operators/formats.hpp.

Supported image processing step categories#

The following processing step categories are available to be fused between ingest and exgest (for definitions, see Terminology):

Use is_supported_v or the shipped examples to verify that a specific processing step is valid for the tile size, format, and architecture combination.