import rdtest import renderdoc as rd class VK_Overlay_Test(rdtest.Overlay_Test): demos_test_name = 'VK_Overlay_Test' internal = False def check_capture(self): # Check clear-before-action when first selecting a action, to ensure that bindless feedback doesn't interfere out = self.controller.CreateOutput(rd.CreateHeadlessWindowingData(100, 100), rd.ReplayOutputType.Texture) setup_marker = self.find_action("Setup") self.set_event(setup_marker.nextAction.eventId, True) pipe = self.controller.GetPipelineState() tex = rd.TextureDisplay() tex.resourceId = pipe.GetOutputTargets()[0].resource tex.overlay = rd.DebugOverlay.ClearBeforeDraw out.SetTextureDisplay(tex) out.Display() # Select the next setup action self.set_event(setup_marker.nextAction.eventId, True) # Select the real action for the first time self.set_event(self.find_action("Normal Test").nextAction.eventId, True) self.check_pixel_value(tex.resourceId, 180, 150, [0.0, 0.0, 0.0, 0.0]) self.check_pixel_value(tex.resourceId, 50, 50, [0.0, 0.0, 0.0, 0.0]) self.check_pixel_value(tex.resourceId, 200, 64, [1.0, 1.0, 0.0, 1.0]) # Clear the overlay to reset to a sensible state tex.overlay = rd.DebugOverlay.NoOverlay out.SetTextureDisplay(tex) out.Display() super(VK_Overlay_Test, self).check_capture() # Don't check any pixel values, but ensure all overlays at least work with rasterizer discard and no # viewport/scissor bound sub_marker = self.find_action("Discard Test") self.set_event(sub_marker.nextAction.eventId, True) pipe = self.controller.GetPipelineState() tex = rd.TextureDisplay() tex.resourceId = pipe.GetOutputTargets()[0].resource for overlay in rd.DebugOverlay: if overlay == rd.DebugOverlay.NoOverlay: continue # These overlays are just displaymodes really, not actually separate overlays if overlay == rd.DebugOverlay.NaN or overlay == rd.DebugOverlay.Clipping: continue if overlay == rd.DebugOverlay.ClearBeforeDraw or overlay == rd.DebugOverlay.ClearBeforePass: continue rdtest.log.success(f"Checking overlay {overlay!s} with rasterizer discard") tex.overlay = overlay out.SetTextureDisplay(tex) out.Display() overlay_id = out.GetDebugOverlayTexID() rdtest.log.success(f"Overlay {overlay!s} rendered with rasterizer discard") out.Shutdown()