mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-12-14 04:34:23 +08:00
923a41ac99
This makes it easy to link to a specific Vulkan feature from the docs. Useful for the Zink docs. Acked-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21813>
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
# formatting.py
|
|
# Sphinx extension providing formatting for Gallium-specific data
|
|
# (c) Corbin Simpson 2010
|
|
# Public domain to the extent permitted; contact author for special licensing
|
|
|
|
import docutils.nodes
|
|
import sphinx.addnodes
|
|
|
|
from sphinx.util.nodes import split_explicit_title
|
|
from docutils import nodes, utils
|
|
|
|
def parse_opcode(env, sig, signode):
|
|
opcode, desc = sig.split("-", 1)
|
|
opcode = opcode.strip().upper()
|
|
desc = " (%s)" % desc.strip()
|
|
signode += sphinx.addnodes.desc_name(opcode, opcode)
|
|
signode += sphinx.addnodes.desc_annotation(desc, desc)
|
|
return opcode
|
|
|
|
|
|
def ext_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
|
text = utils.unescape(text)
|
|
has_explicit_title, title, ext = split_explicit_title(text)
|
|
|
|
parts = ext.split('_', 2)
|
|
if parts[0] == 'VK':
|
|
full_url = f'https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/{ext}.html'
|
|
elif parts[0] == 'GL':
|
|
full_url = f'https://registry.khronos.org/OpenGL/extensions/{parts[1]}/{parts[1]}_{parts[2]}.txt'
|
|
else:
|
|
raise Exception(f'Unexpected API: {parts[0]}')
|
|
|
|
pnode = nodes.reference(title, title, internal=False, refuri=full_url)
|
|
return [pnode], []
|
|
|
|
def vkfeat_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
|
text = utils.unescape(text)
|
|
has_explicit_title, title, ext = split_explicit_title(text)
|
|
|
|
full_url = f'https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-{ext}'
|
|
|
|
pnode = nodes.reference(title, title, internal=False, refuri=full_url)
|
|
return [pnode], []
|
|
|
|
def setup(app):
|
|
app.add_object_type("opcode", "opcode", "%s (TGSI opcode)",
|
|
parse_opcode)
|
|
app.add_role('ext', ext_role)
|
|
app.add_role('vk-feat', vkfeat_role)
|