diff --git a/.github/workflows/historical-registry-ci.yml b/.github/workflows/historical-registry-ci.yml index 0f7c42f..228140e 100644 --- a/.github/workflows/historical-registry-ci.yml +++ b/.github/workflows/historical-registry-ci.yml @@ -86,6 +86,10 @@ jobs: grep -F '#flag -DVK_USE_PLATFORM_XLIB_KHR' src/vulkan.v grep -F '$if vulkan_win32 ? {' src/vulkan.v + grep -E '^pub type PFN_vkCmdSetFragmentShadingRateKHR = fn ?\(.*const_combinerOps &FragmentShadingRateCombinerOpKHR' \ + src/vulkan.v + grep -E '^pub type PFN_vkCmdSetFragmentShadingRateEnumNV = fn ?\(.*const_combinerOps &FragmentShadingRateCombinerOpKHR' \ + src/vulkan.v grep -F 'pub type StdVideoH264ScalingListsScalingList4x4Array' \ src/vulkan_video.v if grep -E '^[[:space:]]+[A-Z][A-Za-z0-9_]*[[:space:]]+\[' \ diff --git a/src/vgenerator.py b/src/vgenerator.py index 36e3df9..0babea9 100644 --- a/src/vgenerator.py +++ b/src/vgenerator.py @@ -1398,7 +1398,7 @@ def get_member_comment(self, opt, noauto): # NOTE Anton: the oiginal method comes from vulkandocs/scripts/generator.py # This handles one function parameter and usually returns the paramdecl string. # Parameter comment is returned as a tuple (paramdecl, comment) if do_comment=True and comment_inline=False - def makeVParamDecl(self, typeName, param, aligncol, do_c_func_params=False, do_c_to_v_func_call_params=False, do_struct_members=False, do_base_type=False, keep_vk_member_name=False, do_array_voidptr=False, do_comment=False, comment_inline=False): + def makeVParamDecl(self, typeName, param, aligncol, do_c_func_params=False, do_c_to_v_func_call_params=False, do_struct_members=False, do_base_type=False, keep_vk_member_name=False, do_array_voidptr=False, do_comment=False, comment_inline=False, do_function_pointer_param=False): """Return a string which is an indented, formatted declaration for a `` or `` block (e.g. function parameter or structure/union member). @@ -1498,6 +1498,10 @@ def makeVParamDecl(self, typeName, param, aligncol, do_c_func_params=False, do_c v_type = v_type[:last_index_of_arr] + '[' + self.removeVk(array_match.group(1).lower().replace('[', '').replace(']', '')) + ']' + v_type[last_index_of_arr:] if do_array_voidptr: v_type = 'voidptr' + elif do_function_pointer_param: + # C array parameters decay to pointers. V3 cannot lower a + # fixed array parameter inside a function-pointer typedef. + v_type = '&' + v_type[v_type.find(']') + 1:] # Vulkan Video exposes several PascalCase C fields whose types are # inline fixed arrays. V3 parses `FieldName [N]T` as an embedded @@ -1995,7 +1999,7 @@ def makeVDecls(self, cmd): if n > 0: v_pub_type_pfn_param_names = '(' for p in params: - cur_type = self.makeVParamDecl(v_name, p, self.genOpts.alignFuncParam, do_c_func_params=True, do_c_to_v_func_call_params=False, do_struct_members=False, do_base_type=False, do_array_voidptr=False, keep_vk_member_name=False).lstrip() + cur_type = self.makeVParamDecl(v_name, p, self.genOpts.alignFuncParam, do_c_func_params=True, do_c_to_v_func_call_params=False, do_struct_members=False, do_base_type=False, do_array_voidptr=False, keep_vk_member_name=False, do_function_pointer_param=True).lstrip() v_pub_type_pfn_param_names += '{}, '.format(cur_type) v_pub_type_pfn_param_names = v_pub_type_pfn_param_names.rstrip(', ') v_pub_type_pfn_param_names += ')'