Zebediah Figura : opencl: Factor out parse_feature().
Alexandre Julliard
julliard at winehq.org
Fri Feb 4 16:08:34 CST 2022
Module: wine
Branch: master
Commit: 9fbe2f5767e4a0c40a4f9194b17f509912f577b2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=9fbe2f5767e4a0c40a4f9194b17f509912f577b2
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Thu Feb 3 15:08:15 2022 -0600
opencl: Factor out parse_feature().
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/opencl/make_opencl | 53 ++++++++++++++++++++++++++++---------------------
1 file changed, 30 insertions(+), 23 deletions(-)
diff --git a/dlls/opencl/make_opencl b/dlls/opencl/make_opencl
index a93946b2d2b..c2c4d7f6e63 100755
--- a/dlls/opencl/make_opencl
+++ b/dlls/opencl/make_opencl
@@ -369,13 +369,34 @@ sub generate_struct($)
return $ret;
}
+my %all_functions;
+my %all_enums;
+my %all_types;
+
+sub parse_feature($)
+{
+ my $feature = shift;
+
+ foreach my $cmd ($feature->findnodes("./require/command"))
+ {
+ $core_functions{$cmd->{name}} = $all_functions{$cmd->{name}};
+ }
+ foreach my $enum ($feature->findnodes("./require/enum"))
+ {
+ $header_enums{$enum->{name}} = $all_enums{$enum->{name}};
+ }
+ foreach my $type ($feature->findnodes("./require/type"))
+ {
+ next unless $all_types{$type->{name}};
+ push @header_types, $type->{name} unless $header_types{$type->{name}};
+ $header_types{$type->{name}} = $all_types{$type->{name}};
+ }
+}
+
sub parse_file($)
{
my $file = shift;
my $xml = XML::LibXML->load_xml( location => $file );
- my %functions;
- my %enums;
- my %types;
# save all functions
foreach my $command ($xml->findnodes("/registry/commands/command"))
@@ -384,7 +405,7 @@ sub parse_file($)
my $name = @{$command->findnodes("./proto/name")}[0];
$proto->removeChild( $name );
my @params = $command->findnodes("./param");
- $functions{$name->textContent()} = [ $proto, \@params ];
+ $all_functions{$name->textContent()} = [ $proto, \@params ];
}
# save all enums
@@ -392,11 +413,11 @@ sub parse_file($)
{
if (defined $enum->{value})
{
- $enums{$enum->{name}} = $enum->{value};
+ $all_enums{$enum->{name}} = $enum->{value};
}
else
{
- $enums{$enum->{name}} = "(1 << " . $enum->{bitpos} . ")";
+ $all_enums{$enum->{name}} = "(1 << " . $enum->{bitpos} . ")";
}
}
@@ -407,7 +428,7 @@ sub parse_file($)
{
my $name = @{$type->findnodes("./name")}[0];
$name = $name->textContent;
- $types{$name} = $type;
+ $all_types{$name} = $type;
my $basetype = @{$type->findnodes("./type")}[0];
if ($type->textContent() =~ /[[*]/)
@@ -426,28 +447,14 @@ sub parse_file($)
elsif ($type->{category} eq "struct")
{
my $name = $type->{name};
- $types{$name} = $type;
+ $all_types{$name} = $type;
}
}
# generate core functions
foreach my $feature ($xml->findnodes("/registry/feature"))
{
- next unless defined $core_categories{$feature->{name}};
- foreach my $cmd ($feature->findnodes("./require/command"))
- {
- $core_functions{$cmd->{name}} = $functions{$cmd->{name}};
- }
- foreach my $enum ($feature->findnodes("./require/enum"))
- {
- $header_enums{$enum->{name}} = $enums{$enum->{name}};
- }
- foreach my $type ($feature->findnodes("./require/type"))
- {
- next unless $types{$type->{name}};
- push @header_types, $type->{name} unless $header_types{$type->{name}};
- $header_types{$type->{name}} = $types{$type->{name}};
- }
+ parse_feature($feature) if defined $core_categories{$feature->{name}};
}
# generate extension list
More information about the wine-cvs
mailing list