mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 09:00:44 +00:00
a76aa1dede
* We also drop everything gfx804 to keep the device list from being too bloated, as well as AMD planning to remove support for these devices soon.
115 lines
4.5 KiB
Python
115 lines
4.5 KiB
Python
import renderdoc as rd
|
|
from typing import List
|
|
import rdtest
|
|
|
|
|
|
class VK_Shader_ISA(rdtest.TestCase):
|
|
demos_test_name = 'VK_Shader_ISA'
|
|
|
|
def check_capture(self):
|
|
action = self.find_action("GPU=")
|
|
|
|
self.check(action is not None)
|
|
|
|
is_amd = 'AMD' in action.customName
|
|
|
|
self.controller.SetFrameEvent(action.next.eventId, False)
|
|
|
|
pipe: rd.PipeState = self.controller.GetPipelineState()
|
|
|
|
refl: rd.ShaderReflection = pipe.GetShaderReflection(rd.ShaderStage.Vertex)
|
|
|
|
isas: List[str] = self.controller.GetDisassemblyTargets(True)
|
|
|
|
if isas == []:
|
|
raise rdtest.TestFailureException("Expected some disassembly targets, got none!")
|
|
|
|
# Generic testing can't do much, we just ensure that we can successfully get a non-empty disassembly string
|
|
for isa in isas:
|
|
disasm: str = self.controller.DisassembleShader(pipe.GetGraphicsPipelineObject(), refl, isa)
|
|
|
|
if len(disasm) < 32:
|
|
raise rdtest.TestFailureException("Disassembly for target '{}' is degenerate: {}".format(isa, disasm))
|
|
|
|
rdtest.log.success("All disassembly targets successfully fetched and seem reasonable")
|
|
|
|
# We make this a hard failure. Users can fix this by installing the plugins, and we don't want automated
|
|
# overnight tests to suddenly stop checking
|
|
if 'AMDIL' not in isas:
|
|
raise rdtest.TestFailureException(
|
|
"AMDIL is not an available disassembly target. Are you missing plugins?")
|
|
|
|
disasm: str = self.controller.DisassembleShader(pipe.GetGraphicsPipelineObject(), refl, 'AMDIL')
|
|
|
|
expected = [
|
|
'il_vs',
|
|
'dcl_output_position',
|
|
'end',
|
|
]
|
|
|
|
for fragment in expected:
|
|
if not fragment in disasm:
|
|
raise rdtest.TestFailureException(
|
|
"AMDIL ISA doesn't contain '{}' as expected: {}".format(fragment, disasm))
|
|
|
|
if 'RDNA (gfx1010)' not in isas:
|
|
raise rdtest.TestFailureException(
|
|
"RDNA (gfx1010) is not an available disassembly target. Are you missing plugins?")
|
|
|
|
disasm: str = self.controller.DisassembleShader(pipe.GetGraphicsPipelineObject(), refl, 'RDNA (gfx1010)')
|
|
|
|
expected = [
|
|
'asic(GFX10)',
|
|
'vgpr_count',
|
|
'wave_size',
|
|
's_endpgm',
|
|
]
|
|
|
|
for fragment in expected:
|
|
if not fragment in disasm:
|
|
raise rdtest.TestFailureException(
|
|
"RDNA ISA doesn't contain '{}' as expected: {}".format(fragment, disasm))
|
|
|
|
rdtest.log.success("AMD disassembly is as expected")
|
|
|
|
# For AMD we also expect live driver disassembly. Check that we get it
|
|
if not is_amd:
|
|
rdtest.log.print("Not testing live driver disassembly outside AMD")
|
|
else:
|
|
if 'AMD_shader_info' not in isas:
|
|
raise rdtest.TestFailureException(
|
|
"AMD_shader_info expected but not found. Check driver version and update to latest.")
|
|
|
|
disasm: str = self.controller.DisassembleShader(pipe.GetGraphicsPipelineObject(), refl, 'AMD_shader_info')
|
|
|
|
expected = [
|
|
'buffer_load',
|
|
's_endpgm',
|
|
]
|
|
|
|
for fragment in expected:
|
|
if not fragment in disasm:
|
|
raise rdtest.TestFailureException(
|
|
"AMD_shader_info ISA doesn't contain '{}' as expected: {}".format(fragment, disasm))
|
|
|
|
if 'KHR_pipeline_executable_properties' not in isas:
|
|
raise rdtest.TestFailureException(
|
|
"KHR_pipeline_executable_properties expected but not found. Check driver version and update to "
|
|
"latest.")
|
|
|
|
disasm: str = self.controller.DisassembleShader(pipe.GetGraphicsPipelineObject(), refl,
|
|
'KHR_pipeline_executable_properties')
|
|
|
|
expected = [
|
|
'buffer_load',
|
|
's_endpgm',
|
|
]
|
|
|
|
for fragment in expected:
|
|
if not fragment in disasm:
|
|
raise rdtest.TestFailureException(
|
|
"KHR_pipeline_executable_properties ISA doesn't contain '{}' as expected: {}".format(fragment,
|
|
disasm))
|
|
|
|
rdtest.log.success("Live driver disassembly is as expected")
|