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