xref: /aosp_15_r20/external/mesa3d/docs/_exts/formatting.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker# formatting.py
2*61046927SAndroid Build Coastguard Worker# Sphinx extension providing formatting for Gallium-specific data
3*61046927SAndroid Build Coastguard Worker# (c) Corbin Simpson 2010
4*61046927SAndroid Build Coastguard Worker# Public domain to the extent permitted; contact author for special licensing
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Workerimport docutils.nodes
7*61046927SAndroid Build Coastguard Workerimport sphinx.addnodes
8*61046927SAndroid Build Coastguard Worker
9*61046927SAndroid Build Coastguard Workerfrom sphinx.util.nodes import split_explicit_title
10*61046927SAndroid Build Coastguard Workerfrom docutils import nodes, utils
11*61046927SAndroid Build Coastguard Worker
12*61046927SAndroid Build Coastguard Workerdef parse_opcode(env, sig, signode):
13*61046927SAndroid Build Coastguard Worker    opcode, desc = sig.split("-", 1)
14*61046927SAndroid Build Coastguard Worker    opcode = opcode.strip().upper()
15*61046927SAndroid Build Coastguard Worker    desc = " (%s)" % desc.strip()
16*61046927SAndroid Build Coastguard Worker    signode += sphinx.addnodes.desc_name(opcode, opcode)
17*61046927SAndroid Build Coastguard Worker    signode += sphinx.addnodes.desc_annotation(desc, desc)
18*61046927SAndroid Build Coastguard Worker    return opcode
19*61046927SAndroid Build Coastguard Worker
20*61046927SAndroid Build Coastguard Worker
21*61046927SAndroid Build Coastguard Workerdef ext_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
22*61046927SAndroid Build Coastguard Worker    text = utils.unescape(text)
23*61046927SAndroid Build Coastguard Worker    has_explicit_title, title, ext = split_explicit_title(text)
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker    parts = ext.split('_', 2)
26*61046927SAndroid Build Coastguard Worker    if parts[0] == 'VK':
27*61046927SAndroid Build Coastguard Worker        full_url = f'https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/{ext}.html'
28*61046927SAndroid Build Coastguard Worker    elif parts[0] == 'GL':
29*61046927SAndroid Build Coastguard Worker        full_url = f'https://registry.khronos.org/OpenGL/extensions/{parts[1]}/{parts[1]}_{parts[2]}.txt'
30*61046927SAndroid Build Coastguard Worker    else:
31*61046927SAndroid Build Coastguard Worker        raise Exception(f'Unexpected API: {parts[0]}')
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard Worker    pnode = nodes.reference(title, title, internal=False, refuri=full_url)
34*61046927SAndroid Build Coastguard Worker    return [pnode], []
35*61046927SAndroid Build Coastguard Worker
36*61046927SAndroid Build Coastguard Workerdef vkfeat_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
37*61046927SAndroid Build Coastguard Worker    text = utils.unescape(text)
38*61046927SAndroid Build Coastguard Worker    has_explicit_title, title, ext = split_explicit_title(text)
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker    full_url = f'https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-{ext}'
41*61046927SAndroid Build Coastguard Worker
42*61046927SAndroid Build Coastguard Worker    pnode = nodes.reference(title, title, internal=False, refuri=full_url)
43*61046927SAndroid Build Coastguard Worker    return [pnode], []
44*61046927SAndroid Build Coastguard Worker
45*61046927SAndroid Build Coastguard Workerdef setup(app):
46*61046927SAndroid Build Coastguard Worker    app.add_object_type("opcode", "opcode", "%s (TGSI opcode)",
47*61046927SAndroid Build Coastguard Worker        parse_opcode)
48*61046927SAndroid Build Coastguard Worker    app.add_role('ext', ext_role)
49*61046927SAndroid Build Coastguard Worker    app.add_role('vk-feat', vkfeat_role)
50