Browse Source

anv/entrypoints: Use an named tuple for params

This allows us to store a bit more detailed data per-param

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
tags/18.0-branchpoint
Jason Ekstrand 8 years ago
parent
commit
eac29f3a6d
1 changed files with 23 additions and 11 deletions
  1. 23
    11
      src/intel/vulkan/anv_entrypoints_gen.py

+ 23
- 11
src/intel/vulkan/anv_entrypoints_gen.py View File

import os import os
import xml.etree.cElementTree as et import xml.etree.cElementTree as et


from collections import OrderedDict
from collections import OrderedDict, namedtuple
from mako.template import Template from mako.template import Template


from anv_extensions import * from anv_extensions import *
#ifdef ${e.guard} #ifdef ${e.guard}
% endif % endif
% for layer in LAYERS: % for layer in LAYERS:
${e.return_type} ${e.prefixed_name(layer)}(${e.params});
${e.return_type} ${e.prefixed_name(layer)}(${e.decl_params()});
% endfor % endfor
% if e.guard is not None: % if e.guard is not None:
#endif // ${e.guard} #endif // ${e.guard}
% if e.guard is not None: % if e.guard is not None:
#ifdef ${e.guard} #ifdef ${e.guard}
% endif % endif
${e.return_type} ${e.prefixed_name(layer)}(${e.params}) __attribute__ ((weak));
${e.return_type} ${e.prefixed_name(layer)}(${e.decl_params()}) __attribute__ ((weak));
% if e.guard is not None: % if e.guard is not None:
#endif // ${e.guard} #endif // ${e.guard}
% endif % endif
return functools.reduce( return functools.reduce(
lambda h, c: (h * PRIME_FACTOR + ord(c)) & U32_MASK, name, 0) lambda h, c: (h * PRIME_FACTOR + ord(c)) & U32_MASK, name, 0)


EntrypointParam = namedtuple('EntrypointParam', 'type name decl')

class Entrypoint(object): class Entrypoint(object):
def __init__(self, name, return_type, params, guard = None): def __init__(self, name, return_type, params, guard = None):
self.name = name self.name = name
self.return_type = return_type self.return_type = return_type
self.params = ', '.join(params)
self.params = params
self.guard = guard self.guard = guard
self.enabled = False self.enabled = False
self.num = None self.num = None
assert self.name.startswith('vk') assert self.name.startswith('vk')
return prefix + '_' + self.name[2:] return prefix + '_' + self.name[2:]


def decl_params(self):
return ', '.join(p.decl for p in self.params)

def get_c_hash(self): def get_c_hash(self):
return cal_hash(self.name) return cal_hash(self.name)


for command in doc.findall('./commands/command'): for command in doc.findall('./commands/command'):
ret_type = command.find('./proto/type').text ret_type = command.find('./proto/type').text
fullname = command.find('./proto/name').text fullname = command.find('./proto/name').text
params = (''.join(p.itertext()) for p in command.findall('./param'))
params = [EntrypointParam(
type = p.find('./type').text,
name = p.find('./name').text,
decl = ''.join(p.itertext())
) for p in command.findall('./param')]
guard = entrypoints_to_defines.get(fullname) guard = entrypoints_to_defines.get(fullname)
# They really need to be unique # They really need to be unique
assert fullname not in entrypoints assert fullname not in entrypoints


# Manually add CreateDmaBufImageINTEL for which we don't have an extension # Manually add CreateDmaBufImageINTEL for which we don't have an extension
# defined. # defined.
entrypoints.append(Entrypoint('vkCreateDmaBufImageINTEL', 'VkResult',
['VkDevice device',
'const VkDmaBufImageCreateInfo* pCreateInfo',
'const VkAllocationCallbacks* pAllocator',
'VkDeviceMemory* pMem',
'VkImage* pImage']))
entrypoints.append(Entrypoint('vkCreateDmaBufImageINTEL', 'VkResult', [
EntrypointParam('VkDevice', 'device', 'VkDevice device'),
EntrypointParam('VkDmaBufImageCreateInfo', 'pCreateInfo',
'const VkDmaBufImageCreateInfo* pCreateInfo'),
EntrypointParam('VkAllocationCallbacks', 'pAllocator',
'const VkAllocationCallbacks* pAllocator'),
EntrypointParam('VkDeviceMemory', 'pMem', 'VkDeviceMemory* pMem'),
EntrypointParam('VkImage', 'pImage', 'VkImage* pImage')
]))


for num, e in enumerate(entrypoints): for num, e in enumerate(entrypoints):
e.num = num e.num = num

Loading…
Cancel
Save