From 33477f758b9282af2fb6e98db555930f395fc6ac Mon Sep 17 00:00:00 2001 From: Carbene Hu Date: Tue, 7 Jan 2025 19:21:09 +0800 Subject: [PATCH 1/2] Fix rasterization memory leak. (#459) (#461) --- Source/Falcor/Core/State/GraphicsState.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Falcor/Core/State/GraphicsState.cpp b/Source/Falcor/Core/State/GraphicsState.cpp index 7c5c5f039..fa8e76c06 100644 --- a/Source/Falcor/Core/State/GraphicsState.cpp +++ b/Source/Falcor/Core/State/GraphicsState.cpp @@ -110,6 +110,7 @@ ref GraphicsState::getGSO(const ProgramVars* pVars) else { pGso = mpDevice->createGraphicsStateObject(mDesc); + mDesc = pGso->getDesc(); pGso->breakStrongReferenceToDevice(); mpGsoGraph->setCurrentNodeData(pGso); } From eb540f6748774680ce0039aaf3ac9279266ec521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Sand=C3=A9n?= Date: Tue, 7 Jan 2025 20:21:34 +0900 Subject: [PATCH 2/2] Fix linearZ slope in GBufferRT (#434) --- Source/RenderPasses/GBuffer/GBuffer/GBufferRT.slang | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/RenderPasses/GBuffer/GBuffer/GBufferRT.slang b/Source/RenderPasses/GBuffer/GBuffer/GBufferRT.slang index 268741730..763f88000 100644 --- a/Source/RenderPasses/GBuffer/GBuffer/GBufferRT.slang +++ b/Source/RenderPasses/GBuffer/GBuffer/GBufferRT.slang @@ -153,19 +153,19 @@ struct GBufferRT float3 computeDdxPosW(float3 posW, float3 normW, float2 invFrameDim) { - float3 projRight = normalize(cross(normW, cross(normW, gScene.camera.data.cameraV))); + float3 projRight = normalize(cross(normW, cross(normW, gScene.camera.data.cameraU))); float distanceToHit = length(posW - gScene.camera.data.posW); float2 ddNdc = float2(2.f, -2.f) * invFrameDim; - float distRight = distanceToHit * ddNdc.x / dot(normalize(gScene.camera.data.cameraV), projRight); + float distRight = distanceToHit * ddNdc.x / dot(normalize(gScene.camera.data.cameraU), projRight); return distRight * projRight; } float3 computeDdyPosW(float3 posW, float3 normW, float2 invFrameDim) { - float3 projUp = normalize(cross(normW, cross(normW, gScene.camera.data.cameraU))); + float3 projUp = normalize(cross(normW, cross(normW, gScene.camera.data.cameraV))); float distanceToHit = length(posW - gScene.camera.data.posW); float2 ddNdc = float2(2.f, -2.f) * invFrameDim; - float distUp = distanceToHit * ddNdc.y / dot(normalize(gScene.camera.data.cameraU), projUp); + float distUp = distanceToHit * ddNdc.y / dot(normalize(gScene.camera.data.cameraV), projUp); return distUp * projUp; } @@ -329,7 +329,7 @@ struct GBufferRT float3 ddxPosW = computeDdxPosW(sd.posW, sd.faceN, invFrameDim); float3 ddyPosW = computeDdyPosW(sd.posW, sd.faceN, invFrameDim); float4 curPosH_dx = mul(gScene.camera.data.viewProjMatNoJitter, float4(sd.posW + ddxPosW, 1.f)); - float4 curPosH_dy = mul(gScene.camera.data.viewProjMatNoJitter, float4(sd.posW + ddxPosW, 1.f)); + float4 curPosH_dy = mul(gScene.camera.data.viewProjMatNoJitter, float4(sd.posW + ddyPosW, 1.f)); float ddxLinearZ = abs(curPosH_dx.w - curLinearZ); float ddyLinearZ = abs(curPosH_dy.w - curLinearZ); float dLinearZ = max(ddxLinearZ, ddyLinearZ);