mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-02 20:18:36 +00:00
Allow setting a capture context if tests are run in UI
* This means we can keep the UI in sync with things like resource replacements.
This commit is contained in:
7 files changed
+63
-36
No files matched your search
@@ -323,6 +323,18 @@ class TestCase:
|
||||
self.cur_event = eid
|
||||
self.controller.SetFrameEvent(eid, force)
|
||||
|
||||
def replace_resource(self, original: rd.ResourceId, replacement: rd.ResourceId):
|
||||
self.controller.ReplaceResource(original, replacement)
|
||||
ctx = util.get_capture_context()
|
||||
if ctx is not None:
|
||||
ctx.RegisterReplacement(original, replacement)
|
||||
|
||||
def remove_replacement(self, id: rd.ResourceId):
|
||||
self.controller.RemoveReplacement(id)
|
||||
ctx = util.get_capture_context()
|
||||
if ctx is not None:
|
||||
ctx.UnregisterReplacement(id)
|
||||
|
||||
def pixel_history(self, tex: rd.ResourceId, x: int, y: int, sub: rd.Subresource, cast: rd.CompType):
|
||||
return HistoryContext(self, tex, x, y, sub, cast)
|
||||
|
||||
|
||||
@@ -89,6 +89,21 @@ def set_demos_binary(path: str):
|
||||
else:
|
||||
_demos_bin = os.path.abspath(path)
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import qrenderdoc
|
||||
|
||||
def set_capture_context(ctx: qrenderdoc.CaptureContext):
|
||||
global _capture_context
|
||||
_capture_context = ctx
|
||||
|
||||
|
||||
_capture_context: qrenderdoc.CaptureContext | None = None
|
||||
|
||||
def get_capture_context() -> qrenderdoc.CaptureContext | None:
|
||||
return _capture_context
|
||||
|
||||
|
||||
def set_remote_server(server: RemoteServer | None):
|
||||
global _remote_server
|
||||
|
||||
@@ -98,8 +98,8 @@ class D3D11_Shader_Editing(rdtest.TestCase):
|
||||
nochangeVS = newShader[0]
|
||||
|
||||
# Edit both Pixel shaders
|
||||
self.controller.ReplaceResource(psrefl1.resourceId, ps1)
|
||||
self.controller.ReplaceResource(psrefl2.resourceId, ps2)
|
||||
self.replace_resource(psrefl1.resourceId, ps1)
|
||||
self.replace_resource(psrefl2.resourceId, ps2)
|
||||
|
||||
# Refresh the replay if it didn't happen already
|
||||
self.set_event(eid, True)
|
||||
@@ -111,7 +111,7 @@ class D3D11_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after Pixel editing")
|
||||
|
||||
# Now "edit" the VS but don't change it. We should still get the same values
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, nochangeVS)
|
||||
self.replace_resource(vsrefl.resourceId, nochangeVS)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Triangles have green and blue channel
|
||||
@@ -121,7 +121,7 @@ class D3D11_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after no-op vertex editing")
|
||||
|
||||
# Change the VS to one that has ofpset the triangles off-centre
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, offsetVS)
|
||||
self.replace_resource(vsrefl.resourceId, offsetVS)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Original sample positions are now the clear color
|
||||
@@ -135,7 +135,7 @@ class D3D11_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after ofpset vertex editing")
|
||||
|
||||
# Now undo the first ps edit
|
||||
self.controller.RemoveReplacement(psrefl1.resourceId)
|
||||
self.remove_replacement(psrefl1.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Original sample positions are still the clear color
|
||||
@@ -149,7 +149,7 @@ class D3D11_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing first Pixel edit")
|
||||
|
||||
# Now undo the first VS edit
|
||||
self.controller.RemoveReplacement(vsrefl.resourceId)
|
||||
self.remove_replacement(vsrefl.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# The right triangle is the edited colour, but they are back in the original positions
|
||||
@@ -159,7 +159,7 @@ class D3D11_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing vertex edit")
|
||||
|
||||
# finally undo the second ps edit
|
||||
self.controller.RemoveReplacement(psrefl2.resourceId)
|
||||
self.remove_replacement(psrefl2.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# We should be back to where we started
|
||||
|
||||
@@ -91,8 +91,8 @@ class D3D12_Shader_Editing(rdtest.TestCase):
|
||||
nochangeVS = newShader[0]
|
||||
|
||||
# Edit both Pixel shaders
|
||||
self.controller.ReplaceResource(psrefl1.resourceId, ps1)
|
||||
self.controller.ReplaceResource(psrefl2.resourceId, ps2)
|
||||
self.replace_resource(psrefl1.resourceId, ps1)
|
||||
self.replace_resource(psrefl2.resourceId, ps2)
|
||||
|
||||
# Refresh the replay if it didn't happen already
|
||||
self.set_event(eid, True)
|
||||
@@ -104,7 +104,7 @@ class D3D12_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after Pixel editing")
|
||||
|
||||
# Now "edit" the VS but don't change it. We should still get the same values
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, nochangeVS)
|
||||
self.replace_resource(vsrefl.resourceId, nochangeVS)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Triangles have green and blue channel
|
||||
@@ -114,7 +114,7 @@ class D3D12_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after no-op vertex editing")
|
||||
|
||||
# Change the VS to one that has ofpset the triangles off-centre
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, offsetVS)
|
||||
self.replace_resource(vsrefl.resourceId, offsetVS)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Original sample positions are now the clear color
|
||||
@@ -128,7 +128,7 @@ class D3D12_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after ofpset vertex editing")
|
||||
|
||||
# Now undo the first ps edit
|
||||
self.controller.RemoveReplacement(psrefl1.resourceId)
|
||||
self.remove_replacement(psrefl1.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Original sample positions are still the clear color
|
||||
@@ -142,7 +142,7 @@ class D3D12_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing first Pixel edit")
|
||||
|
||||
# Now undo the first VS edit
|
||||
self.controller.RemoveReplacement(vsrefl.resourceId)
|
||||
self.remove_replacement(vsrefl.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# The right triangle is the edited colour, but they are back in the original positions
|
||||
@@ -152,7 +152,7 @@ class D3D12_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing vertex edit")
|
||||
|
||||
# finally undo the second ps edit
|
||||
self.controller.RemoveReplacement(psrefl2.resourceId)
|
||||
self.remove_replacement(psrefl2.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# We should be back to where we started
|
||||
|
||||
@@ -131,8 +131,8 @@ class GL_Shader_Editing(rdtest.TestCase):
|
||||
sepFS = newShader[0]
|
||||
|
||||
# Edit both fragment shaders
|
||||
self.controller.ReplaceResource(fixedrefl.resourceId, fixedFS)
|
||||
self.controller.ReplaceResource(dynamicrefl.resourceId, dynamicFS)
|
||||
self.replace_resource(fixedrefl.resourceId, fixedFS)
|
||||
self.replace_resource(dynamicrefl.resourceId, dynamicFS)
|
||||
|
||||
# Refresh the replay if it didn't happen already
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
@@ -145,7 +145,7 @@ class GL_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after fragment editing")
|
||||
|
||||
# Now "edit" the VS but don't change it. We should still get the same values
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, nochangeVS)
|
||||
self.replace_resource(vsrefl.resourceId, nochangeVS)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# Triangles have green propagated across to the blue channel
|
||||
@@ -156,7 +156,7 @@ class GL_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after no-op vertex editing")
|
||||
|
||||
# Change the VS to one that has offset the triangles off-centre
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, offsetVS)
|
||||
self.replace_resource(vsrefl.resourceId, offsetVS)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# Original sample positions are now the clear color
|
||||
@@ -172,7 +172,7 @@ class GL_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after offset vertex editing")
|
||||
|
||||
# Now undo the first FS edit
|
||||
self.controller.RemoveReplacement(fixedrefl.resourceId)
|
||||
self.remove_replacement(fixedrefl.resourceId)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# Original sample positions are still the clear color
|
||||
@@ -188,7 +188,7 @@ class GL_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing first fragment edit")
|
||||
|
||||
# Now undo the first VS edit
|
||||
self.controller.RemoveReplacement(vsrefl.resourceId)
|
||||
self.remove_replacement(vsrefl.resourceId)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# Only the lower triangle is the edited colour, but they are back in the original positions
|
||||
@@ -199,7 +199,7 @@ class GL_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing vertex edit")
|
||||
|
||||
# finally undo the second FS edit
|
||||
self.controller.RemoveReplacement(dynamicrefl.resourceId)
|
||||
self.remove_replacement(dynamicrefl.resourceId)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# We should be back to where we started
|
||||
@@ -216,27 +216,27 @@ class GL_Shader_Editing(rdtest.TestCase):
|
||||
# Only looking at bottom left triangle, it should be green
|
||||
self.check_pixel_value(tex, 0.75, 0.75, [0.0, 1.0, 0.0, 1.0])
|
||||
|
||||
self.controller.ReplaceResource(fsseprefl.resourceId, sepFS)
|
||||
self.replace_resource(fsseprefl.resourceId, sepFS)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# Now it should be green-blue
|
||||
self.check_pixel_value(tex, 0.75, 0.75, [0.0, 1.0, 1.0, 1.0])
|
||||
|
||||
self.controller.ReplaceResource(vsseprefl.resourceId, sepVS)
|
||||
self.replace_resource(vsseprefl.resourceId, sepVS)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# Now it should be green-blue and offset
|
||||
self.check_pixel_value(tex, 0.75, 0.75, [0.2, 0.2, 0.2, 1.0])
|
||||
self.check_pixel_value(tex, 0.95, 0.55, [0.0, 1.0, 1.0, 1.0])
|
||||
|
||||
self.controller.RemoveReplacement(fsseprefl.resourceId)
|
||||
self.remove_replacement(fsseprefl.resourceId)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# Now it should be back to green and offset
|
||||
self.check_pixel_value(tex, 0.75, 0.75, [0.2, 0.2, 0.2, 1.0])
|
||||
self.check_pixel_value(tex, 0.95, 0.55, [0.0, 1.0, 0.0, 1.0])
|
||||
|
||||
self.controller.RemoveReplacement(vsseprefl.resourceId)
|
||||
self.remove_replacement(vsseprefl.resourceId)
|
||||
self.set_event(self.get_last_action().eventId, True)
|
||||
|
||||
# We should be back to where we started
|
||||
|
||||
@@ -139,7 +139,7 @@ class VK_Graphics_Pipeline(rdtest.TestCase):
|
||||
if len(newShader[1]) != 0:
|
||||
raise rdtest.TestFailureException(f"Failed to compile edited shader: {newShader[1]}")
|
||||
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, newShader[0])
|
||||
self.replace_resource(vsrefl.resourceId, newShader[0])
|
||||
|
||||
# Refresh the replay if it didn't happen already
|
||||
self.set_event(last_action.eventId, True)
|
||||
@@ -149,5 +149,5 @@ class VK_Graphics_Pipeline(rdtest.TestCase):
|
||||
|
||||
rdtest.log.success("Edited shader had the right triangle output")
|
||||
|
||||
self.controller.RemoveReplacement(vsrefl.resourceId)
|
||||
self.remove_replacement(vsrefl.resourceId)
|
||||
self.controller.FreeTargetResource(newShader[0])
|
||||
@@ -96,8 +96,8 @@ class VK_Shader_Editing(rdtest.TestCase):
|
||||
nochangeVS = newShader[0]
|
||||
|
||||
# Edit both fragment shaders
|
||||
self.controller.ReplaceResource(fsrefl1.resourceId, FS1)
|
||||
self.controller.ReplaceResource(fsrefl2.resourceId, FS2)
|
||||
self.replace_resource(fsrefl1.resourceId, FS1)
|
||||
self.replace_resource(fsrefl2.resourceId, FS2)
|
||||
|
||||
# Refresh the replay if it didn't happen already
|
||||
self.set_event(eid, True)
|
||||
@@ -109,7 +109,7 @@ class VK_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after fragment editing")
|
||||
|
||||
# Now "edit" the VS but don't change it. We should still get the same values
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, nochangeVS)
|
||||
self.replace_resource(vsrefl.resourceId, nochangeVS)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Triangles have green and blue channel
|
||||
@@ -119,7 +119,7 @@ class VK_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after no-op vertex editing")
|
||||
|
||||
# Change the VS to one that has offset the triangles off-centre
|
||||
self.controller.ReplaceResource(vsrefl.resourceId, offsetVS)
|
||||
self.replace_resource(vsrefl.resourceId, offsetVS)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Original sample positions are now the clear color
|
||||
@@ -133,7 +133,7 @@ class VK_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after offset vertex editing")
|
||||
|
||||
# Now undo the first FS edit
|
||||
self.controller.RemoveReplacement(fsrefl1.resourceId)
|
||||
self.remove_replacement(fsrefl1.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# Original sample positions are still the clear color
|
||||
@@ -147,7 +147,7 @@ class VK_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing first fragment edit")
|
||||
|
||||
# Now undo the first VS edit
|
||||
self.controller.RemoveReplacement(vsrefl.resourceId)
|
||||
self.remove_replacement(vsrefl.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# The right triangle is the edited colour, but they are back in the original positions
|
||||
@@ -157,7 +157,7 @@ class VK_Shader_Editing(rdtest.TestCase):
|
||||
rdtest.log.success("Values are as expected after removing vertex edit")
|
||||
|
||||
# finally undo the second FS edit
|
||||
self.controller.RemoveReplacement(fsrefl2.resourceId)
|
||||
self.remove_replacement(fsrefl2.resourceId)
|
||||
self.set_event(eid, True)
|
||||
|
||||
# We should be back to where we started
|
||||
@@ -209,7 +209,7 @@ class VK_Shader_Editing(rdtest.TestCase):
|
||||
raise rdtest.TestFailureException(f"Failed to compile edited compute shader: {newShader[1]}")
|
||||
|
||||
nochangeCS = newShader[0]
|
||||
self.controller.ReplaceResource(csrefl.resourceId, nochangeCS)
|
||||
self.replace_resource(csrefl.resourceId, nochangeCS)
|
||||
self.set_event(eid, False)
|
||||
uints = struct.unpack_from('=4L', self.controller.GetBufferData(bufout, 0, 0), 0)
|
||||
if not rdtest.value_compare(uints, [777, 888, 999, 1110]):
|
||||
@@ -255,7 +255,7 @@ void main()
|
||||
raise rdtest.TestFailureException(f"Failed to compile edited compute shader: {newShader[1]}")
|
||||
|
||||
CS1 = newShader[0]
|
||||
self.controller.ReplaceResource(csrefl.resourceId, CS1)
|
||||
self.replace_resource(csrefl.resourceId, CS1)
|
||||
self.set_event(eid, False)
|
||||
uints = struct.unpack_from('=4L', self.controller.GetBufferData(bufout, 0, 0), 0)
|
||||
if not rdtest.value_compare(uints, [1110, 999, 888, 777]):
|
||||
|
||||
Reference in new issue
Block a user