mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 13:20:54 +00:00
153 lines
7.6 KiB
Python
153 lines
7.6 KiB
Python
import rdtest
|
|
import struct
|
|
import renderdoc as rd
|
|
|
|
|
|
class VK_Discard_Zoo(rdtest.Discard_Zoo):
|
|
demos_test_name = 'VK_Discard_Zoo'
|
|
internal = False
|
|
|
|
def __init__(self):
|
|
rdtest.Discard_Zoo.__init__(self)
|
|
|
|
def check_capture(self):
|
|
self.check_textures()
|
|
|
|
# Test render pass attachments
|
|
action = self.find_action("TestStart")
|
|
|
|
rpcol: rd.TextureDescription = self.get_texture(
|
|
[res for res in self.controller.GetResources() if "RPCol" in res.name][0].resourceId)
|
|
rpdepth: rd.TextureDescription = self.get_texture(
|
|
[res for res in self.controller.GetResources() if "RPDepth" in res.name][0].resourceId)
|
|
|
|
self.check(action is not None)
|
|
|
|
self.controller.SetFrameEvent(action.next.eventId, True)
|
|
|
|
# At the start they should be cleared
|
|
|
|
for y in range(0, rpcol.height-1, 17):
|
|
for x in range(0, rpcol.width-1, 17):
|
|
self.check_pixel_value(rpcol.resourceId, x, y, [0.0, 1.0, 0.0, 1.0])
|
|
self.check_pixel_value(rpdepth.resourceId, x, y, [0.4, float(0x40)/float(255), 0.0, 1.0])
|
|
|
|
rdtest.log.success("Values are correct before the renderpass")
|
|
|
|
action = self.find_action("TestMiddle")
|
|
|
|
self.controller.SetFrameEvent(action.next.eventId, True)
|
|
|
|
for y in range(0, rpcol.height-1, 17):
|
|
for x in range(0, rpcol.width-1, 17):
|
|
|
|
# if we're in the rect, check for pattern colors
|
|
if 50 <= x < 125 and 50 <= y < 125:
|
|
c: rd.PixelValue = self.controller.PickPixel(rpcol.resourceId, x, y, rd.Subresource(),
|
|
rd.CompType.Typeless)
|
|
d: rd.PixelValue = self.controller.PickPixel(rpdepth.resourceId, x, y, rd.Subresource(),
|
|
rd.CompType.Typeless)
|
|
|
|
if not rdtest.value_compare(c.floatValue, [0.0] * 4) and not rdtest.value_compare(c.floatValue,
|
|
[1000.0] * 4):
|
|
raise rdtest.TestFailureException(
|
|
'middle color has unexpected value at {},{}: {}'.format(x, y, c.floatValue))
|
|
|
|
if not rdtest.value_compare(d.floatValue[0:2], [0.0] * 2) and not rdtest.value_compare(
|
|
d.floatValue[0:2], [1.0] * 2):
|
|
raise rdtest.TestFailureException(
|
|
'middle depth has unexpected value at {},{}: {}'.format(x, y, d.floatValue))
|
|
else:
|
|
self.check_pixel_value(rpcol.resourceId, x, y, [0.0, 1.0, 0.0, 1.0])
|
|
self.check_pixel_value(rpdepth.resourceId, x, y, [0.4, float(0x40)/float(255), 0.0, 1.0])
|
|
|
|
middle_col_bytes = self.controller.GetTextureData(rpcol.resourceId, rd.Subresource())
|
|
middle_depth_bytes = self.controller.GetTextureData(rpdepth.resourceId, rd.Subresource())
|
|
|
|
rdtest.log.success("Values are correct in the middle of the renderpass")
|
|
|
|
action = self.find_action("TestEnd")
|
|
|
|
self.controller.SetFrameEvent(action.next.eventId, True)
|
|
|
|
for y in range(0, rpcol.height-1, 17):
|
|
for x in range(0, rpcol.width-1, 17):
|
|
|
|
# if we're in the rect, check for pattern colors
|
|
if 50 <= x < 125 and 50 <= y < 125:
|
|
c: rd.PixelValue = self.controller.PickPixel(rpcol.resourceId, x, y, rd.Subresource(),
|
|
rd.CompType.Typeless)
|
|
d: rd.PixelValue = self.controller.PickPixel(rpdepth.resourceId, x, y, rd.Subresource(),
|
|
rd.CompType.Typeless)
|
|
|
|
if not rdtest.value_compare(c.floatValue, [0.0] * 4) and not rdtest.value_compare(c.floatValue,
|
|
[1000.0] * 4):
|
|
raise rdtest.TestFailureException(
|
|
'middle color has unexpected value at {},{}: {}'.format(x, y, c.floatValue))
|
|
|
|
if not rdtest.value_compare(d.floatValue[0:2], [0.0] * 2) and not rdtest.value_compare(
|
|
d.floatValue[0:2], [1.0] * 2):
|
|
raise rdtest.TestFailureException(
|
|
'middle depth has unexpected value at {},{}: {}'.format(x, y, d.floatValue))
|
|
else:
|
|
self.check_pixel_value(rpcol.resourceId, x, y, [0.0, 1.0, 0.0, 1.0])
|
|
self.check_pixel_value(rpdepth.resourceId, x, y, [0.4, float(0x40)/float(255), 0.0, 1.0])
|
|
|
|
rdtest.log.success("Values are correct after the renderpass")
|
|
|
|
end_col_bytes = self.controller.GetTextureData(rpcol.resourceId, rd.Subresource())
|
|
end_depth_bytes = self.controller.GetTextureData(rpdepth.resourceId, rd.Subresource())
|
|
|
|
self.check(middle_col_bytes != end_col_bytes)
|
|
self.check(middle_depth_bytes != end_depth_bytes)
|
|
|
|
action = self.find_action("UndefinedLoad_Before")
|
|
|
|
self.controller.SetFrameEvent(action.next.eventId, True)
|
|
|
|
# check that they are cleared again
|
|
for y in range(0, rpcol.height-1, 17):
|
|
for x in range(0, rpcol.width-1, 17):
|
|
self.check_pixel_value(rpcol.resourceId, x, y, [0.0, 1.0, 0.0, 1.0])
|
|
self.check_pixel_value(rpdepth.resourceId, x, y, [0.4, float(0x40)/float(255), 0.0, 1.0])
|
|
|
|
rdtest.log.success("Values are correct before the UNDEFINED initial layout renderpass")
|
|
|
|
action = self.find_action("UndefinedLoad_After")
|
|
|
|
self.controller.SetFrameEvent(action.next.eventId, True)
|
|
|
|
# check that they are all undefined pattern - initial layout affects the whole resource
|
|
for y in range(0, rpcol.height-1, 17):
|
|
for x in range(0, rpcol.width-1, 17):
|
|
c: rd.PixelValue = self.controller.PickPixel(rpcol.resourceId, x, y, rd.Subresource(),
|
|
rd.CompType.Typeless)
|
|
d: rd.PixelValue = self.controller.PickPixel(rpdepth.resourceId, x, y, rd.Subresource(),
|
|
rd.CompType.Typeless)
|
|
|
|
if not rdtest.value_compare(c.floatValue, [0.0] * 4) and not rdtest.value_compare(c.floatValue,
|
|
[1000.0] * 4):
|
|
raise rdtest.TestFailureException(
|
|
'undefined color has unexpected value at {},{}: {}'.format(x, y, c.floatValue))
|
|
|
|
if not rdtest.value_compare(d.floatValue[0:2], [0.0] * 2) and not rdtest.value_compare(
|
|
d.floatValue[0:2], [1.0] * 2):
|
|
raise rdtest.TestFailureException(
|
|
'undefined depth has unexpected value at {},{}: {}'.format(x, y, d.floatValue))
|
|
|
|
rdtest.log.success("Values are correct after the UNDEFINED initial layout renderpass")
|
|
|
|
action = self.find_action("CmdDraw")
|
|
self.check(action is not None)
|
|
self.controller.SetFrameEvent(action.eventId, True)
|
|
|
|
pipe: rd.PipeState = self.controller.GetPipelineState()
|
|
|
|
tex_id = pipe.GetOutputTargets()[0].resourceId
|
|
|
|
self.check_pixel_value(tex_id, 0.5, 0.5, [0.0, 1.0, 0.0, 1.0])
|
|
self.controller.SetFrameEvent(action.next.eventId, True)
|
|
self.check_pixel_value(tex_id, 0.5, 0.5, [0.0, 1.0, 0.0, 1.0])
|
|
|
|
rdtest.log.success("Output value from draw is correct at draw and after it")
|