Commit Graph
1260 Commits
Author SHA1 Message Date
baldurk 7e7bbf58a8 Reflect multiple entry points & ray properties from DXIL shaders 2024-04-26 13:55:19 +01:00
baldurk 476fed06d6 Add function to enumerate the entry points in a given shader 2024-04-26 13:55:19 +01:00
baldurk 89bea3ea8b Add new shader enums for RT shader stages 2024-04-26 13:55:18 +01:00
Jake Turner 5366ce7b4a RD DXIL Disassembly: ignore "undef" parameters in "dx.op" functions 2024-04-26 08:18:20 +01:00
Jake Turner 756a980d96 RD DXIL Disassembly: ignore first getelemenptr index if it is zero
Before
GroupShared float* _30 = shared_pos[0] + _29;

After
GroupShared float* _30 = shared_pos[_29];
2024-04-26 06:18:16 +01:00
Jake Turner b8f77d8393 RD DXIL Disassembly: EntryPoint Resources output
Includes EntryPoint Resources parsing
Includes handling column index for inputs/outputs access
2024-04-25 18:42:20 +01:00
Jake Turner b8621e81d5 Add SignatureElement constants used when parsing DXIL Signatures 2024-04-24 13:37:51 +01:00
Jake Turner 6a329ba5b3 RD DXIL Disassembly: display DX parameter names as inline comment 2024-04-24 09:33:21 +01:00
Jake Turner ec9517c43a RD DXIL Disassembly: show dx parameter names on dx.op function calls
The parameter names extracted from the dx function signatures
2024-04-24 07:49:06 +01:00
Jake Turner 2b59d21fd9 RD DXIL Disassembly: change getelementptr output
Convert the DXIL addrspace value into string
Hand de-mangle pointer name

DXC:
%3 = getelementptr [6 x float], [6 x float] addrspace(3)* @"\01?s_x@@3@$$A.1dim", i32 0, i32 %9

RD:
GroupShared float* _3 = s_x[0] + _9;
2024-04-24 07:01:31 +01:00
Jake Turner 601dc58a52 RD DXIL Disassembly: change "br" output
if (_32) goto _132 else goto _33;

or

goto _132;
2024-04-23 13:33:16 +01:00
Jake Turner 007f4d46f4 RD DXIL Disassembly: change "load" and "store" output
load
  float _49 = *_48; // align 4

store
  *_30 = _27; // align 4
2024-04-23 13:33:10 +01:00
Jake Turner 248a2383ed RD DXIL Disassembly: convert "select" to C-style ? operator 2024-04-23 11:23:24 +01:00
Jake Turner bdc0a0bc2d RD DXIL Disassembly: explicit handling for specific FP comparisons
FOrdFalse
FOrdTrue
FOrd
FUnord
2024-04-23 11:23:20 +01:00
Jake Turner 9bb9c4ba6e RD DXIL Disassembly: use C-style operators and function names
Use C-style operators and function names as much as possible to replace comparison, arithmetic, casting instructions
2024-04-23 10:28:01 +01:00
Jake Turner 0f2c7490ce RD DXIL Disassembly: display function name instead of full signature
Divide up "funcSigs" array into "name" and "signature" arrays
2024-04-23 07:10:14 +01:00
Jake Turner 53e76cfa86 RD DXIL Disassembly: do not show Op flags string 2024-04-23 07:10:08 +01:00
Jake Turner f27659e902 RD DXIL disassebmly: do not show types on parameters 2024-04-23 07:10:03 +01:00
Jake Turner a9ead1dc0a RD DXIL disassebmly: display C style type names
i1 -> bool
i8 -> int8
i16 -> short
i32 -> int
i64 -> long
2024-04-23 07:09:56 +01:00
Jake Turner a8ccb73de8 First version of RenderDoc DXIL Disassembly output
Shows entry point inputs & outputs
Decodes "dx.op.loadInput" and "dx.op.StoreOutput" to show the input/output name
Change identifier prefix to "_" instead of "%"
Print floats in more natural format using %#g
Print type before assignments
2024-04-22 17:20:26 +01:00
baldurk 86ce562594 Use STAT dxil module for reflection where possible/necessary
* The STAT module has some metadata unstripped which is useful for type
  annotations. It's better than plain stripped DXIL but not as good as ILDB.
2024-04-22 16:21:51 +01:00
baldurk edcc7f7bbf Fix a couple of differences from dxc disassembly 2024-04-22 16:21:51 +01:00
Jake Turner 7c656e4881 Add DisassemblyAddNewLine() to make code simpler
Also keeps the current instruction line updated via new member
int m_DisassemblyInstructionLine;
2024-04-22 14:47:26 +01:00
baldurk c244c1fdda Don't process unused bindings when debugging vulkan shaders
* These will not be in the reflection data, so we can't try to process them and
  fill out their variables as there won't be anything to map to.
* Signature elements which are 'unused' by not being referenced but are present
  in a pre-1.4 SPIR-V module will be considered used still.
