mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-07-20 19:38:24 +00:00
Add apiname parameter to ISpecReader
This allows us to reuse the same ISpecReader implementation to parse different APIs (GL and GLES).
This commit is contained in:
parent
2e435f97bb
commit
7f9041417e
|
@ -77,10 +77,12 @@ namespace Bind.GL2
|
||||||
string overrides = Path.Combine(Settings.InputPath, Settings.OverridesFile);
|
string overrides = Path.Combine(Settings.InputPath, Settings.OverridesFile);
|
||||||
Type.GLTypes = SpecReader.ReadTypeMap(Path.Combine(Settings.InputPath, glTypemap));
|
Type.GLTypes = SpecReader.ReadTypeMap(Path.Combine(Settings.InputPath, glTypemap));
|
||||||
Type.CSTypes = SpecReader.ReadCSTypeMap(Path.Combine(Settings.InputPath, csTypemap));
|
Type.CSTypes = SpecReader.ReadCSTypeMap(Path.Combine(Settings.InputPath, csTypemap));
|
||||||
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums);
|
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, "gl");
|
||||||
SpecReader.ReadEnums(overrides, Enums);
|
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, "glcore");
|
||||||
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates);
|
SpecReader.ReadEnums(overrides, Enums, "");
|
||||||
SpecReader.ReadDelegates(overrides, Delegates);
|
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, "gl");
|
||||||
|
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, "glcore");
|
||||||
|
SpecReader.ReadDelegates(overrides, Delegates, "");
|
||||||
|
|
||||||
var enum_processor = new EnumProcessor(overrides);
|
var enum_processor = new EnumProcessor(overrides);
|
||||||
var func_processor = new FuncProcessor(overrides);
|
var func_processor = new FuncProcessor(overrides);
|
||||||
|
|
|
@ -12,8 +12,8 @@ namespace Bind
|
||||||
{
|
{
|
||||||
interface ISpecReader
|
interface ISpecReader
|
||||||
{
|
{
|
||||||
void ReadDelegates(string file, DelegateCollection delegates);
|
void ReadDelegates(string file, DelegateCollection delegates, string apiname);
|
||||||
void ReadEnums(string file, EnumCollection enums);
|
void ReadEnums(string file, EnumCollection enums, string apiname);
|
||||||
Dictionary<string, string> ReadTypeMap(string file);
|
Dictionary<string, string> ReadTypeMap(string file);
|
||||||
Dictionary<string, string> ReadCSTypeMap(string file);
|
Dictionary<string, string> ReadCSTypeMap(string file);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Xml.Linq;
|
||||||
using System.Xml.XPath;
|
using System.Xml.XPath;
|
||||||
using Bind.Structures;
|
using Bind.Structures;
|
||||||
|
|
||||||
|
@ -42,15 +43,21 @@ namespace Bind
|
||||||
{
|
{
|
||||||
#region ISpecReader Members
|
#region ISpecReader Members
|
||||||
|
|
||||||
public void ReadDelegates(string file, DelegateCollection delegates)
|
public void ReadDelegates(string file, DelegateCollection delegates, string apiname)
|
||||||
{
|
{
|
||||||
var specs = new XPathDocument(file);
|
var specs = new XPathDocument(file);
|
||||||
foreach (XPathNavigator nav in specs.CreateNavigator().Select("/signatures/delete"))
|
foreach (XPathNavigator nav in specs.CreateNavigator().Select(
|
||||||
|
!String.IsNullOrEmpty(apiname) ?
|
||||||
|
String.Format("/signatures/delete|/signatures/add/delete[@name='{0}']", apiname) :
|
||||||
|
String.Format("/signatures/delete|/signatures/add/delete")))
|
||||||
{
|
{
|
||||||
foreach (XPathNavigator node in nav.SelectChildren("function", String.Empty))
|
foreach (XPathNavigator node in nav.SelectChildren("function", String.Empty))
|
||||||
delegates.Remove(node.GetAttribute("name", String.Empty));
|
delegates.Remove(node.GetAttribute("name", String.Empty));
|
||||||
}
|
}
|
||||||
foreach (XPathNavigator nav in specs.CreateNavigator().Select("/signatures/add"))
|
foreach (XPathNavigator nav in specs.CreateNavigator().Select(
|
||||||
|
!String.IsNullOrEmpty(apiname) ?
|
||||||
|
String.Format("/signatures/add|/signatures/add/api[@name='{0}']", apiname) :
|
||||||
|
String.Format("/signatures/add|/signatures/add/api")))
|
||||||
{
|
{
|
||||||
Utilities.Merge(delegates, ReadDelegates(nav));
|
Utilities.Merge(delegates, ReadDelegates(nav));
|
||||||
}
|
}
|
||||||
|
@ -125,19 +132,25 @@ namespace Bind
|
||||||
return delegates;
|
return delegates;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReadEnums(string file, EnumCollection enums)
|
public void ReadEnums(string file, EnumCollection enums, string apiname)
|
||||||
{
|
{
|
||||||
// First, read all enum definitions from spec and override file.
|
// First, read all enum definitions from spec and override file.
|
||||||
// Afterwards, read all token/enum overrides from overrides file.
|
// Afterwards, read all token/enum overrides from overrides file.
|
||||||
// Every single enum is merged into
|
// Every single enum is merged into
|
||||||
|
|
||||||
var specs = new XPathDocument(file);
|
var specs = new XPathDocument(file);
|
||||||
foreach (XPathNavigator nav in specs.CreateNavigator().Select("/signatures/delete"))
|
foreach (XPathNavigator nav in specs.CreateNavigator().Select(
|
||||||
|
!String.IsNullOrEmpty(apiname) ?
|
||||||
|
String.Format("/signatures/delete|/signatures/delete/api[@name='{0}']", apiname) :
|
||||||
|
String.Format("/signatures/delete|/signatures/delete/api")))
|
||||||
{
|
{
|
||||||
foreach (XPathNavigator node in nav.SelectChildren("enum", String.Empty))
|
foreach (XPathNavigator node in nav.SelectChildren("enum", String.Empty))
|
||||||
enums.Remove(node.GetAttribute("name", String.Empty));
|
enums.Remove(node.GetAttribute("name", String.Empty));
|
||||||
}
|
}
|
||||||
foreach (XPathNavigator nav in specs.CreateNavigator().Select("/signatures/add"))
|
foreach (XPathNavigator nav in specs.CreateNavigator().Select(
|
||||||
|
!String.IsNullOrEmpty(apiname) ?
|
||||||
|
String.Format("/signatures/add|/signatures/add/api[@name='{0}']", apiname) :
|
||||||
|
String.Format("/signatures/add|/signatures/add/api")))
|
||||||
{
|
{
|
||||||
Utilities.Merge(enums, ReadEnums(nav));
|
Utilities.Merge(enums, ReadEnums(nav));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue