Skip to content

Commit fec440c

Browse files
committed
Merge branch 'pkristof/aliasHazardFix' into 'main'
Fixed aliasing hazard for primary virtual motion vector resource by moving a read from debug view to where it's written in gbuffer pass for debug view purposes. See merge request lightspeedrtx/dxvk-remix-nv!1595
2 parents b8f0098 + 9020af9 commit fec440c

File tree

5 files changed

+29
-11
lines changed

5 files changed

+29
-11
lines changed

src/dxvk/rtx_render/rtx_debug_view.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,6 @@ namespace dxvk {
527527
TEXTURE2D(DEBUG_VIEW_BINDING_SHARED_FLAGS_INPUT)
528528
TEXTURE2D(DEBUG_VIEW_BINDING_PRIMARY_LINEAR_VIEW_Z_INPUT)
529529
TEXTURE2D(DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_WORLD_SHADING_NORMAL_PERCEPTUAL_ROUGHNESS_INPUT)
530-
TEXTURE2D(DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_MOTION_VECTOR_INPUT)
531530
TEXTURE2D(DEBUG_VIEW_BINDING_PRIMARY_SCREEN_SPACE_MOTION_VECTOR_INPUT)
532531
TEXTURE2D(DEBUG_VIEW_BINDING_RTXDI_CONFIDENCE_INPUT)
533532
TEXTURE2D(DEBUG_VIEW_BINDING_RENDER_OUTPUT_INPUT)
@@ -1252,7 +1251,6 @@ namespace dxvk {
12521251
ctx->bindResourceView(DEBUG_VIEW_BINDING_SHARED_FLAGS_INPUT, rtOutput.m_sharedFlags.view, nullptr);
12531252
ctx->bindResourceView(DEBUG_VIEW_BINDING_PRIMARY_LINEAR_VIEW_Z_INPUT, rtOutput.m_primaryLinearViewZ.view, nullptr);
12541253
ctx->bindResourceView(DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_WORLD_SHADING_NORMAL_PERCEPTUAL_ROUGHNESS_INPUT, rtOutput.m_primaryVirtualWorldShadingNormalPerceptualRoughness.view, nullptr);
1255-
ctx->bindResourceView(DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_MOTION_VECTOR_INPUT, rtOutput.m_primaryVirtualMotionVector.view(Resources::AccessType::Read), nullptr);
12561254
ctx->bindResourceView(DEBUG_VIEW_BINDING_PRIMARY_SCREEN_SPACE_MOTION_VECTOR_INPUT, rtOutput.m_primaryScreenSpaceMotionVector.view, nullptr);
12571255
ctx->bindResourceView(DEBUG_VIEW_BINDING_RTXDI_CONFIDENCE_INPUT, rtOutput.getCurrentRtxdiConfidence().view(Resources::AccessType::Read, debugViewArgs.isRTXDIConfidenceValid), nullptr);
12581256
Rc<DxvkImageView> renderOutput =

src/dxvk/rtx_render/rtx_resources.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ namespace dxvk {
410410
m_raytracingOutput.m_primaryRtxdiTemporalPosition = AliasedResource(m_raytracingOutput.m_primaryVirtualWorldShadingNormalPerceptualRoughnessDenoising, ctx, m_downscaledExtent, VK_FORMAT_R32_UINT, "primary rtxdi temporal position", true);
411411
}
412412

413-
if (RtxOptions::integrateIndirectMode() == IntegrateIndirectMode::NeuralRadianceCache && DebugView::debugViewIdx() == DEBUG_VIEW_DISABLED && RtxOptions::captureDebugImage() == false) {
413+
if (RtxOptions::integrateIndirectMode() == IntegrateIndirectMode::NeuralRadianceCache && RtxOptions::captureDebugImage() == false) {
414414
m_raytracingOutput.m_indirectRadianceHitDistance = AliasedResource(m_raytracingOutput.m_primaryVirtualMotionVector, ctx, m_downscaledExtent, VK_FORMAT_R16G16B16A16_SFLOAT, "Indirect Radiance Hit Distance", true);
415415

416416
// m_primaryRtxdiTemporalPosition and m_primaryVirtualWorldShadingNormalPerceptualRoughnessDenoising has different format, so they have different image views

src/dxvk/shaders/rtx/algorithm/geometry_resolver.slangh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,8 @@ void geometryResolverOutputSurface(
332332
alphaBlendSurface.finalize(surface.hashPacked);
333333
AlphaBlendGBuffer[pixelCoordinate] = alphaBlendSurface.pack();
334334
}
335+
336+
geometryResolverOutputSurfaceDebugView(pixelCoordinate, virtualMotion);
335337
}
336338

337339
void geometryResolverDLSSRROutputSurface(
@@ -389,6 +391,31 @@ void accumulateParticleBuffer(ivec2 pixelCoordinate, vec3 radiance)
389391
ParticleBuffer[pixelCoordinate] = prevParticleEmissive;
390392
}
391393

394+
void geometryResolverOutputSurfaceDebugView(
395+
uvec2 pixelCoordinate,
396+
vec3 virtualMotion)
397+
{
398+
switch(cb.debugView)
399+
{
400+
default:
401+
case DEBUG_VIEW_DISABLED:
402+
break;
403+
case DEBUG_VIEW_VIRTUAL_MOTION_VECTOR:
404+
storeInDebugView(pixelCoordinate, virtualMotion);
405+
break;
406+
case DEBUG_VIEW_NAN:
407+
{
408+
bool isValid = true;
409+
410+
// DEBUG_VIEW_VIRTUAL_MOTION_VECTOR
411+
isValid &= isValidValue(virtualMotion);
412+
413+
accumulateInDebugViewAnd(pixelCoordinate, isValid);
414+
break;
415+
}
416+
}
417+
}
418+
392419
void geometryResolverVertexOutputDebugView(
393420
uvec2 pixelCoordinate,
394421
Ray ray, RayInteraction rayInteraction,

src/dxvk/shaders/rtx/pass/debug_view/debug_view.comp.slang

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,6 @@ layout(r32f, binding = DEBUG_VIEW_BINDING_PRIMARY_LINEAR_VIEW_Z_INPUT)
7272
Texture2D<float> PrimaryLinearViewZ;
7373
layout(rgba16, binding = DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_WORLD_SHADING_NORMAL_PERCEPTUAL_ROUGHNESS_INPUT)
7474
Texture2D<float4> PrimaryVirtualWorldNormalPerceptualRoughness;
75-
layout(rgba16, binding = DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_MOTION_VECTOR_INPUT)
76-
Texture2D<float4> PrimaryVirtualMotionVector;
7775
layout(rg16, binding = DEBUG_VIEW_BINDING_PRIMARY_SCREEN_SPACE_MOTION_VECTOR_INPUT)
7876
Texture2D<float2> PrimaryScreenSpaceMotionVector;
7977
layout(rgba16f, binding = DEBUG_VIEW_BINDING_RTXDI_CONFIDENCE_INPUT)
@@ -270,9 +268,6 @@ vec4 loadInput(inout RNG randomState, ivec2 threadId)
270268
case DEBUG_VIEW_VIRTUAL_SHADING_NORMAL:
271269
value = unormVectorToColor(PrimaryVirtualWorldNormalPerceptualRoughness[threadId].xyz);
272270
break;
273-
case DEBUG_VIEW_VIRTUAL_MOTION_VECTOR:
274-
value = vec4(abs(PrimaryVirtualMotionVector[threadId].xyz), 1);
275-
break;
276271
case DEBUG_VIEW_SCREEN_SPACE_MOTION_VECTOR:
277272
value = vec4(abs(PrimaryScreenSpaceMotionVector[threadId].xy), 0, 1);
278273
break;
@@ -488,8 +483,6 @@ vec4 loadInput(inout RNG randomState, ivec2 threadId)
488483

489484
// DEBUG_VIEW_VIRTUAL_SHADING_NORMAL
490485
isValid &= isValidValue(unormVectorToColor(PrimaryVirtualWorldNormalPerceptualRoughness[threadId].xyz));
491-
// DEBUG_VIEW_VIRTUAL_MOTION_VECTOR
492-
isValid &= isValidValue(PrimaryVirtualMotionVector[threadId].xy);
493486
// DEBUG_VIEW_SCREEN_SPACE_MOTION_VECTOR
494487
isValid &= isValidValue(PrimaryScreenSpaceMotionVector[threadId].xy);
495488

src/dxvk/shaders/rtx/pass/debug_view/debug_view_binding_indices.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
#define DEBUG_VIEW_BINDING_SHARED_FLAGS_INPUT 7
3737
#define DEBUG_VIEW_BINDING_PRIMARY_LINEAR_VIEW_Z_INPUT 8
3838
#define DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_WORLD_SHADING_NORMAL_PERCEPTUAL_ROUGHNESS_INPUT 9
39-
#define DEBUG_VIEW_BINDING_PRIMARY_VIRTUAL_MOTION_VECTOR_INPUT 10
39+
4040
#define DEBUG_VIEW_BINDING_PRIMARY_SCREEN_SPACE_MOTION_VECTOR_INPUT 11
4141
#define DEBUG_VIEW_BINDING_RTXDI_CONFIDENCE_INPUT 12
4242
#define DEBUG_VIEW_BINDING_RENDER_OUTPUT_INPUT 13

0 commit comments

Comments
 (0)