2024-04-22 13:01:13 +01:00
baldurk f03d73108f Add sorting offsets for arrays in SPDB source mapping data 2024-04-22 13:01:12 +01:00
baldurk 124218c6a3 Fix typo cutting off some of DXIL disassembly 2024-04-22 13:01:12 +01:00
Jake Turner 5cfff389fe SPIRV debug mapping updates to handle multiple overlapping mappings
Capture the mappings into a type usage tree
Update elements of the tree as overlapping mappings are encountered, sub-elements of a previously mapped variable i.e. single component of a vector, single array element, member in a structure.
After processing all mappings convert the finalized type usage tree into source variable mappings.
2024-04-22 12:52:12 +01:00
Jake Turner 6532eb65f0 SPIRV debug mapping change the superseding detection
Loop over the scope downwards (parent -> child) then inside that loop iterate upwards from the current scope (child -> parent) to detect mappings which might be superseded
2024-04-22 12:52:12 +01:00
Jake Turner cf66943092 SPIRV debugging: store the arrayDimensions for DebugTypeArray 2024-04-22 12:52:12 +01:00
Jake Turner d785eaeb67 Update struct member and array element names of SPIRV constants
array names and struct member names are not set when constants are created (struct decoration data is not available)
2024-04-22 12:52:12 +01:00
Jake Turner f494bb3cb9 Handle NULL signatures in DXIL EntryPoint 2024-04-22 12:08:31 +01:00
Jake Turner c2100ed816 Add DXIL 1.8 opcodes to funcSigs
Generated using DirectShaderCompile python file "utils/hct/hctdb.py"

    for inst in db.instr:
        out = inst.name
        out += "("
        for i in range(2,len(inst.ops)):
          if i > 2:
            out += ","
          op = inst.ops[i]
          out += op.name

        out += ")"
        print(out)
2024-04-22 11:47:32 +01:00
Jake Turner 218e52d0bb Move files to the 3rdparty/glslang filter in renderdoc_spirv vcproj 2024-04-22 11:46:53 +01:00
Jake Turner 08ed70e648 Added char DXIL::dxilIdentifier to use in the disassembly output
Before (DXC style)
%46 = fcmp fast olt float %45, 1.000000e-06

After (RD style)
_46 = fcmp fast olt float _45, 1.00000e-06;
2024-04-22 06:41:07 +01:00
Jake Turner 5cc7c3f417 Moved dxcStyle formatting parameter to static DXIL::dxcStyleFormatting
Disable dxcStyleFormatting when making RD disassembly
Change float printing to use "%#g" when dxcStyleFormatting is disabled

Before (DXC style)
  %7 = fmul fast float %4, 2.000000e+00
  %14 = fcmp fast olt float %13, 1.000000e-06

After (RD style)
  %7 = fmul fast float %4, 2.00000;
  %14 = fcmp fast olt float %13, 1.00000e-06;
2024-04-20 07:12:50 +01:00
baldurk bdc06af0de Add reflection of acceleration structures in DXIL & new descriptor type 2024-04-19 10:04:26 +01:00
Jake Turner 07ce326ce3 Added DXIL EntryPoint meta-data parsing 2024-04-18 16:29:00 +01:00
Jake Turner 22b0d53c42 Add DXIL enums for MatrixOrientation, SamplerFeedbackType 2024-04-18 16:12:05 +01:00
Jake Turner 9b88a7e933 Add extra DXIL struct member annotations
FieldWidth
VectorSize
SemanticName
2024-04-18 16:12:05 +01:00
Jake Turner 92a060ee70 Divide DXIL disassembly into two passes
First pass to settle the IDs common between disassembly styles
Second pass to display the disassembly
Divide existing MakeDXCDisassemblyString() method into helper methods to be shared
2024-04-18 16:12:05 +01:00
Jake Turner 3db925fd7a Add option for DXIL toString() helpers to use dxcStyle (default) 2024-04-18 16:03:58 +01:00
Jake Turner 62d3cd5f43 Ground work for RenderDoc specific DXIL disassembly view
Currently not exposed to the UI and code uses the existing DXC compatibile DXIL disassembly

Add bool parameter to DXBC::GetDisassembly()
Add bool parameter to DXIL::GetDisassembly()
Add void DXIL::MakeDXCDisassemblyString()
Add void DXIL::MakeRDDisassemblyString()
2024-04-18 15:46:39 +01:00
baldurk 2f9f3cd6a0 Fix GL reflection unit tests
* GL no longer reflects out fixed bindings and relies purely on queried
  uniforms.
2024-04-10 21:28:48 +01:00
baldurk ca144ab818 Remove magic specialisation constant and push constant set numbers 2024-04-10 18:58:53 +01:00
baldurk 6194d5a5a0 Rename resType to textureType in ShaderResource to be more accurate 2024-04-10 18:58:52 +01:00
baldurk 205ed0e6fa Remove old shader bindpoint mapping handling entirely 2024-04-10 18:58:52 +01:00
baldurk 2c170df588 Fetch D3D12 dynamic feedback directly as descriptor accesses 2024-04-10 18:58:51 +01:00
baldurk f00ab9dee8 Store descriptor type directly in shader resources for shader reflection 2024-04-10 18:58:51 +01:00
baldurk 2bbe1a8cd9 Update shader viewer and debugging with new reporting for shader binds
* This shifts from reporting from the old style bindset/bind to the new system
  of only referencing by shader interface and index (independent of binding
  model).
* The vulkan shader debugger re-uses the replay interface to cache descriptor
  access and descriptor contents in a fashion friendly to interface-index
  lookup.
2024-04-10 18:58:51 +01:00
baldurk bbbfb5f3d2 Add fixed bindpoint information to shader reflection data
* Previously this was provided by the ShaderBindpointMapping, but since we plan
  to remove that we add the information here. These will be purely for
  informational purposes and will not be used to look up bound resources etc.
  They exist for display only, or for API-specific interpretation if e.g. the
  bindpoint is known ahead of time it can be identified here without having to
  jump through hoops to get which descriptor a given bind accesses and get the
  register number for that descriptor.
* On OpenGL this information will not be present because bindings are mutable
  (even if they are declared in the shader). The only way to identify a
  particular binding by register will be with those hoops
2024-04-10 18:58:50 +01:00