瀏覽代碼

nVidia VRS cache workaround

Panagiotis Christopoulos Charitos 3 年之前
父節點
當前提交
d69852791a
共有 3 個文件被更改,包括 18 次插入5 次删除
  1. 15 0
      AnKi/Gr/Vulkan/CommandBufferImpl.cpp
  2. 1 3
      AnKi/Shaders/IndirectSpecularVrsSriGeneration.ankiprog
  3. 2 2
      Sandbox/Main.cpp

+ 15 - 0
AnKi/Gr/Vulkan/CommandBufferImpl.cpp

@@ -162,6 +162,21 @@ void CommandBufferImpl::beginRenderPassInternal()
 {
 	FramebufferImpl& impl = static_cast<FramebufferImpl&>(*m_activeFb);
 
+#if !ANKI_PLATFORM_MOBILE
+	// nVidia SRI cache workaround
+	if(impl.hasSri())
+	{
+		VkMemoryBarrier memBarrier = {};
+		memBarrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
+		memBarrier.dstAccessMask = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR;
+
+		const VkPipelineStageFlags srcStages = 0;
+		const VkPipelineStageFlags dstStages = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR;
+
+		vkCmdPipelineBarrier(m_handle, srcStages, dstStages, 0, 1, &memBarrier, 0, nullptr, 0, nullptr);
+	}
+#endif
+
 	m_state.beginRenderPass(&impl);
 
 	VkRenderPassBeginInfo bi = {};

+ 1 - 3
AnKi/Shaders/IndirectSpecularVrsSriGeneration.ankiprog

@@ -44,17 +44,15 @@ shared Vec2 s_maxDerivative[SHARED_MEMORY_ENTRIES];
 F32 sampleLuma(Vec2 uv, I32 offsetX, I32 offsetY)
 {
 	uv += Vec2(offsetX, offsetY) * u_oneOverViewportSize;
-	const Vec2 ndc = UV_TO_NDC(uv);
 	const Vec3 color = textureLod(sampler2D(u_inputTex, u_nearestClampSampler), uv, 0.0).xyz;
 	const F32 luma = computeLuminance(color);
 
-	return min(1.0, (2.0f * luma) / (1.0f + luma));
+	return (2.0f * luma) / (1.0f + luma);
 }
 
 void main()
 {
 	const Vec2 uv = (Vec2(gl_GlobalInvocationID.xy) * Vec2(REGION_SIZE) + 0.5) * u_oneOverViewportSize;
-	const Vec2 ndc = UV_TO_NDC(uv);
 
 #if SRI_TEXEL_DIMENSION == 8
 	// Get positions

+ 2 - 2
Sandbox/Main.cpp

@@ -367,12 +367,12 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 																									 : "RtShadows");
 	}
 
-	if(in.getKey(KeyCode::J) == 1)
+	/*if(in.getKey(KeyCode::J) == 1)
 	{
 		renderer.setCurrentDebugRenderTarget((renderer.getCurrentDebugRenderTarget() == "MotionVectorsHistoryLength")
 												 ? ""
 												 : "MotionVectorsHistoryLength");
-	}
+	}*/
 
 	if(in.getKey(KeyCode::P) == 1)
 	{