fix(upscaling): replace NIS with RCAS for DLSS#1620
Conversation
WalkthroughAdds a new RCAS compute shader and C++ RCAS subsystem, integrates RCAS sharpening into Upscaling (renames the sharpener texture and ApplySharpening), removes NIS integration from Streamline, and wires SRV/UAV/CB/dispatch for an 8x8-thread-group RCAS pass. Changes
Sequence Diagram(s)sequenceDiagram
participant Upscaling as Upscaling
participant RCAS as RCAS Subsystem
participant GPU as GPU/Compute Shader
participant Resource as Texture Resources
Upscaling->>RCAS: Initialize()
RCAS->>GPU: Compile/create compute shader
GPU-->>RCAS: Shader ready
Upscaling->>Resource: Prepare input SRV & output UAV
Resource-->>Upscaling: SRV/UAV available
Upscaling->>RCAS: ApplySharpen(inputSRV, outputUAV, sharpness)
RCAS->>RCAS: Update RCASConfig cbuffer (sharpness)
RCAS->>GPU: Bind CB, SRV (t0), UAV (u0)
RCAS->>GPU: Dispatch((width+7)/8,(height+7)/8,1)
rect rgba(180,230,200,0.06)
Note over GPU: For each 8x8 threadgroup\ncompute shader reads 3x3 neighborhood,\ncomputes luma/noise/lobe and writes sharpened pixel
end
GPU->>Resource: Write sharpened output
RCAS->>GPU: Unbind CB/SRV/UAV
RCAS-->>Upscaling: Sharpening complete
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (6)
src/Features/Upscaling/RCAS/RCAS.h (1)
14-22: Add RAII cleanup forrcasConfigCB
rcasConfigCBis allocated withnewinInitialize()but never freed. Even though this is small and mostly plugin‑lifetime, adding a destructor avoids leaks on device reset / teardown and keeps resource management consistent with the rest of the feature.You can do:
// RCAS.h class RCAS { public: - RCAS() = default; + RCAS() = default; + ~RCAS(); @@ winrt::com_ptr<ID3D11ComputeShader> rcasComputeShader; ConstantBuffer* rcasConfigCB = nullptr; }; // RCAS.cpp +#include "RCAS.h" + +RCAS::~RCAS() +{ + delete rcasConfigCB; + rcasConfigCB = nullptr; +}Optionally, since all current call sites pass an explicit sharpness, you could also drop the default parameter on
ApplySharpenor align it with the UI default to avoid confusion:- void ApplySharpen(ID3D11ShaderResourceView* inputTexture, ID3D11UnorderedAccessView* outputUAV, float sharpness = 0.15f); + void ApplySharpen(ID3D11ShaderResourceView* inputTexture, ID3D11UnorderedAccessView* outputUAV, float sharpness);src/Features/Upscaling.h (1)
6-7: RCAS integration wiring looks good; double‑check DLSS sharpness defaultThe new RCAS wiring (header include,
sharpenerTexture, staticrcasinstance, andApplySharpening()entry point) lines up cleanly with the implementation inUpscaling.cppandRCAS.cpp. No interface issues from these additions.One behavioral tweak to sanity‑check:
settings.sharpnessDLSSnow defaults to1.0f, and that value is passed directly into RCAS. That’s a fairly strong sharpening level to ship as the default for all DLSS users; if the goal is a more conservative change in perceived sharpness, consider lowering the default or mapping the UI slider non‑linearly so that “1.0” corresponds to a moderate RCAS strength.Also applies to: 59-61, 142-143, 147-151, 167-167
src/Features/Upscaling.cpp (2)
890-891: Consider makingrcas.Initialize()idempotent for repeatedSetupResourcescallsCalling
rcas.Initialize()fromSetupResources()ensures RCAS is ready once the main render targets exist, which is a good place to hook it. IfSetupResources()can ever be invoked more than once (e.g., device reset / swap‑chain recreation), this will currently allocate a newConstantBuffereach time without freeing the old one unless a destructor or guard is added on RCAS.A simple pattern would be to early‑out in
RCAS::Initialize()oncercasConfigCBis already set:void RCAS::Initialize() { if (rcasConfigCB) return; logger::info("[RCAS] Creating resources"); CreateComputeShader(); rcasConfigCB = new ConstantBuffer(ConstantBufferDesc<RCASConfig>()); }This, combined with a destructor that deletes
rcasConfigCB, keeps RCAS robust across potential reinitializations.
1422-1448: RCAS sharpening pass is well‑integrated into the DLSS path
ApplySharpening():
- Skips work when
sharpnessDLSS <= 0.0forsharpenerTextureis missing.- Reads the underlying
mainrender target resource from its SRV, unbinds OM render targets, and runs RCAS withmain.SRVas input andsharpenerTexture’s UAV as output.- Copies the sharpened result back into the original main resource and marks the render target dirty.
It’s only called when
upscaleMethod == UpscaleMethod::kDLSS, so FSR/TAA paths are unaffected, and SRV/UAV aliasing is avoided by using a separate temporary texture plus the finalCopyResource.This looks correct and matches the intended “DLSS + RCAS sharpening” behavior. Any future generalization of RCAS (e.g., for other passes or off‑screen buffers) can build on this by ensuring the C++ side uses the input texture’s dimensions for dispatch, as noted in the RCAS.cpp comment.
Also applies to: 1474-1475
src/Features/Upscaling/RCAS/RCAS.cpp (2)
7-11: Zero‑initializeRCASConfigbefore uploading
RCASConfigcurrently has:struct RCASConfig { float sharpness; float3 pad; };and you only assign
sharpnessbefore uploading. Whilepadis just padding today, leaving it uninitialized is brittle if the HLSL side ever starts using those fields.You can make this future‑proof by zero‑initializing the struct:
- RCASConfig config; - config.sharpness = sharpness; + RCASConfig config{}; + config.sharpness = sharpness;This guarantees deterministic contents for the entire constant buffer.
Also applies to: 41-45
26-40: Derive RCAS dispatch size from the input texture instead ofscreenSize
ApplySharpencurrently usesglobals::state->screenSizeto compute dispatch dimensions, which works when the input SRV wraps the full-screen render target but breaks if called on mismatched textures (half-res buffers, debug views, or different resolutions).Query the SRV's underlying texture dimensions instead—this is idiomatic D3D11 and makes RCAS flexible:
uint32_t texWidth = 0; uint32_t texHeight = 0; if (inputSRV) { winrt::com_ptr<ID3D11Resource> resource; inputSRV->GetResource(resource.put()); if (auto tex2D = resource.try_as<ID3D11Texture2D>()) { D3D11_TEXTURE2D_DESC desc{}; tex2D->GetDesc(&desc); texWidth = desc.Width; texHeight = desc.Height; } } if (!texWidth || !texHeight) { logger::warn("[RCAS] Failed to resolve input texture dimensions, skipping sharpen"); state->EndPerfEvent(); return; } uint32_t dispatchX = (texWidth + 7) / 8; uint32_t dispatchY = (texHeight + 7) / 8;This keeps RCAS aligned with the actual resource size, independent of
screenSize.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl(1 hunks)src/Features/Upscaling.cpp(5 hunks)src/Features/Upscaling.h(4 hunks)src/Features/Upscaling/RCAS/RCAS.cpp(1 hunks)src/Features/Upscaling/RCAS/RCAS.h(1 hunks)src/Features/Upscaling/Streamline.cpp(1 hunks)src/Features/Upscaling/Streamline.h(0 hunks)
💤 Files with no reviewable changes (1)
- src/Features/Upscaling/Streamline.h
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{cpp,cxx,cc,c,h,hpp,hxx,hlsl,hlsli,fx,fxh,py}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Do not include TODO/FIXME placeholders; provide complete, working solutions
Files:
src/Features/Upscaling/RCAS/RCAS.hsrc/Features/Upscaling.hsrc/Features/Upscaling/RCAS/RCAS.cppfeatures/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlslsrc/Features/Upscaling/Streamline.cppsrc/Features/Upscaling.cpp
src/**/*.{cpp,cxx,cc,h,hpp,hxx}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.{cpp,cxx,cc,h,hpp,hxx}: Ensure SE/AE/VR runtime compatibility; use runtime detection patterns (e.g., REL::RelocateMember())
Include robust error handling and resource management with graceful degradation in the plugin code
Files:
src/Features/Upscaling/RCAS/RCAS.hsrc/Features/Upscaling.hsrc/Features/Upscaling/RCAS/RCAS.cppsrc/Features/Upscaling/Streamline.cppsrc/Features/Upscaling.cpp
**/*
⚙️ CodeRabbit configuration file
**/*: When reviewing PRs, please provide suggestions for:
Conventional Commit Titles (if not following https://www.conventionalcommits.org/ or
if the existing title does not describe the code changes):
Format: type(scope): description
Length: 50 characters limit for title, 72 for body
Style: lowercase description, no ending period
Examples:
- feat(vr): add cross-eye sampling
- fix(water): resolve flowmap bug
- docs: update shader documentation
Issue References (if PR fixes bugs or implements features):
Suggest adding appropriate GitHub keywords:Otherwise, use your standard review approach focusing on code quality.
Files:
src/Features/Upscaling/RCAS/RCAS.hsrc/Features/Upscaling.hsrc/Features/Upscaling/RCAS/RCAS.cppfeatures/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlslsrc/Features/Upscaling/Streamline.cppsrc/Features/Upscaling.cpp
features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh}: Place all feature shaders under features/YourFeature/Shaders/
Avoid GPU register/buffer conflicts in HLSL; verify register usage (e.g., with hlslkit buffer scanning)
Files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
🧠 Learnings (8)
📓 Common learnings
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-07-05T05:20:45.823Z
Learning: In the skyrim-community-shaders repository, file deletion error handling improvements that replace existence checks and try-catch blocks with std::filesystem::remove error-code-based approaches are considered bug fixes rather than refactoring, as they address inadequate error handling and misleading log messages.
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:515-515
Timestamp: 2025-10-02T14:20:33.454Z
Learning: In the Community Shaders codebase (skyrim-community-shaders repository), hardcoded shader resource slot numbers are used directly in code rather than being defined as named constants. This is the established convention and should not be flagged as an issue.
📚 Learning: 2025-06-17T05:40:22.785Z
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 577
File: features/Wetness Effects/Shaders/WetnessEffects/WetnessEffects.hlsli:57-61
Timestamp: 2025-06-17T05:40:22.785Z
Learning: Default parameter values are supported in the HLSL compiler used by the skyrim-community-shaders project, contrary to standard HLSL (FXC/DXC) limitations.
Applied to files:
src/Features/Upscaling.h
📚 Learning: 2025-08-03T18:37:19.690Z
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
Applied to files:
src/Features/Upscaling.hfeatures/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlslsrc/Features/Upscaling/Streamline.cpp
📚 Learning: 2025-08-17T18:37:35.839Z
Learnt from: CR
Repo: doodlum/skyrim-community-shaders PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-17T18:37:35.839Z
Learning: Applies to features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh} : Avoid GPU register/buffer conflicts in HLSL; verify register usage (e.g., with hlslkit buffer scanning)
Applied to files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
📚 Learning: 2025-10-02T14:20:33.454Z
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:515-515
Timestamp: 2025-10-02T14:20:33.454Z
Learning: In the Community Shaders codebase (skyrim-community-shaders repository), hardcoded shader resource slot numbers are used directly in code rather than being defined as named constants. This is the established convention and should not be flagged as an issue.
Applied to files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
📚 Learning: 2025-08-05T18:22:40.578Z
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:277-293
Timestamp: 2025-08-05T18:22:40.578Z
Learning: In the skyrim-community-shaders SnowCover feature, the wstrtostr and strtowstr utility functions defined in src/Features/SnowCover.cpp are unused and should be removed rather than fixed, as confirmed by the original author ThePagi.
Applied to files:
src/Features/Upscaling/Streamline.cpp
📚 Learning: 2025-06-17T09:27:49.594Z
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 1157
File: src/Feature.cpp:42-49
Timestamp: 2025-06-17T09:27:49.594Z
Learning: In src/Feature.cpp, when an obsolete feature's INI file is deleted, the feature should be silently disabled without surfacing any issues to the user. This is the intended behavior because a deleted INI file for an obsolete feature indicates that the user has properly cleaned up the obsolete feature.
Applied to files:
src/Features/Upscaling/Streamline.cpp
📚 Learning: 2025-08-17T18:37:35.839Z
Learnt from: CR
Repo: doodlum/skyrim-community-shaders PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-17T18:37:35.839Z
Learning: Applies to features/**/*.{cpp,cxx,cc,h,hpp,hxx} : Register new features in the globals::features namespace
Applied to files:
src/Features/Upscaling/Streamline.cpp
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Validate shader compilation (Flatrim, .github/configs/shader-validation.yaml)
- GitHub Check: Build plugin and addons
- GitHub Check: Validate shader compilation (VR, .github/configs/shader-validation-vr.yaml)
- GitHub Check: Feature Version Audit (PR)
🔇 Additional comments (2)
src/Features/Upscaling/Streamline.cpp (1)
105-106: NIS removal from Streamline feature list looks correctRestricting
featuresToLoad/featuresToLoadVRtosl::kFeatureDLSScleanly drops NIS while keeping the feature count logic intact. No issues from this change in this file.src/Features/Upscaling.cpp (1)
500-518: DLSS temp sharpener texture creation/destruction is consistentThe new
sharpenerTexture:
- Is created only when
a_upscalemethod == UpscaleMethod::kDLSS, using the kMAIN texture’s desc and explicit 2D SRV/UAV views (mip 0, single level), and- Is freed when switching away from DLSS (
a_upscalemethod != UpscaleMethod::kDLSS) alongsidemotionVectorCopyTexture.This ties the resource lifetime correctly to DLSS usage and avoids leaving extra UAV/SRV views alive when DLSS is disabled. No issues here.
Also applies to: 558-565
|
✅ A pre-release build is available for this PR: |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl (1)
27-35: Optional: Remove redundant clamp at line 31.After the bounds check at lines 24-25,
centeris guaranteed to be within[0, texDim-1], making the clamp at line 31 redundant. The neighbor coordinate clamping (lines 32-35) is necessary and correct for edge handling.Apply this diff to simplify:
int2 center = int2(DTid.xy); int2 minCoord = int2(0, 0); int2 maxCoord = int2(texDim - 1); - int2 eCoord = clamp(center, minCoord, maxCoord); - int2 bCoord = clamp(eCoord + int2(0, -1), minCoord, maxCoord); - int2 dCoord = clamp(eCoord + int2(-1, 0), minCoord, maxCoord); - int2 fCoord = clamp(eCoord + int2(1, 0), minCoord, maxCoord); - int2 hCoord = clamp(eCoord + int2(0, 1), minCoord, maxCoord); + int2 bCoord = clamp(center + int2(0, -1), minCoord, maxCoord); + int2 dCoord = clamp(center + int2(-1, 0), minCoord, maxCoord); + int2 fCoord = clamp(center + int2(1, 0), minCoord, maxCoord); + int2 hCoord = clamp(center + int2(0, 1), minCoord, maxCoord); - float3 e = Source.Load(int3(eCoord, 0)).rgb; + float3 e = Source.Load(int3(center, 0)).rgb;
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl(1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{cpp,cxx,cc,c,h,hpp,hxx,hlsl,hlsli,fx,fxh,py}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Do not include TODO/FIXME placeholders; provide complete, working solutions
Files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh}: Place all feature shaders under features/YourFeature/Shaders/
Avoid GPU register/buffer conflicts in HLSL; verify register usage (e.g., with hlslkit buffer scanning)
Files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
**/*
⚙️ CodeRabbit configuration file
**/*: When reviewing PRs, please provide suggestions for:
Conventional Commit Titles (if not following https://www.conventionalcommits.org/ or
if the existing title does not describe the code changes):
Format: type(scope): description
Length: 50 characters limit for title, 72 for body
Style: lowercase description, no ending period
Examples:
- feat(vr): add cross-eye sampling
- fix(water): resolve flowmap bug
- docs: update shader documentation
Issue References (if PR fixes bugs or implements features):
Suggest adding appropriate GitHub keywords:Otherwise, use your standard review approach focusing on code quality.
Files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
🧠 Learnings (4)
📓 Common learnings
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-07-05T05:20:45.823Z
Learning: In the skyrim-community-shaders repository, file deletion error handling improvements that replace existence checks and try-catch blocks with std::filesystem::remove error-code-based approaches are considered bug fixes rather than refactoring, as they address inadequate error handling and misleading log messages.
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
📚 Learning: 2025-08-03T18:37:19.690Z
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
Applied to files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
📚 Learning: 2025-08-17T18:37:35.839Z
Learnt from: CR
Repo: doodlum/skyrim-community-shaders PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-17T18:37:35.839Z
Learning: Applies to features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh} : Avoid GPU register/buffer conflicts in HLSL; verify register usage (e.g., with hlslkit buffer scanning)
Applied to files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
📚 Learning: 2025-10-02T14:20:33.454Z
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:515-515
Timestamp: 2025-10-02T14:20:33.454Z
Learning: In the Community Shaders codebase (skyrim-community-shaders repository), hardcoded shader resource slot numbers are used directly in code rather than being defined as named constants. This is the established convention and should not be flagged as an issue.
Applied to files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Validate shader compilation (Flatrim, .github/configs/shader-validation.yaml)
- GitHub Check: Validate shader compilation (VR, .github/configs/shader-validation-vr.yaml)
- GitHub Check: Build plugin and addons
🔇 Additional comments (9)
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl (9)
1-4: LGTM! Clear attribution to the FSR1 algorithm.Proper licensing and source attribution are provided.
5-9: LGTM! Constant buffer properly aligned.The float3 padding ensures the constant buffer meets the 16-byte alignment requirement.
14-17: LGTM! Custom luma weights are intentional for RCAS.The weights
(0.5, 1.0, 0.5)differ from perceptual luma because RCAS uses this for contrast-based edge detection rather than perceived brightness. This aligns with the AMD FSR1 reference implementation.
21-25: LGTM! Bounds check prevents out-of-bounds UAV writes.The early exit for out-of-range thread IDs addresses the previous review's concern about undefined behavior when writing outside texture bounds. This ensures robust behavior across drivers.
37-42: LGTM! Sampling pattern is correct and safe.The 4-neighbor cross pattern with clamped coordinates ensures safe edge handling. Extracting
.rgbis appropriate for the RCAS algorithm.
44-54: LGTM! Noise detection follows FSR1's algorithm.The noise factor
nzcorrectly identifies flat/noisy regions to reduce sharpening artifacts. The non-linear correction at line 54 maps the normalized difference to[0.5, 1.0]for adaptive dampening.
56-68: LGTM! Lobe calculation matches FSR1's RCAS kernel.The sharpening kernel correctly computes adaptive sharpening strength based on local min/max, applies the
-0.1875clamp per FSR1's specification, and modulates by both thesharpnessparameter and the noise factornz.
11-12: The register slot assignments (t0for source texture,u0for destination) follow established convention in the Community Shaders codebase and do not require verification as potential issues. Hardcoded shader resource slot numbers are the standard practice in this project.
69-72: Verify alpha channel and color space handling in RCAS shader.
Alpha channel: Confirm whether hardcoded
1.0alpha in the output is intentional for the Upscaling pipeline's blend/composite stages, or if source alpha should be preserved.Color space: Verify that the input to RCAS is in the appropriate color space for this implementation. Given the project uses a linear lighting system (per learnings), confirm whether gamma conversion is handled upstream/downstream or if RCAS should operate on linear values.
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (2)
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl (1)
72-75: Consider preserving source alpha instead of forcing 1.0 if alpha carries meaningRight now the shader hardcodes
alpha = 1.0:Dest[DTid.xy] = float4(output, 1.0);If the main render target’s alpha is unused, this is fine. If alpha carries data (e.g. UI mask, exposure, or temporal weight), you may want to preserve it instead, e.g. by sampling the full center texel once and reusing its
.a:float4 eSample = Source.Load(int3(center, 0)); float3 e = eSample.rgb; // ... Dest[DTid.xy] = float4(output, eSample.a);If alpha is guaranteed “don’t care” in this path, keeping
1.0is acceptable.src/Features/Upscaling/RCAS/RCAS.h (1)
18-42: Clarify destructor/ownership forrcasConfigCBand consider makingRCASnon‑copyable
~RCAS()is declared but the header doesn’t show howrcasConfigCBis owned. With a rawConstantBuffer*plus a non‑trivial destructor, copyingRCASwould produce multiple instances pointing at the same buffer and can lead to leaks or double frees depending on how the destructor is implemented.Recommendations:
- Ensure
~RCAS()is defined in RCAS.cpp and clearly managesrcasConfigCB(either releasing it if owned, or leaving it alone if it’s managed elsewhere).- If
RCASowns its resources (likely, givenInitialize()/CreateComputeShader()), explicitly delete copy/move operations or store the constant buffer in an owning smart pointer/RAII wrapper instead of a raw pointer, e.g.std::unique_ptr<ConstantBuffer>or a project‑specific handle type.- Keep
Initialize()’s “safe to call multiple times” guarantee by guarding against re‑creating the compute shader/CB if they’re already initialized.These changes make the lifetime semantics explicit and prevent subtle resource bugs in the plugin runtime. As per coding guidelines around robust resource management.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl(1 hunks)src/Features/Upscaling.h(4 hunks)src/Features/Upscaling/RCAS/RCAS.cpp(1 hunks)src/Features/Upscaling/RCAS/RCAS.h(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- src/Features/Upscaling.h
- src/Features/Upscaling/RCAS/RCAS.cpp
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{cpp,cxx,cc,c,h,hpp,hxx,hlsl,hlsli,fx,fxh,py}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Do not include TODO/FIXME placeholders; provide complete, working solutions
Files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlslsrc/Features/Upscaling/RCAS/RCAS.h
features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh}: Place all feature shaders under features/YourFeature/Shaders/
Avoid GPU register/buffer conflicts in HLSL; verify register usage (e.g., with hlslkit buffer scanning)
Files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
**/*
⚙️ CodeRabbit configuration file
**/*: When reviewing PRs, please provide suggestions for:
Conventional Commit Titles (if not following https://www.conventionalcommits.org/ or
if the existing title does not describe the code changes):
Format: type(scope): description
Length: 50 characters limit for title, 72 for body
Style: lowercase description, no ending period
Examples:
- feat(vr): add cross-eye sampling
- fix(water): resolve flowmap bug
- docs: update shader documentation
Issue References (if PR fixes bugs or implements features):
Suggest adding appropriate GitHub keywords:Otherwise, use your standard review approach focusing on code quality.
Files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlslsrc/Features/Upscaling/RCAS/RCAS.h
src/**/*.{cpp,cxx,cc,h,hpp,hxx}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.{cpp,cxx,cc,h,hpp,hxx}: Ensure SE/AE/VR runtime compatibility; use runtime detection patterns (e.g., REL::RelocateMember())
Include robust error handling and resource management with graceful degradation in the plugin code
Files:
src/Features/Upscaling/RCAS/RCAS.h
🧠 Learnings (3)
📓 Common learnings
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-07-05T05:20:45.823Z
Learning: In the skyrim-community-shaders repository, file deletion error handling improvements that replace existence checks and try-catch blocks with std::filesystem::remove error-code-based approaches are considered bug fixes rather than refactoring, as they address inadequate error handling and misleading log messages.
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
📚 Learning: 2025-08-03T18:37:19.690Z
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
Applied to files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
📚 Learning: 2025-08-17T18:37:35.839Z
Learnt from: CR
Repo: doodlum/skyrim-community-shaders PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-17T18:37:35.839Z
Learning: Applies to features/*/Shaders/**/*.{hlsl,hlsli,fx,fxh} : Avoid GPU register/buffer conflicts in HLSL; verify register usage (e.g., with hlslkit buffer scanning)
Applied to files:
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl
🔇 Additional comments (4)
features/Upscaling/Shaders/Upscaling/RCAS/RCAS.hlsl (3)
8-21: RCAS constant buffer layout and luma helper look good, but confirm host-side struct matches
RCASConfigis a clean 16-byte cbuffer (float + float3) andgetRCASLuma’s green‑weighted dot is reasonable for RCAS‑style luma. Just make sure the C++ side uses the same layout/order (e.g.struct RCASConfig { float sharpness; float pad[3]; };) and binds it tob0alongsideSource/Destatt0/u0, otherwise sharpness will read garbage. Also, since this pass is explicitly “in HDR space before tonemapping”, double‑check thatSourceis indeed linear HDR and not gamma‑encoded, to avoid sharpening in the wrong color space. As per coding guidelines / learnings about linear color handling.
23-46: Bounds check + clamped neighbor sampling correctly avoid OOB accessUsing
Dest.GetDimensions, early‑out forDTidoutside the surface, and clamping neighbor coordinates into[0, texDim-1]gives well‑defined behavior at image borders for bothSource.LoadandDest[...]writes. This addresses the prior OOB risk for the right/bottom edges while keeping a sensible edge‑clamp kernel.
53-67: Add small epsilons aroundrangeandmaxRGBto avoid potential INF/NaN in flat regionsIn flat or near‑flat regions it's possible for
rangeto become0andmaxRGBto be all‑black, leading torcp(0)which can propagate INF/NaN into the output. AMD's official RCAS reference implementation uses denominator clamping to address this. Consider adding epsilon guards:range = max(range, 1e-4); float3 safeMaxRGB = max(maxRGB, float3(1e-4, 1e-4, 1e-4)); float3 hitMin = minRGB * rcp(4.0 * safeMaxRGB);Verify against the AMD FidelityFX FSR reference implementation for exact epsilon values and behavior compatibility.
src/Features/Upscaling/RCAS/RCAS.h (1)
9-16: RCAS API surface and documentation are clear and match the intended HDR DLSS sharpening useThe class comment and
ApplySharpendoc make the role of RCAS in the upscaling pipeline very clear (standalone HDR‑space sharpening before tonemapping), and the small public surface (Initialize + ApplySharpen) is appropriate for this feature. The PR titlefix(upscaling): replace NIS with RCAS for DLSSalready follows Conventional Commits; in the PR description, consider adding a closing keyword likeFixes #1616so GitHub auto‑closes the referenced issue when this merges.
|
I am not able to replicate the build error, is this something that just happens at times? |
|
Looks good just remember to do float currentSharpness = (-2.0f * settings.sharpness) + 2.0f; |
Trying this breaks sharpening completely, 0->1 scaling works as intended in my subjective analysis. Any values with this formula below 0.5 creates artifacts or outright breaks the buffer |
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/Features/Upscaling.cpp(6 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{cpp,cxx,cc,c,h,hpp,hxx,hlsl,hlsli,fx,fxh,py}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Do not include TODO/FIXME placeholders; provide complete, working solutions
Files:
src/Features/Upscaling.cpp
src/**/*.{cpp,cxx,cc,h,hpp,hxx}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.{cpp,cxx,cc,h,hpp,hxx}: Ensure SE/AE/VR runtime compatibility; use runtime detection patterns (e.g., REL::RelocateMember())
Include robust error handling and resource management with graceful degradation in the plugin code
Files:
src/Features/Upscaling.cpp
**/*
⚙️ CodeRabbit configuration file
**/*: When reviewing PRs, please provide suggestions for:
Conventional Commit Titles (if not following https://www.conventionalcommits.org/ or
if the existing title does not describe the code changes):
Format: type(scope): description
Length: 50 characters limit for title, 72 for body
Style: lowercase description, no ending period
Examples:
- feat(vr): add cross-eye sampling
- fix(water): resolve flowmap bug
- docs: update shader documentation
Issue References (if PR fixes bugs or implements features):
Suggest adding appropriate GitHub keywords:Otherwise, use your standard review approach focusing on code quality.
Files:
src/Features/Upscaling.cpp
🧠 Learnings (1)
📓 Common learnings
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-07-05T05:20:45.823Z
Learning: In the skyrim-community-shaders repository, file deletion error handling improvements that replace existence checks and try-catch blocks with std::filesystem::remove error-code-based approaches are considered bug fixes rather than refactoring, as they address inadequate error handling and misleading log messages.
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:260-260
Timestamp: 2025-08-05T18:13:03.123Z
Learning: In the skyrim-community-shaders SnowCover feature, the time calculation uses division by 61.0 instead of 60.0 for seconds conversion in the perFrame.Month calculation. The original author ThePagi indicated this was intentional and makes no discernible difference to the snow cover functionality, suggesting it may be related to game-specific timing mechanics or balance considerations.
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:515-515
Timestamp: 2025-10-02T14:20:33.454Z
Learning: In the Community Shaders codebase (skyrim-community-shaders repository), hardcoded shader resource slot numbers are used directly in code rather than being defined as named constants. This is the established convention and should not be flagged as an issue.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Validate shader compilation (VR, .github/configs/shader-validation-vr.yaml)
- GitHub Check: Build plugin and addons
- GitHub Check: Validate shader compilation (Flatrim, .github/configs/shader-validation.yaml)
🔇 Additional comments (4)
src/Features/Upscaling.cpp (4)
500-519: LGTM! Proper RCAS sharpener texture setup.The sharpener texture is correctly created with the main render target's format to preserve HDR data, and both SRV/UAV views are properly initialized for compute shader access.
559-566: LGTM! Proper resource cleanup.The sharpener texture cleanup follows the established pattern and correctly releases COM resources before deletion.
891-891: LGTM! RCAS initialization properly placed.The RCAS subsystem is initialized at the appropriate point in the resource setup flow.
1477-1478: LGTM! RCAS sharpening correctly integrated for DLSS.The sharpening is applied at the right point in the rendering pipeline (after upscaling, before post-processing) and only for DLSS, which makes sense since FSR has built-in sharpening.
| void Upscaling::ApplySharpening() | ||
| { | ||
| if (!streamline.featureNIS || settings.sharpnessDLSS <= 0.0f) { | ||
| if (settings.sharpnessDLSS <= 0.0f) | ||
| return; | ||
| } | ||
|
|
||
| auto context = globals::d3d::context; | ||
|
|
||
| ID3D11RenderTargetView* renderTarget = nullptr; | ||
| context->OMGetRenderTargets(1, &renderTarget, nullptr); | ||
| if (!sharpenerTexture) | ||
| return; | ||
| float currentSharpness = (-2.0f * settings.sharpness) + 2.0f; | ||
| currentSharpness = exp2(-currentSharpness); | ||
|
|
||
| winrt::com_ptr<ID3D11Resource> mainResource; | ||
| renderTarget->GetResource(mainResource.put()); | ||
| auto context = globals::d3d::context; | ||
| auto renderer = globals::game::renderer; | ||
| auto& main = renderer->GetRuntimeData().renderTargets[RE::RENDER_TARGETS::kMAIN]; | ||
|
|
||
| context->OMSetRenderTargets(0, nullptr, nullptr); // Unbind all bound render targets | ||
| ID3D11Resource* mainResource = nullptr; | ||
| main.SRV->GetResource(&mainResource); | ||
|
|
||
| context->CopyResource(nisSharpenerTexture->resource.get(), mainResource.get()); | ||
| if (!mainResource) | ||
| return; | ||
|
|
||
| streamline.ApplyNISSharpening(nisSharpenerTexture->resource.get(), settings.sharpnessDLSS); | ||
| context->OMSetRenderTargets(0, nullptr, nullptr); | ||
|
|
||
| context->CopyResource(mainResource.get(), nisSharpenerTexture->resource.get()); | ||
| rcas.ApplySharpen(main.SRV, sharpenerTexture->uav.get(), settings.sharpnessDLSS); | ||
| context->CopyResource(mainResource, sharpenerTexture->resource.get()); | ||
|
|
||
| globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET); // Run OMSetRenderTargets again | ||
| mainResource->Release(); | ||
|
|
||
| if (renderTarget) | ||
| renderTarget->Release(); | ||
| globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET); | ||
| } |
There was a problem hiding this comment.
Fix compilation error and remove dead code.
Lines 1430-1431 reference undefined settings.sharpness (should be settings.sharpnessDLSS) and calculate currentSharpness that is never used. Based on the PR comments, this appears to be leftover code from an attempted formula that broke sharpening.
Apply this diff to remove the dead code and fix the compilation error:
void Upscaling::ApplySharpening()
{
if (settings.sharpnessDLSS <= 0.0f)
return;
if (!sharpenerTexture)
return;
- float currentSharpness = (-2.0f * settings.sharpness) + 2.0f;
- currentSharpness = exp2(-currentSharpness);
auto context = globals::d3d::context;
auto renderer = globals::game::renderer;
auto& main = renderer->GetRuntimeData().renderTargets[RE::RENDER_TARGETS::kMAIN];
ID3D11Resource* mainResource = nullptr;
main.SRV->GetResource(&mainResource);
if (!mainResource)
return;
context->OMSetRenderTargets(0, nullptr, nullptr);
rcas.ApplySharpen(main.SRV, sharpenerTexture->uav.get(), settings.sharpnessDLSS);
context->CopyResource(mainResource, sharpenerTexture->resource.get());
mainResource->Release();
globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET);
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| void Upscaling::ApplySharpening() | |
| { | |
| if (!streamline.featureNIS || settings.sharpnessDLSS <= 0.0f) { | |
| if (settings.sharpnessDLSS <= 0.0f) | |
| return; | |
| } | |
| auto context = globals::d3d::context; | |
| ID3D11RenderTargetView* renderTarget = nullptr; | |
| context->OMGetRenderTargets(1, &renderTarget, nullptr); | |
| if (!sharpenerTexture) | |
| return; | |
| float currentSharpness = (-2.0f * settings.sharpness) + 2.0f; | |
| currentSharpness = exp2(-currentSharpness); | |
| winrt::com_ptr<ID3D11Resource> mainResource; | |
| renderTarget->GetResource(mainResource.put()); | |
| auto context = globals::d3d::context; | |
| auto renderer = globals::game::renderer; | |
| auto& main = renderer->GetRuntimeData().renderTargets[RE::RENDER_TARGETS::kMAIN]; | |
| context->OMSetRenderTargets(0, nullptr, nullptr); // Unbind all bound render targets | |
| ID3D11Resource* mainResource = nullptr; | |
| main.SRV->GetResource(&mainResource); | |
| context->CopyResource(nisSharpenerTexture->resource.get(), mainResource.get()); | |
| if (!mainResource) | |
| return; | |
| streamline.ApplyNISSharpening(nisSharpenerTexture->resource.get(), settings.sharpnessDLSS); | |
| context->OMSetRenderTargets(0, nullptr, nullptr); | |
| context->CopyResource(mainResource.get(), nisSharpenerTexture->resource.get()); | |
| rcas.ApplySharpen(main.SRV, sharpenerTexture->uav.get(), settings.sharpnessDLSS); | |
| context->CopyResource(mainResource, sharpenerTexture->resource.get()); | |
| globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET); // Run OMSetRenderTargets again | |
| mainResource->Release(); | |
| if (renderTarget) | |
| renderTarget->Release(); | |
| globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET); | |
| } | |
| void Upscaling::ApplySharpening() | |
| { | |
| if (settings.sharpnessDLSS <= 0.0f) | |
| return; | |
| if (!sharpenerTexture) | |
| return; | |
| auto context = globals::d3d::context; | |
| auto renderer = globals::game::renderer; | |
| auto& main = renderer->GetRuntimeData().renderTargets[RE::RENDER_TARGETS::kMAIN]; | |
| ID3D11Resource* mainResource = nullptr; | |
| main.SRV->GetResource(&mainResource); | |
| if (!mainResource) | |
| return; | |
| context->OMSetRenderTargets(0, nullptr, nullptr); | |
| rcas.ApplySharpen(main.SRV, sharpenerTexture->uav.get(), settings.sharpnessDLSS); | |
| context->CopyResource(mainResource, sharpenerTexture->resource.get()); | |
| mainResource->Release(); | |
| globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET); | |
| } |
🤖 Prompt for AI Agents
In src/Features/Upscaling.cpp around lines 1423-1451, lines 1430-1431 reference
an undefined settings.sharpness and compute a currentSharpness value that is
never used; remove those two lines (the assignment to currentSharpness and the
exp2 call) so the code uses only settings.sharpnessDLSS and eliminate the
dead/invalid code, then rebuild to confirm compilation succeeds.
There was a problem hiding this comment.
@midona-rhel the build error is complaining settings.sharpness doesn't exist. This comment specifically pointed out the issue. Please review all comments and verify.
There was a problem hiding this comment.
Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!
| void Upscaling::ApplySharpening() | ||
| { | ||
| if (!streamline.featureNIS || settings.sharpnessDLSS <= 0.0f) { | ||
| if (settings.sharpnessDLSS <= 0.0f) | ||
| return; | ||
| } | ||
|
|
||
| auto context = globals::d3d::context; | ||
|
|
||
| ID3D11RenderTargetView* renderTarget = nullptr; | ||
| context->OMGetRenderTargets(1, &renderTarget, nullptr); | ||
| if (!sharpenerTexture) | ||
| return; | ||
| float currentSharpness = (-2.0f * settings.sharpness) + 2.0f; | ||
| currentSharpness = exp2(-currentSharpness); | ||
|
|
||
| winrt::com_ptr<ID3D11Resource> mainResource; | ||
| renderTarget->GetResource(mainResource.put()); | ||
| auto context = globals::d3d::context; | ||
| auto renderer = globals::game::renderer; | ||
| auto& main = renderer->GetRuntimeData().renderTargets[RE::RENDER_TARGETS::kMAIN]; | ||
|
|
||
| context->OMSetRenderTargets(0, nullptr, nullptr); // Unbind all bound render targets | ||
| ID3D11Resource* mainResource = nullptr; | ||
| main.SRV->GetResource(&mainResource); | ||
|
|
||
| context->CopyResource(nisSharpenerTexture->resource.get(), mainResource.get()); | ||
| if (!mainResource) | ||
| return; | ||
|
|
||
| streamline.ApplyNISSharpening(nisSharpenerTexture->resource.get(), settings.sharpnessDLSS); | ||
| context->OMSetRenderTargets(0, nullptr, nullptr); | ||
|
|
||
| context->CopyResource(mainResource.get(), nisSharpenerTexture->resource.get()); | ||
| rcas.ApplySharpen(main.SRV, sharpenerTexture->uav.get(), settings.sharpnessDLSS); | ||
| context->CopyResource(mainResource, sharpenerTexture->resource.get()); | ||
|
|
||
| globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET); // Run OMSetRenderTargets again | ||
| mainResource->Release(); | ||
|
|
||
| if (renderTarget) | ||
| renderTarget->Release(); | ||
| globals::game::stateUpdateFlags->set(RE::BSGraphics::ShaderFlags::DIRTY_RENDERTARGET); | ||
| } |
There was a problem hiding this comment.
@midona-rhel the build error is complaining settings.sharpness doesn't exist. This comment specifically pointed out the issue. Please review all comments and verify.
|
Resolved now, pushed me just doing a dumb thing and didnt get around to it until now. Should work as advertised now |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (4)
src/Features/Upscaling.cpp (4)
500-519: RCAS sharpener texture lifetime wiring looks correct; minor optional mip-level tweakCreation/destruction of
sharpenerTextureis correctly tied to the DLSS path and cleaned up when switching away from DLSS, so resource lifetime looks sound. As an optional optimization, since you only ever use mip 0 in the SRV/UAV, you could settexDesc.MipLevels = 1before constructingsharpenerTextureto avoid allocating unused mips and keep the descriptor and texture layout perfectly aligned, but the current code is functionally fine.Also applies to: 559-566
889-897: Confirmrcas.Initialize()is safe to call more than once
SetupResources()can be invoked again on device loss / recreation or similar paths; please double‑check thatRCAS::Initialize()is idempotent (or internally guarded) so repeated calls don’t leak resources or re-register states incorrectly. If it isn’t already, consider adding an internal “initialized” flag or similar guard inside RCAS rather than relying on external callers.
1423-1452: Revisit DLSS slider → RCAS sharpness mapping before finalizingThis now applies RCAS with
currentSharpnessderived fromsettings.sharpnessDLSSvia(-2.0f * x + 2.0f)andexp2(-currentSharpness), instead of passing the raw 0–1 slider, and uses that as the RCAS parameter. That matches the formula requested in the PR discussion, but earlier comments also reported that this transform made sharpening behave incorrectly compared to a straight 0→1 mapping, especially for values that map below ~0.5. I’d suggest re-validating this in-game and against RCAS docs/samples; if the intended UX is “0 disables, 1 is strongest” with no non-linear scaling, you can drop the transform and passsettings.sharpnessDLSSdirectly (optionally clamped to a minimum value if very low RCAS parameters are known-bad). The rest of the path (null checks, temporarymainResourceAddRef/Release, unbinding OM, using the UAV as output and copying back to main) looks correct.
1-1521: PR metadata: title looks good; consider adding an auto-closing issue referenceThe current title
fix(upscaling): replace NIS with RCAS for DLSSalready follows Conventional Commits and clearly describes the change. Since this is intended to resolve Issue #1616, consider addingFixes #1616to the PR description so GitHub will auto-close the issue on merge, in line with the repository’s guidelines.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/Features/Upscaling.cpp(6 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{cpp,cxx,cc,c,h,hpp,hxx,hlsl,hlsli,fx,fxh,py}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Do not include TODO/FIXME placeholders; provide complete, working solutions
Files:
src/Features/Upscaling.cpp
src/**/*.{cpp,cxx,cc,h,hpp,hxx}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.{cpp,cxx,cc,h,hpp,hxx}: Ensure SE/AE/VR runtime compatibility; use runtime detection patterns (e.g., REL::RelocateMember())
Include robust error handling and resource management with graceful degradation in the plugin code
Files:
src/Features/Upscaling.cpp
**/*
⚙️ CodeRabbit configuration file
**/*: When reviewing PRs, please provide suggestions for:
Conventional Commit Titles (if not following https://www.conventionalcommits.org/ or
if the existing title does not describe the code changes):
Format: type(scope): description
Length: 50 characters limit for title, 72 for body
Style: lowercase description, no ending period
Examples:
- feat(vr): add cross-eye sampling
- fix(water): resolve flowmap bug
- docs: update shader documentation
Issue References (if PR fixes bugs or implements features):
Suggest adding appropriate GitHub keywords:Otherwise, use your standard review approach focusing on code quality.
Files:
src/Features/Upscaling.cpp
🧠 Learnings (4)
📓 Common learnings
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-07-05T05:20:45.823Z
Learning: In the skyrim-community-shaders repository, file deletion error handling improvements that replace existence checks and try-catch blocks with std::filesystem::remove error-code-based approaches are considered bug fixes rather than refactoring, as they address inadequate error handling and misleading log messages.
Learnt from: jiayev
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-08-03T18:37:19.690Z
Learning: ISReflectionsRayTracing.hlsl and ISWorldMap.hlsl in the skyrim-community-shaders repository are image-space post-processing shaders that perform color sampling and blending operations that need proper linear color space handling for the linear lighting system. ISReflectionsRayTracing handles screen-space reflections and should use conditional Color::IrradianceToLinear/Gamma conversions similar to ISCompositeLensFlareVolumetricLighting.hlsl. ISWorldMap performs 7x7 color accumulation that should be done in linear space similar to the pattern used in ISSAOComposite.hlsl.
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:260-260
Timestamp: 2025-08-05T18:13:03.123Z
Learning: In the skyrim-community-shaders SnowCover feature, the time calculation uses division by 61.0 instead of 60.0 for seconds conversion in the perFrame.Month calculation. The original author ThePagi indicated this was intentional and makes no discernible difference to the snow cover functionality, suggesting it may be related to game-specific timing mechanics or balance considerations.
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:515-515
Timestamp: 2025-10-02T14:20:33.454Z
Learning: In the Community Shaders codebase (skyrim-community-shaders repository), hardcoded shader resource slot numbers are used directly in code rather than being defined as named constants. This is the established convention and should not be flagged as an issue.
📚 Learning: 2025-07-05T05:20:45.823Z
Learnt from: alandtse
Repo: doodlum/skyrim-community-shaders PR: 0
File: :0-0
Timestamp: 2025-07-05T05:20:45.823Z
Learning: In the skyrim-community-shaders repository, file deletion error handling improvements that replace existence checks and try-catch blocks with std::filesystem::remove error-code-based approaches are considered bug fixes rather than refactoring, as they address inadequate error handling and misleading log messages.
Applied to files:
src/Features/Upscaling.cpp
📚 Learning: 2025-08-05T17:40:44.828Z
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: package/Shaders/Lighting.hlsl:0-0
Timestamp: 2025-08-05T17:40:44.828Z
Learning: In the skyrim-community-shaders repository, ultra trees (object LOD trees) are detected using a compound shader define condition `defined(DO_ALPHA_TEST) && defined(LOD_BLENDING) && defined(RIM_LIGHTING) && defined(SOFT_LIGHTING)` because "they have no define" according to the comment. The `ExtraFlags::IsTree` flag is used for different tree handling (AO removal in skylighting) and may not apply to ultra trees specifically. Before replacing the compound condition with `IsTree`, verification is needed to ensure the flag covers ultra trees.
Applied to files:
src/Features/Upscaling.cpp
📚 Learning: 2025-08-05T18:22:40.578Z
Learnt from: ThePagi
Repo: doodlum/skyrim-community-shaders PR: 1369
File: src/Features/SnowCover.cpp:277-293
Timestamp: 2025-08-05T18:22:40.578Z
Learning: In the skyrim-community-shaders SnowCover feature, the wstrtostr and strtowstr utility functions defined in src/Features/SnowCover.cpp are unused and should be removed rather than fixed, as confirmed by the original author ThePagi.
Applied to files:
src/Features/Upscaling.cpp
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Build plugin and addons
- GitHub Check: Validate shader compilation (VR, .github/configs/shader-validation-vr.yaml)
- GitHub Check: Validate shader compilation (Flatrim, .github/configs/shader-validation.yaml)
🔇 Additional comments (1)
src/Features/Upscaling.cpp (1)
1478-1479: DLSS-only RCAS sharpening call is appropriately gatedConditioning
ApplySharpening()onupscaleMethod == UpscaleMethod::kDLSSensures RCAS is only run when the DLSS pipeline and its associated resources (includingsharpenerTexture) are active, while FSR continues to use its own sharpening path. This matches the PR’s intent of replacing NIS specifically for DLSS without impacting other modes.
* chore(ui): update discord banner (community-shaders#1493) * fix: use proper filename settingsuser.json (community-shaders#1491) * chore(upscaling): increase fsr sharpness * chore: rename d3d12interop to d3d12SwapChainActive (community-shaders#1494) * feat(llf): remove particle lights (community-shaders#1495) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(llf): move llf to core (community-shaders#1496) * fix: remove water clamp (community-shaders#1497) * fix(upscaling): more upscaling fixes (community-shaders#1498) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix: fix some internal errors when debugging (community-shaders#1500) * fix(ui): fix save settings conflicts & welcome screen (community-shaders#1501) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(ui): add constraints for discord banner size (community-shaders#1463) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix(VR): fix exiting menu using controllers (community-shaders#1502) * build: fix warnings (community-shaders#1505) * feat(UI): allow tooltips for disabled elements (community-shaders#1503) * feat(upscaling): add downscale percentages (community-shaders#1506) * perf(ssgi): optimize (community-shaders#1499) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat(ui): font size and perf overlay improvements (community-shaders#1511) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore: remove unused hooks (community-shaders#1510) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix: adjust IsInterior to consider kNoSky or kFixedDimensions flags (community-shaders#1512) * fix(hair): correct hair indirect normal, marschner by default (community-shaders#1515) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * chore: mostly revert ISHDR to 1.3.6 (community-shaders#1516) * chore(upscaling): simplify interop and upscale methods (community-shaders#1514) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(hair): typo in code (community-shaders#1517) * feat(ibl): lerp sky ibl using skylighting (community-shaders#1519) * fix(sss): burley artifacts with effect blend (community-shaders#1518) * fix(upscaling): fix screenshots when upscaling enabled (community-shaders#1520) * fix(upscaling): fix mipbias sometimes being wrong (community-shaders#1521) * fix: fix compile error if snow shader on (community-shaders#1522) * chore(upscaling): revert fsr to typical settings (community-shaders#1523) * fix: fix minor ui issues (community-shaders#1524) * chore(grass collision): simpler grass collision (community-shaders#1525) * fix: update skylighting and version * fix(pbr): fix inconsistencies (community-shaders#1526) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: jiayev <l936249247@hotmail.com> * feat(upscaling): sharpening slider (community-shaders#1527) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore: bump versions * fix(ibl): add ibl to reflection normalization (community-shaders#1528) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(hair): remove pbr lighting mult for hair (community-shaders#1531) * chore(upscaling): add back upscale multiplier (community-shaders#1532) * fix(upscaling): fix minor upscaling issues (community-shaders#1536) * chore: gamma space normalisation (community-shaders#1535) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat(grass collision): implement with texture and history (community-shaders#1539) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * chore(grass collision): less aggressive (community-shaders#1546) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(skylighting): fix cell id casting (community-shaders#1544) * chore(emat): auto detect terrain parallax (community-shaders#1545) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore: update versions * feat(VR): enable upscaling (community-shaders#1507) * fix(terrain shadows): fix brightened lods (community-shaders#1547) * chore(upscaling): reduce ghosting near camera (community-shaders#1548) * fix: fix grass not animating (community-shaders#1549) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix(grass collision): fix non-standard timescales (community-shaders#1550) * build: deploy only updated files (community-shaders#1556) * feat: add Clear Shader Cache to Advanced (community-shaders#1555) * chore(featureissues): default collapse testing menu (community-shaders#1554) * fix(VR): use only supported shaders from cache (community-shaders#1553) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * build: use gersemi cmake formatter (community-shaders#1557) * fix(terrain): vanilla diffuse in pbr terrain cell too bright due to wrong color space (community-shaders#1558) * docs: add new feature development template guide (community-shaders#1529) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * docs(UI): remove duplicate GPL license statement (community-shaders#1561) * feat: add renderdoc for debugging (community-shaders#1560) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@gmail.com> * fix(ui): welcome popup size issues (community-shaders#1573) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore(grass collision): minor tweaks (community-shaders#1568) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(terrain helper): fix conflicting bit (community-shaders#1566) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat(UI): separate theme settings, UI refactor, font support (community-shaders#1571) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore: bump versions * build: fix zipping aio (community-shaders#1579) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(grass collision): clamp maximum depth of grass (community-shaders#1578) * feat(UI): enhance shader blocking (community-shaders#1564) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@gmail.com> * fix: remove duplicate buffer setup (community-shaders#1586) * feat: update shader compile elapsed time every second (community-shaders#1587) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * build: add cmake install commands (community-shaders#1372) * feat(perf-overlay): add size controls (community-shaders#1591) * fix(perf-overlay): fix infinite draw calls table height (community-shaders#1590) * refactor(perf-overlay): remove collapsible headers (community-shaders#1572) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(perf-overlay): removed ImGuiTableFlags_ScrollX/Y for scroll bar issues (community-shaders#1594) * build: fix shader copying to relative paths (community-shaders#1603) * fix(ibl): apply ibl to cubemap normalisation for non deferred (community-shaders#1604) * fix(grass): use correct light direction (community-shaders#1602) * fix(welcome-popup): adjust font size & window spacing (community-shaders#1592) * feat(lod): add gamma sliders (community-shaders#1588) * build: correct CodeRabbit schema syntax (community-shaders#1608) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> * build: add compile-time validation of GPU buffers (community-shaders#1427) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> * ci: run shader validation on CMake and CI config changes (community-shaders#1606) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> * feat: procedural sun * limb darkening * another darkening * build(deps): remove orphaned Intel XeSS dependency (community-shaders#1611) Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> * fix: accumulate sunlight color in pixel shader output * fix(ui): enter key now behaves properly when first time popup is open (community-shaders#1615) * feat(ui): add tabs to advanced settings & PBR search (community-shaders#1599) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * build: add HLSL intellisense (community-shaders#1614) * refactor(UI): move light limit visualization into debug (community-shaders#1619) * refactor(ui): add settings for shader block hotkeys (community-shaders#1624) Co-authored-by: Bruce <44987693+brucenguyen@users.noreply.github.com> * fix(ui): anchor reset settings button position (community-shaders#1621) Co-authored-by: Giovanni Correia <Gistix@users.noreply.github.com> * fix(hair): use indirect normal for deferred marschner hair (community-shaders#1626) * build: fix Package-AIO-Manual for fresh pulls (community-shaders#1625) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(snow): use world space vectors (community-shaders#1618) * feat(UI): add gaussian blur shader core files (community-shaders#1595) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(ui): add test conditions button (community-shaders#1637) * fix(ui): blocked shader info overflow in Shader Debug tab (community-shaders#1632) * fix(upscaling): replace NIS with RCAS for DLSS (community-shaders#1620) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(dynamic cubemaps): add a check for timeskip (community-shaders#1639) * refactor: restructure lighting (community-shaders#1633) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(ui): add themes & fonts (community-shaders#1596) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat(water): add flowmap parallax (community-shaders#1636) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix cloud shadow setting saving --------- Co-authored-by: zxcvbn <66063766+zndxcvbn@users.noreply.github.com> Co-authored-by: davo0411 <davidkehoe0411@outlook.com> Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@users.noreply.github.com> Co-authored-by: soda <130315225+soda3000@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: ThePagi <32794457+ThePagi@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@gmail.com> Co-authored-by: Yupeng Zhang <ArcEarth@outlook.com> Co-authored-by: kuplion <kuplion@hotmail.com> Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> Co-authored-by: Giovanni Correia <Gistix@users.noreply.github.com> Co-authored-by: Bruce <44987693+brucenguyen@users.noreply.github.com> Co-authored-by: Midona <106106405+midona-rhel@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Changed it to RCAS for sharpening even for DLSS
should solve Issue #1616
Summary by CodeRabbit
New Features
Changes
Removed
✏️ Tip: You can customize this high-level summary in your review settings.