118 lines
5.0 KiB
Markdown
118 lines
5.0 KiB
Markdown
# Improvements and API changes in SL 1.5 and SL 2.0
|
|
|
|
> **NOTE**:
|
|
> This document contains the high level breakdown of changes introduced in SL 1.5/2.0 and how they compare to previous SL versions. For more details please read the full [programming guide](./ProgrammingGuide.md)
|
|
|
|
## SL 1.5
|
|
|
|
### RESOURCE STATE TRACKING
|
|
|
|
* SL no longer tracks resource states, host is responsible for providing correct states when tagging resources.
|
|
|
|
### COMMAND LIST STATE TRACKING
|
|
|
|
* SL by default disables any command list (CL) tracking, host is responsible for restoring CL state after each `slEvaluateFeature` call.
|
|
|
|
### DISABLING OF THE INTERPOSER
|
|
|
|
* SL disables interposer (DXGI/D3D proxies) unless they are **explicitly requested by at least one supported plugin**
|
|
|
|
### VERIFYING SL DLLs
|
|
|
|
* SL now includes `sl_security.h` header as part of the main SDK (no longer needed to download the SL sample SDK)
|
|
|
|
### OS VERSION DETECTION
|
|
|
|
* Switched to obtaining the **correct** version from the `kernel32.dll` product description instead of using various MS APIs which return different/incorrect versions
|
|
* Flag `PreferenceFlags::eBypassOSVersionCheck` in `sl::Preferences` can be used to opt-out from the OS detection (off by default and **highly discouraged to use**)
|
|
|
|
### OTA OPT-IN
|
|
|
|
* Expanded `sl::Preferences` to include `PreferenceFlags::eAllowOTA` to automatically opt-in in the OTA program (SL and NGX). This flag is set by default.
|
|
|
|
### DLSS PRESETS
|
|
|
|
* Host can change DL networks (presets) for the DLSS by modifying `sl::DLSSOptions`.
|
|
|
|
## SL 2.0
|
|
|
|
Streamline 2.0 **includes all the above mentioned v1.5 changes with the following additions**:
|
|
|
|
### FEATURE ID
|
|
|
|
* No longer provided as enum but rather as constant expression unsigned integers.
|
|
* Core feature IDs declared and defined in `sl.h` while specific feature IDs are now located in their respective header files.
|
|
|
|
### ENUM NAMING
|
|
|
|
* All enums have been converted to `enum class Name::eValue` format.
|
|
|
|
### ERROR REPORTING
|
|
|
|
* All SL functions now return `sl::Result` (new header `sl_result.h`)
|
|
* Still required to monitor error logging callbacks to catch every single possible error at the right time but this improves handling of the most common errors.
|
|
* Introduced helper macro `SL_FAILED`.
|
|
* Helper method added to convert `sl::Result` to a string.
|
|
|
|
### VERSIONING AND OTA
|
|
|
|
* New API `slGetFeatureVersion` returns both SL and NGX (if any) versions.
|
|
|
|
### REQUIREMENTS REPORTING
|
|
|
|
* Removed `slGetFeatureConfiguration` which was returning JSON since it is not always convenient for eve
|
|
* New API `slGetFeatureRequirements` is added to provide info about OS, driver, HWS, rendering API, VK extensions and other requirements
|
|
* Added `getVkPhysicalDeviceVulkan12Features` and `getVkPhysicalDeviceVulkan13Features` helper functions in the new `sl_helpers_vk.h` header.
|
|
|
|
### CONSTANTS VS SETTINGS
|
|
|
|
* Generic `slSetFeatureConsts` and `slGetFeatureSettings` API have been removed and new API `slGetFeatureFunction` has been added.
|
|
* Each SL feature exports set of functions which are used to perform feature specific task.
|
|
* New helper macro `SL_FEATURE_FUN_IMPORT` and helper functions in the related `sl_$feature.h` headers.
|
|
* Helper functions added to each per-feature header to make importing easy.
|
|
|
|
### IS FEATURE SUPPORTED AND ADAPTER BIT-MASK
|
|
|
|
* `slIsFeatureSupported` is modified to use adapter LUID which is easily obtained from DXGIAdapterDesc or VK physical device.
|
|
* Engines are already enumerating adapters so this should fit in nicely with the existing code.
|
|
* When using VK host can provide `VkPhysicalDevice` instead of LUID if needed.
|
|
|
|
### ACTUAL FPS
|
|
|
|
* Removed `actualFrameTimeMs` and `timeBetweenPresentsMs` and replaced with an integer value `numFramesActuallyPresented`.
|
|
|
|
### IMPROVED VIEWPORT SUPPORT FOR DLSS-G
|
|
|
|
* Host can specify any viewport id when calling `slDLSSGSetOptions` rather than forcing viewport 0 all the time.
|
|
|
|
### "NOT RENDERING GAME FRAMES" FLAG
|
|
|
|
* Removed completely since it has become redundant.
|
|
* Host is now required to turn DLSS-G on/off using `slDLSSGSetOptions`
|
|
|
|
### BUFFER COPIES AND TAGGING
|
|
|
|
* `slSetTag` API has been expanded to include command list and resource life-cycle information.
|
|
* If needed resources are automatically copied internally by SL.
|
|
* `slEvaluateFeature` can be used to tag resources locally (tags only valid for the specific evaluate call, see programming guide for details)
|
|
|
|
### FRAME ID
|
|
|
|
* New API `slGetNewFrameToken` is added to allow host to obtain frame handle for the next frame.
|
|
* Same handle is then passed around to all SL calls.
|
|
* If host wants to fully control frame counting the frame index can be provided as input
|
|
|
|
### MULTIPLE DEVICES
|
|
|
|
* New API `slSetD3DDevice` and `slSetVulkanInfo` can be used to specify which device SL should be using.
|
|
|
|
### OBTAINING NATIVE INTERFACES
|
|
|
|
* When using 3rd party libraries (including NVAPI) it is not advisable to pass SL proxies as inputs.
|
|
* New API `slGetNativeInterface` added to allow access to native interfaces as needed.
|
|
|
|
### MANUAL HOOKING
|
|
|
|
* Removed `slGetHook*` API
|
|
* New API `slGetNativeInterface` in combination with `slUpgradeIntercace` is now used to significantly simplify manual hooking.
|