| qsb_disasm.py |
Readable renderings of the binary shader payloads, by way of external tools.
Two modes. DISASM disassembles: SPIR-V through spirv-dis, DXBC through
fxc /dumpbin, DXIL through dxc -dumpbin and metallib through metal-objdump - the
same tools qsb itself invokes to produce the bytecode in the first place, only
pointed the other way. CROSS goes further and only for SPIR-V, decompiling the
module back to Vulkan GLSL with spirv-cross.
The metallib spec is the one nobody has been able to try: see the comment on it.
Nothing here is required: when a tool is missing the caller gets a ToolOutput
with 'error' set and can go on showing the hex dump.
Stdlib only, like qsb_reader: this module knows nothing about the UI.
|
11745 |
- |
| qsb_gerrit.py |
Finding the .qsb files a Gerrit change adds or changes.
Gerrit's public REST API is enough, and it is read straight over HTTP: the change
is never fetched into the local repository, so nothing is cherry-picked, applied,
or left behind afterwards. That also means the change need not belong to the
repository qsb_inspect was launched from - or to any repository, since the packs
arrive as bytes and the reader wants nothing else.
No authentication, so this reaches public changes only; a private or WIP one
answers 404 like a change that does not exist. Only the latest patch set is
looked at.
Standard library only, like qsb_git, whose ChangedFile this reuses so that the
change view can show either kind of change without caring which it has.
|
7187 |
- |
| qsb_git.py |
Finding the .qsb files a git commit adds or changes.
Nothing here needs the commit to be checked out: the packs are read from the
commit's own blobs, which is the only way to be sure of showing the after-patch
content. The file in the working tree matches only when no later commit touched
it, so it cannot be relied on.
Standard library only; git is invoked as a subprocess.
|
4838 |
- |
| qsb_inspect.py |
Interactive inspector for Qt shader pack (.qsb) files.
Shows everything 'qsb -d' dumps, but navigable: an overview, a tree of the
reflection info, and a per-shader view with the payload rendered as highlighted
source, as a hex dump, or - for the bytecode ones - through an external tool, as
disassembly or as the Vulkan GLSL a SPIR-V module decompiles to. Parsing is done
by qsb_reader (pure Python, no Qt).
python qsb_inspect.py path/to/shader.qsb
|
40165 |
- |
| qsb_reader.py |
Pure-Python reader for Qt shader pack (.qsb) files.
Standard library only - no Qt, no third-party modules. Mirrors
QShader::fromSerialized() (qtbase/src/gui/rhi/qshader.cpp) and
QShaderDescriptionPrivate::loadFromStream() (qshaderdescription.cpp).
A .qsb file is qCompress()'d data: a 4-byte big-endian uncompressed size
followed by a zlib stream. Inside is a QDataStream at version Qt_5_10,
big endian, using only int32/uint32/uint8/QByteArray/QString.
The format is Qt private API. QSB_VERSION is read from the stream, so files
written by a newer Qt than this reader knows about are rejected with a clear
message rather than silently misparsed.
|
45842 |
- |