From 4c4630e4107fadc6a54355aed56a38c74d37cba7 Mon Sep 17 00:00:00 2001 From: John Wells Date: Thu, 10 Sep 2026 05:33:45 -0400 Subject: [PATCH 1/3] Support of vk-graph performance work --- CHANGELOG.md | 29 ++++++++++++--------------- Cargo.toml | 2 +- README.md | 2 +- crates/nvidia-dlss/CHANGELOG.md | 20 ++++++++++++++++++ crates/nvidia-dlss/Cargo.toml | 2 +- crates/nvidia-nrd/CHANGELOG.md | 25 +++++++++++++++++++++++ crates/nvidia-nrd/Cargo.toml | 2 +- crates/nvidia-omm/CHANGELOG.md | 12 +++++++++++ crates/nvidia-sdk/CHANGELOG.md | 1 + crates/nvidia-streamline/CHANGELOG.md | 20 ++++++++++++++++++ crates/nvidia-streamline/Cargo.toml | 2 +- 11 files changed, 96 insertions(+), 21 deletions(-) create mode 100644 crates/nvidia-dlss/CHANGELOG.md create mode 100644 crates/nvidia-nrd/CHANGELOG.md create mode 100644 crates/nvidia-omm/CHANGELOG.md create mode 120000 crates/nvidia-sdk/CHANGELOG.md create mode 100644 crates/nvidia-streamline/CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 949d163..301971b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,23 @@ -# Changelog +# nvidia-sdk Changelog -## nvidia-nrd 0.1.1 (2026-09-10) +This changelog covers SDK acquisition and staging. Integration release notes: -- Fix repeated native compilation in downstream projects by watching SDK source - files individually instead of recursively watching the entire SDK directory. +- [nvidia-dlss](https://github.com/attackgoat/nvidia/blob/main/crates/nvidia-dlss/CHANGELOG.md) +- [nvidia-nrd](https://github.com/attackgoat/nvidia/blob/main/crates/nvidia-nrd/CHANGELOG.md) +- [nvidia-omm](https://github.com/attackgoat/nvidia/blob/main/crates/nvidia-omm/CHANGELOG.md) +- [nvidia-streamline](https://github.com/attackgoat/nvidia/blob/main/crates/nvidia-streamline/CHANGELOG.md) ## 0.1.0 (2026-09-05) +Published `nvidia-sdk` to crates.io. + Initial extraction of the NVIDIA integrations from private codebase. -- `nvidia-sdk`: pinned, SHA-256-verified SDK acquisition, cache/offline support, +- Pinned, SHA-256-verified SDK acquisition, cache/offline support, explicit SDK overrides, source dependency assembly, and runtime staging. -- `nvidia-dlss`: Vulkan NGX DLSS Ray Reconstruction on x86-64 GNU Linux. -- `nvidia-streamline`: Vulkan interposer and DLSS Ray Reconstruction on - x86-64 MSVC Windows. -- `nvidia-nrd`: NRD RELAX SH on x86-64 Linux/Windows and Apple silicon macOS. -- `nvidia-omm`: native CPU baking on x86-64 Linux/Windows and Intel/Apple - silicon macOS. -- SHARC 1.8.3 shader-header acquisition on all targets through `nvidia-sdk`. -- Default-enabled optional `vk-graph` adapters and graph-independent Vulkan APIs. -- SDK-free documentation builds; no NVIDIA SDK payloads vendored in these crates. +- SHARC 1.8.3 shader-header acquisition on all targets. +- SDK-free documentation builds; no NVIDIA SDK payloads vendored in the crate. The declared minimum Rust version is 1.95, including default-feature dependencies. -Native SDK components retain their upstream licenses separately from these -MIT OR Apache-2.0 bindings. +Native SDK components retain their upstream licenses separately from this +MIT OR Apache-2.0 crate. diff --git a/Cargo.toml b/Cargo.toml index 65afa52..3157efd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ serde_json = "1" sha2 = "0.10" toml = "0.9" ureq = { version = "2.12", default-features = false, features = ["tls"] } -vk-graph = "0.14.7" +vk-graph = { version = "0.15", git = "https://github.com/attackgoat/vk-graph", branch = "performance" } zip = { version = "4.6.1", default-features = false, features = ["deflate"] } [workspace.lints.rust] diff --git a/README.md b/README.md index 6d89ad3..f0a9b94 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Rust integrations for selected NVIDIA graphics SDKs. | OMM CPU baker | [![nvidia-omm](https://img.shields.io/crates/v/nvidia-omm.svg)](https://crates.io/crates/nvidia-omm) | [![docs.rs](https://docs.rs/nvidia-omm/badge.svg)](https://docs.rs/nvidia-omm) | | Streamline | [![nvidia-streamline](https://img.shields.io/crates/v/nvidia-streamline.svg)](https://crates.io/crates/nvidia-streamline) | [![docs.rs](https://docs.rs/nvidia-streamline/badge.svg)](https://docs.rs/nvidia-streamline) | -See the [changelog](https://github.com/attackgoat/nvidia/blob/main/CHANGELOG.md) +See the [SDK changelog and integration changelog links](https://github.com/attackgoat/nvidia/blob/main/CHANGELOG.md) and [release checklist](https://github.com/attackgoat/nvidia/blob/main/RELEASE.md). > [!NOTE] diff --git a/crates/nvidia-dlss/CHANGELOG.md b/crates/nvidia-dlss/CHANGELOG.md new file mode 100644 index 0000000..97f9983 --- /dev/null +++ b/crates/nvidia-dlss/CHANGELOG.md @@ -0,0 +1,20 @@ +# nvidia-dlss Changelog + +## 0.2.0 (Unreleased) + +- **Breaking:** Update the optional `vk-graph` adapter from 0.14.7 to 0.15. + +Publication is pending the crates.io release of `vk-graph` 0.15 and completion +of the release gates. + +## 0.1.0 (2026-09-05) + +Published `nvidia-dlss` to crates.io. Initial extraction from private codebase. + +- Vulkan NGX DLSS Ray Reconstruction on x86-64 GNU Linux. +- Default-enabled optional `vk-graph` 0.14.7 adapter and graph-independent Vulkan APIs. +- SDK-free documentation builds; no NVIDIA SDK payloads vendored in the crate. + +The declared minimum Rust version is 1.95, including default-feature dependencies. +Native SDK components retain their upstream licenses separately from these +MIT OR Apache-2.0 bindings. diff --git a/crates/nvidia-dlss/Cargo.toml b/crates/nvidia-dlss/Cargo.toml index 90f3aa6..200bf77 100644 --- a/crates/nvidia-dlss/Cargo.toml +++ b/crates/nvidia-dlss/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nvidia-dlss" -version.workspace = true +version = "0.2.0" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/nvidia-nrd/CHANGELOG.md b/crates/nvidia-nrd/CHANGELOG.md new file mode 100644 index 0000000..ef211ff --- /dev/null +++ b/crates/nvidia-nrd/CHANGELOG.md @@ -0,0 +1,25 @@ +# nvidia-nrd Changelog + +## 0.2.0 (Unreleased) + +- **Breaking:** Update the optional `vk-graph` adapter from 0.14.7 to 0.15. + +Publication is pending the crates.io release of `vk-graph` 0.15 and completion +of the release gates. + +## 0.1.1 (2026-09-10) + +- Fix repeated native compilation in downstream projects by watching SDK source + files individually instead of recursively watching the entire SDK directory. + +## 0.1.0 (2026-09-05) + +Published `nvidia-nrd` to crates.io. Initial extraction from private codebase. + +- NRD RELAX SH on x86-64 Linux/Windows and Apple silicon macOS. +- Default-enabled optional `vk-graph` 0.14.7 adapter and graph-independent Vulkan APIs. +- SDK-free documentation builds; no NVIDIA SDK payloads vendored in the crate. + +The declared minimum Rust version is 1.95, including default-feature dependencies. +Native SDK components retain their upstream licenses separately from these +MIT OR Apache-2.0 bindings. diff --git a/crates/nvidia-nrd/Cargo.toml b/crates/nvidia-nrd/Cargo.toml index 4387165..3a1931a 100644 --- a/crates/nvidia-nrd/Cargo.toml +++ b/crates/nvidia-nrd/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nvidia-nrd" -version = "0.1.1" +version = "0.2.0" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/nvidia-omm/CHANGELOG.md b/crates/nvidia-omm/CHANGELOG.md new file mode 100644 index 0000000..c910973 --- /dev/null +++ b/crates/nvidia-omm/CHANGELOG.md @@ -0,0 +1,12 @@ +# nvidia-omm Changelog + +## 0.1.0 (2026-09-05) + +Published `nvidia-omm` to crates.io. Initial extraction from private codebase. + +- Native CPU baking on x86-64 Linux/Windows and Intel/Apple silicon macOS. +- SDK-free documentation builds; no NVIDIA SDK payloads vendored in the crate. + +The declared minimum Rust version is 1.95, including default-feature dependencies. +Native SDK components retain their upstream licenses separately from these +MIT OR Apache-2.0 bindings. diff --git a/crates/nvidia-sdk/CHANGELOG.md b/crates/nvidia-sdk/CHANGELOG.md new file mode 120000 index 0000000..699cc9e --- /dev/null +++ b/crates/nvidia-sdk/CHANGELOG.md @@ -0,0 +1 @@ +../../CHANGELOG.md \ No newline at end of file diff --git a/crates/nvidia-streamline/CHANGELOG.md b/crates/nvidia-streamline/CHANGELOG.md new file mode 100644 index 0000000..74ce5d3 --- /dev/null +++ b/crates/nvidia-streamline/CHANGELOG.md @@ -0,0 +1,20 @@ +# nvidia-streamline Changelog + +## 0.2.0 (Unreleased) + +- **Breaking:** Update the optional `vk-graph` adapter from 0.14.7 to 0.15. + +Publication is pending the crates.io release of `vk-graph` 0.15 and completion +of the release gates. + +## 0.1.0 (2026-09-05) + +Published `nvidia-streamline` to crates.io. Initial extraction from private codebase. + +- Vulkan interposer and DLSS Ray Reconstruction on x86-64 MSVC Windows. +- Default-enabled optional `vk-graph` 0.14.7 adapter and graph-independent Vulkan APIs. +- SDK-free documentation builds; no NVIDIA SDK payloads vendored in the crate. + +The declared minimum Rust version is 1.95, including default-feature dependencies. +Native SDK components retain their upstream licenses separately from these +MIT OR Apache-2.0 bindings. diff --git a/crates/nvidia-streamline/Cargo.toml b/crates/nvidia-streamline/Cargo.toml index 26804e5..93c1e5a 100644 --- a/crates/nvidia-streamline/Cargo.toml +++ b/crates/nvidia-streamline/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nvidia-streamline" -version.workspace = true +version = "0.2.0" edition.workspace = true rust-version.workspace = true license.workspace = true From ae8e63c3b107ea2ce906db5ada6e96e0a9a9e927 Mon Sep 17 00:00:00 2001 From: John Wells Date: Tue, 22 Sep 2026 17:12:37 -0400 Subject: [PATCH 2/3] Add DLSS modes p/up --- crates/nvidia-dlss/native/ngx.cpp | 16 ++++++- crates/nvidia-dlss/native/ngx_test.cpp | 11 ++++- crates/nvidia-dlss/src/lib.rs | 4 ++ crates/nvidia-nrd/native/nrd.cpp | 22 ++++++--- crates/nvidia-nrd/src/lib.rs | 46 ++++++++++++++++++- crates/nvidia-nrd/src/native.rs | 13 ++++-- .../nvidia-streamline/native/streamline.cpp | 8 +++- crates/nvidia-streamline/src/lib.rs | 4 ++ 8 files changed, 109 insertions(+), 15 deletions(-) diff --git a/crates/nvidia-dlss/native/ngx.cpp b/crates/nvidia-dlss/native/ngx.cpp index aa86186..51dc117 100644 --- a/crates/nvidia-dlss/native/ngx.cpp +++ b/crates/nvidia-dlss/native/ngx.cpp @@ -26,6 +26,8 @@ constexpr uint32_t kSpecularHitDistance = 1; constexpr uint32_t kDlssRrQualityBalanced = 0; constexpr uint32_t kDlssRrQualityQuality = 1; constexpr uint32_t kDlssRrQualityDlaa = 2; +constexpr uint32_t kDlssRrQualityPerformance = 3; +constexpr uint32_t kDlssRrQualityUltraPerformance = 4; struct NgxIdentity { @@ -273,7 +275,7 @@ bool validReflectionGuide(const NgxDlssRrResources& resources) bool validDlssRrQuality(uint32_t quality) { - return quality <= kDlssRrQualityDlaa; + return quality <= kDlssRrQualityUltraPerformance; } NVSDK_NGX_PerfQuality_Value dlssRrQuality(uint32_t quality) @@ -284,6 +286,10 @@ NVSDK_NGX_PerfQuality_Value dlssRrQuality(uint32_t quality) return NVSDK_NGX_PerfQuality_Value_MaxQuality; case kDlssRrQualityDlaa: return NVSDK_NGX_PerfQuality_Value_DLAA; + case kDlssRrQualityPerformance: + return NVSDK_NGX_PerfQuality_Value_MaxPerf; + case kDlssRrQualityUltraPerformance: + return NVSDK_NGX_PerfQuality_Value_UltraPerformance; default: return NVSDK_NGX_PerfQuality_Value_Balanced; } @@ -351,6 +357,14 @@ NVSDK_NGX_Result ensureFeature( NVSDK_NGX_RayReconstruction_Hint_Render_Preset_E); NVSDK_NGX_DLSSD_Create_Params create{}; + NVSDK_NGX_Parameter_SetUI( + context->parameters, + NVSDK_NGX_Parameter_RayReconstruction_Hint_Render_Preset_Performance, + NVSDK_NGX_RayReconstruction_Hint_Render_Preset_E); + NVSDK_NGX_Parameter_SetUI( + context->parameters, + NVSDK_NGX_Parameter_RayReconstruction_Hint_Render_Preset_UltraPerformance, + NVSDK_NGX_RayReconstruction_Hint_Render_Preset_E); create.InDenoiseMode = NVSDK_NGX_DLSS_Denoise_Mode_DLUnified; create.InRoughnessMode = NVSDK_NGX_DLSS_Roughness_Mode_Packed; create.InUseHWDepth = context->config.depth == 2 diff --git a/crates/nvidia-dlss/native/ngx_test.cpp b/crates/nvidia-dlss/native/ngx_test.cpp index a7caffc..d06fe6b 100644 --- a/crates/nvidia-dlss/native/ngx_test.cpp +++ b/crates/nvidia-dlss/native/ngx_test.cpp @@ -35,6 +35,7 @@ static float expectedScale[2]; static int expectedFlags; static unsigned expectedDepth; static unsigned expectedGuide; +static int expectedQuality; static unsigned evaluations; static unsigned creations; @@ -57,6 +58,7 @@ static NVSDK_NGX_Result captureCreation( assert(parameter(params, NVSDK_NGX_Parameter_Height) == 32); assert(parameter(params, NVSDK_NGX_Parameter_OutWidth) == 128); assert(parameter(params, NVSDK_NGX_Parameter_OutHeight) == 64); + assert(parameter(params, NVSDK_NGX_Parameter_PerfQualityValue) == expectedQuality); *handle = reinterpret_cast(2); ++creations; return NVSDK_NGX_Result_Success; @@ -121,7 +123,12 @@ int main() for (unsigned color : {0, 1}) for (unsigned motion : {0, 1}) for (unsigned depth : {0, 1, 2}) + for (const auto mode : { + std::pair{kDlssRrQualityBalanced, NVSDK_NGX_PerfQuality_Value_Balanced}, + std::pair{kDlssRrQualityPerformance, NVSDK_NGX_PerfQuality_Value_MaxPerf}, + std::pair{kDlssRrQualityUltraPerformance, NVSDK_NGX_PerfQuality_Value_UltraPerformance}}) { + expectedQuality = mode.second; Parameters params; NgxContext context(L"", L"", nullptr); context.parameters = ¶ms; @@ -145,7 +152,7 @@ int main() NgxFrameConstants frame{}; auto evaluate = [&]() { return nvidia_dlss_ngx_evaluate(&context, reinterpret_cast(3), - kDlssRrQualityBalanced, &frame, &resources); + mode.first, &frame, &resources); }; for (const auto scale : {std::pair{1.0f, 1.0f}, std::pair{64.0f, -32.0f}, std::pair{0.5f, 0.0f}, std::pair{0.0f, -0.5f}, std::pair{0.0f, -0.0f}}) @@ -188,7 +195,7 @@ int main() } assert(evaluations == before && creations == created); } - assert(creations == 12 && evaluations == 120); + assert(creations == 36 && evaluations == 360); assert(!validConfig({2, 0, 0})); assert(!validConfig({0, 2, 0})); assert(!validConfig({0, 0, 3})); diff --git a/crates/nvidia-dlss/src/lib.rs b/crates/nvidia-dlss/src/lib.rs index c812243..8c559da 100644 --- a/crates/nvidia-dlss/src/lib.rs +++ b/crates/nvidia-dlss/src/lib.rs @@ -90,6 +90,8 @@ pub enum DlssRrQuality { Quality = 1, /// Native-resolution anti-aliasing; render and output dimensions must be equal. Dlaa = 2, + Performance = 3, + UltraPerformance = 4, } /// Images for NGX evaluation. All inputs, including depth and the reflection guide, @@ -567,6 +569,8 @@ mod tests { assert_eq!(DlssRrQuality::Balanced as u32, 0); assert_eq!(DlssRrQuality::Quality as u32, 1); assert_eq!(DlssRrQuality::Dlaa as u32, 2); + assert_eq!(DlssRrQuality::Performance as u32, 3); + assert_eq!(DlssRrQuality::UltraPerformance as u32, 4); assert_eq!(size_of::(), 64); assert_eq!(align_of::(), 8); diff --git a/crates/nvidia-nrd/native/nrd.cpp b/crates/nvidia-nrd/native/nrd.cpp index 3227ae7..f246396 100644 --- a/crates/nvidia-nrd/native/nrd.cpp +++ b/crates/nvidia-nrd/native/nrd.cpp @@ -57,6 +57,10 @@ struct NrdFrame { float denoising_range; uint32_t width; uint32_t height; + uint32_t resource_width; + uint32_t resource_height; + uint32_t previous_width; + uint32_t previous_height; uint32_t frame_index; uint32_t reset; struct { @@ -75,7 +79,7 @@ struct NrdFrame { static_assert(sizeof(NrdImage) == 16); static_assert(sizeof(NrdResources) == 176); -static_assert(sizeof(NrdFrame) == 344); +static_assert(sizeof(NrdFrame) == 360); struct Context { nrd::Integration integration; @@ -189,7 +193,13 @@ extern "C" int32_t nvidia_nrd_evaluate( try { Context& context = *static_cast(opaque); - int32_t result = recreate(context, frame->width, frame->height); + if (frame->width == 0 || frame->height == 0 + || frame->previous_width == 0 || frame->previous_height == 0 + || frame->width > frame->resource_width || frame->height > frame->resource_height + || frame->previous_width > frame->resource_width || frame->previous_height > frame->resource_height) + return -2; + + int32_t result = recreate(context, frame->resource_width, frame->resource_height); if (result != 0) return result; @@ -205,10 +215,10 @@ extern "C" int32_t nvidia_nrd_evaluate( common.resourceSize[1] = context.height; common.resourceSizePrev[0] = context.width; common.resourceSizePrev[1] = context.height; - common.rectSize[0] = context.width; - common.rectSize[1] = context.height; - common.rectSizePrev[0] = context.width; - common.rectSizePrev[1] = context.height; + common.rectSize[0] = static_cast(frame->width); + common.rectSize[1] = static_cast(frame->height); + common.rectSizePrev[0] = static_cast(frame->previous_width); + common.rectSizePrev[1] = static_cast(frame->previous_height); common.denoisingRange = frame->denoising_range; common.frameIndex = frame->frame_index; common.accumulationMode = frame->reset ? nrd::AccumulationMode::RESTART : nrd::AccumulationMode::CONTINUE; diff --git a/crates/nvidia-nrd/src/lib.rs b/crates/nvidia-nrd/src/lib.rs index 7c673f2..86e0c18 100644 --- a/crates/nvidia-nrd/src/lib.rs +++ b/crates/nvidia-nrd/src/lib.rs @@ -37,6 +37,24 @@ pub const SDK_VERSION: &str = "4.17.3"; #[cfg(any(nvidia_nrd_native, test))] const VULKAN_1_4: u32 = vk::make_api_version(0, 1, 4, 0); +#[cfg(any(nvidia_nrd_native, test))] +fn validate_rectangles( + resource: [u32; 2], + current: [u32; 2], + previous: [u32; 2], +) -> anyhow::Result<()> { + anyhow::ensure!( + (0..2).all(|axis| resource[axis] > 0 + && resource[axis] <= u32::from(u16::MAX) + && current[axis] > 0 + && current[axis] <= resource[axis] + && previous[axis] > 0 + && previous[axis] <= resource[axis]), + "nrd active rectangles must fit nonzero u16 resource dimensions" + ); + Ok(()) +} + #[derive(Clone, Copy, Debug)] #[repr(C)] pub struct Frame { @@ -50,6 +68,12 @@ pub struct Frame { pub denoising_range: f32, pub width: u32, pub height: u32, + /// Fixed allocation dimensions shared by every input and output image. + pub resource_width: u32, + pub resource_height: u32, + /// Previous frame's active rectangle, for dynamic-resolution reprojection. + pub previous_width: u32, + pub previous_height: u32, pub frame_index: u32, pub reset: u32, pub settings: RelaxSettings, @@ -184,6 +208,26 @@ impl Resources { mod tests { use super::*; + #[test] + fn dynamic_rectangles_must_fit_the_fixed_allocation() { + for (current, previous) in [ + ([960, 540], [427, 240]), + ([427, 240], [960, 540]), + ([693, 390], [691, 389]), + ] { + assert!(validate_rectangles([960, 540], current, previous).is_ok()); + } + for (resource, current, previous) in [ + ([960, 540], [0, 240], [960, 540]), + ([960, 540], [961, 540], [960, 540]), + ([960, 540], [427, 240], [960, 541]), + ([0, 540], [1, 240], [1, 240]), + ([65536, 540], [427, 240], [427, 240]), + ] { + assert!(validate_rectangles(resource, current, previous).is_err()); + } + } + #[test] fn rejects_unsupported_api_versions_without_ffi() { for version in [ @@ -277,7 +321,7 @@ mod tests { assert_eq!(size_of::(), 16); assert_eq!(size_of::(), 176); assert_eq!(size_of::(), 40); - assert_eq!(size_of::(), 344); + assert_eq!(size_of::(), 360); } #[test] diff --git a/crates/nvidia-nrd/src/native.rs b/crates/nvidia-nrd/src/native.rs index 66c98a5..ad41801 100644 --- a/crates/nvidia-nrd/src/native.rs +++ b/crates/nvidia-nrd/src/native.rs @@ -1,13 +1,13 @@ -#[cfg(feature = "vk-graph")] -use vk_graph::driver::device::Device; - use { - crate::{Frame, Resources}, + crate::{Frame, Resources, validate_rectangles}, anyhow::Context as _, ash::vk::{self, Handle as _}, std::{ffi::c_void, ptr::NonNull, sync::Mutex}, }; +#[cfg(feature = "vk-graph")] +use vk_graph::driver::device::Device; + static API_LOCK: Mutex<()> = Mutex::new(()); unsafe extern "C" { @@ -165,6 +165,11 @@ impl Nrd { resources: &Resources, ) -> anyhow::Result<()> { resources.validate_layouts()?; + validate_rectangles( + [frame.resource_width, frame.resource_height], + [frame.width, frame.height], + [frame.previous_width, frame.previous_height], + )?; let context = self.context.context("nrd has been shut down")?; let _guard = API_LOCK diff --git a/crates/nvidia-streamline/native/streamline.cpp b/crates/nvidia-streamline/native/streamline.cpp index c2df1d1..78620e2 100644 --- a/crates/nvidia-streamline/native/streamline.cpp +++ b/crates/nvidia-streamline/native/streamline.cpp @@ -26,6 +26,8 @@ constexpr uint32_t kVkFormatR32Sfloat = 100; constexpr uint32_t kDlssRrQualityBalanced = 0; constexpr uint32_t kDlssRrQualityQuality = 1; constexpr uint32_t kDlssRrQualityDlaa = 2; +constexpr uint32_t kDlssRrQualityPerformance = 3; +constexpr uint32_t kDlssRrQualityUltraPerformance = 4; using NvidiaSlLogCallback = void (*)(int32_t type, const char* message); NvidiaSlLogCallback g_logCallback = nullptr; @@ -243,7 +245,7 @@ void setIdentity(sl::float4x4& output) noexcept bool validDlssRrQuality(uint32_t quality) noexcept { - return quality <= kDlssRrQualityDlaa; + return quality <= kDlssRrQualityUltraPerformance; } sl::DLSSMode dlssRrMode(uint32_t quality) noexcept @@ -254,6 +256,10 @@ sl::DLSSMode dlssRrMode(uint32_t quality) noexcept return sl::DLSSMode::eMaxQuality; case kDlssRrQualityDlaa: return sl::DLSSMode::eDLAA; + case kDlssRrQualityPerformance: + return sl::DLSSMode::eMaxPerformance; + case kDlssRrQualityUltraPerformance: + return sl::DLSSMode::eUltraPerformance; default: return sl::DLSSMode::eBalanced; } diff --git a/crates/nvidia-streamline/src/lib.rs b/crates/nvidia-streamline/src/lib.rs index 62cbab0..676ced8 100644 --- a/crates/nvidia-streamline/src/lib.rs +++ b/crates/nvidia-streamline/src/lib.rs @@ -58,6 +58,8 @@ pub enum DlssRrQuality { Balanced = 0, Quality = 1, Dlaa = 2, + Performance = 3, + UltraPerformance = 4, } #[derive(Clone, Copy, Debug)] @@ -657,6 +659,8 @@ mod tests { assert_eq!(DlssRrQuality::Balanced as u32, 0); assert_eq!(DlssRrQuality::Quality as u32, 1); assert_eq!(DlssRrQuality::Dlaa as u32, 2); + assert_eq!(DlssRrQuality::Performance as u32, 3); + assert_eq!(DlssRrQuality::UltraPerformance as u32, 4); assert_eq!(size_of::(), 48); assert_eq!(align_of::(), 8); From 2aed91f0c2e22afe7a468bc97ebc9492c813134c Mon Sep 17 00:00:00 2001 From: John Wells Date: Tue, 22 Sep 2026 19:30:30 -0400 Subject: [PATCH 3/3] Update v11 tag to commit hash --- crates/nvidia-sdk/SOURCE-SDKS.md | 2 +- crates/nvidia-sdk/sdk-lock.toml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/nvidia-sdk/SOURCE-SDKS.md b/crates/nvidia-sdk/SOURCE-SDKS.md index 30f28b4..c9c7559 100644 --- a/crates/nvidia-sdk/SOURCE-SDKS.md +++ b/crates/nvidia-sdk/SOURCE-SDKS.md @@ -62,7 +62,7 @@ retaining their licenses. | --- | --- | --- | | `deps/nri` | https://github.com/NVIDIA-RTX/NRI | `v179` | | `deps/shadermake` | https://github.com/NVIDIA-RTX/ShaderMake | `18f5a344e7ca8fa65daaf079d07bc8ce38453e05` | -| `deps/mathlib` | https://github.com/NVIDIA-RTX/MathLib | `v11` | +| `deps/mathlib` | https://github.com/NVIDIA-RTX/MathLib | `e3eee9362880b708a315b9946df51dae332bb46f` (`v11`) | | `deps/vulkan-headers` | https://github.com/KhronosGroup/Vulkan-Headers | `v1.4.349` | | `deps/vma` | https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator | `b3cbbb43ea3a506dffe10759e205a41c27c35ae2` | | `deps/sse2neon` | https://github.com/DLTcollab/sse2neon | `13a42df35dc7fcc94f987568e7274a998bb6cc86` | diff --git a/crates/nvidia-sdk/sdk-lock.toml b/crates/nvidia-sdk/sdk-lock.toml index f0e11a3..14c0d62 100644 --- a/crates/nvidia-sdk/sdk-lock.toml +++ b/crates/nvidia-sdk/sdk-lock.toml @@ -102,9 +102,9 @@ root = "ShaderMake-18f5a344e7ca8fa65daaf079d07bc8ce38453e05" destination = "deps/shadermake" [[sdks.nrd.artifacts.assembly.dependencies]] -url = "https://codeload.github.com/NVIDIA-RTX/MathLib/zip/refs/tags/v11" -sha256 = "9bd668daa3770a684ca86ccfbd15dd5e1927f259bc531034a4fd943e1f98f5c9" -root = "MathLib-11" +url = "https://codeload.github.com/NVIDIA-RTX/MathLib/zip/e3eee9362880b708a315b9946df51dae332bb46f" +sha256 = "fe941fa2805879d657dc7a689a716662034d40b67c0aa4f6c9812a6ccdea791c" +root = "MathLib-e3eee9362880b708a315b9946df51dae332bb46f" destination = "deps/mathlib" [[sdks.nrd.artifacts.assembly.dependencies]]