Parse Khronos metadata (primarily for SupportedApiProfileAttributes and GL/CL groups) (#2008)

* Initial work on Khronos metadata parsing

* Record group usages too, and maybe fix CI?

* Apply suggestions from code review

* Don't conflate 'either one is implied' with 'both are implied'
This commit is contained in:
Dylan Perks 2024-04-03 17:15:42 -05:00 коммит произвёл GitHub
Родитель fa01df21e5
Коммит 46117387b9
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
54 изменённых файлов: 177454 добавлений и 153 удалений

Просмотреть файл

@ -22,6 +22,7 @@ insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license.
###############################################################################
# Set file behavior to:
@ -68,17 +69,14 @@ dotnet_naming_rule.parameters_should_be_camel_case.severity = suggestion
dotnet_naming_rule.parameters_should_be_camel_case.style = camel_case
dotnet_naming_rule.parameters_should_be_camel_case.symbols = parameters
dotnet_naming_rule.private_and_internal_static_fields_should_be_camel_case_prefixed_with_s_and_underscore.severity = suggestion
dotnet_naming_rule.private_and_internal_static_fields_should_be_camel_case_prefixed_with_s_and_underscore.style = camel_case_prefixed_with_s_and_underscore
dotnet_naming_rule.private_and_internal_static_fields_should_be_camel_case_prefixed_with_s_and_underscore.symbols = private_and_internal_static_fields
dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.severity = suggestion
dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.style = camel_case_prefixed_with_underscore
dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.symbols = private_and_internal_fields
dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.symbols = private_fields
dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.symbols = public_and_protected_declarations
dotnet_naming_symbols.public_and_protected_declarations.applicable_kinds = method, field, event, property
dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.style = pascal_case
@ -98,7 +96,6 @@ dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.symbols
# pascal case prefixed with I
# pascal case prefixed with T
###############################################################################
[*.cs]
dotnet_naming_style.camel_case.capitalization = camel_case
dotnet_naming_style.camel_case_prefixed_with_s_and_underscore.capitalization = camel_case
@ -129,10 +126,11 @@ dotnet_naming_style.pascal_case_prefixed_with_t.required_prefix = T
# static readonly declarations
# type parameters
###############################################################################
[*.cs]
dotnet_naming_symbols.async_members.required_modifiers = async
dotnet_naming_symbols.async_members.applicable_kinds = method
dotnet_naming_symbols.const_declarations.required_modifiers = const
dotnet_naming_symbols.const_declarations.applicable_kinds = method
dotnet_naming_symbols.interfaces.applicable_kinds = interface
@ -145,9 +143,14 @@ dotnet_naming_symbols.private_and_internal_static_fields.applicable_accessibilit
dotnet_naming_symbols.private_and_internal_static_fields.applicable_kinds = field
dotnet_naming_symbols.private_and_internal_static_fields.required_modifiers = static
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.public_and_protected_declarations.applicable_accessibilities = public, protected
dotnet_naming_symbols.static_readonly_declarations.required_modifiers = static, readonly
dotnet_naming_symbols.static_readonly_declarations.applicable_kinds = field
dotnet_naming_symbols.static_readonly_declarations.applicable_accessibilities = public, protected
dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter
@ -156,7 +159,6 @@ dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter
# do not separate import directives into groups, and
# sort system directives first
###############################################################################
[*.cs]
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = true
@ -187,7 +189,6 @@ dotnet_sort_system_directives_first = true
# suggest readonly fields, and
# suggest specifying accessibility modifiers
###############################################################################
[*.cs]
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
@ -222,7 +223,6 @@ dotnet_style_require_accessibility_modifiers = always:suggestion
# Set dotnet style options to:
# suggest removing all unused parameters
###############################################################################
[*.cs]
dotnet_code_quality_unused_parameters = all:suggestion
###############################################################################
@ -234,7 +234,6 @@ dotnet_code_quality_unused_parameters = all:suggestion
# indent labels one less than the current, and
# indent switch labels
###############################################################################
[*.cs]
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
@ -252,7 +251,6 @@ csharp_indent_switch_labels = true
# insert a new-line before all open braces except anonymous methods, anonymous types, lambdas, and object collections and
# insert a new-line within query expression clauses
###############################################################################
[*.cs]
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
@ -269,7 +267,6 @@ csharp_new_line_within_query_expression_clauses = true
# preserve single-line blocks, and
# not preserve single-line statements
###############################################################################
[*.cs]
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = false
@ -298,7 +295,6 @@ csharp_preserve_single_line_statements = false
# remove any space between parentheses, and
# remove any space between square brackets
###############################################################################
[*.cs]
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
@ -307,7 +303,7 @@ csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = do_not_ignore
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
@ -350,7 +346,6 @@ csharp_space_between_square_brackets = false
# suggest var when the type is not apparent, and
# suggest var when the type is apparent
###############################################################################
[*.cs]
csharp_prefer_braces = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
@ -381,7 +376,18 @@ csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_elsewhere = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting = false
resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting = false
resharper_loop_can_be_converted_to_query_highlighting = false
resharper_loop_can_be_partly_converted_to_query_highlighting = false
resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting = none
resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting = none
resharper_loop_can_be_converted_to_query_highlighting = none
resharper_loop_can_be_partly_converted_to_query_highlighting = none
resharper_identifier_typo_highlighting = none
resharper_string_literal_typo_highlighting = none
resharper_comment_typo_highlighting = true
# Verify settings
[*.{received,verified}.{txt,xml,json}]
indent_size = unset
indent_style = unset
insert_final_newline = false
tab_width = unset
trim_trailing_whitespace = false

7
.gitattributes поставляемый
Просмотреть файл

@ -52,4 +52,9 @@
*.zip binary
*.7z binary
*.ttf binary
*.stout binary
*.stout binary
# Verify
*.verified.txt text eol=lf working-tree-encoding=UTF-8
*.verified.xml text eol=lf working-tree-encoding=UTF-8
*.verified.json text eol=lf working-tree-encoding=UTF-8

9
.gitignore поставляемый
Просмотреть файл

@ -222,7 +222,7 @@ ClientBin/
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
@ -318,7 +318,7 @@ __pycache__/
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
@ -327,7 +327,7 @@ ASALocalRun/
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
# MFractors (Xamarin productivity tool) working folder
.mfractor/
@ -486,3 +486,6 @@ src/Website/Silk.NET.Statiq/cache
**/*.stdownload
**/.DS_Store
# Verify
*.received.*

Просмотреть файл

@ -18,7 +18,7 @@
<!-- Package versions for package references across all projects -->
<ItemGroup>
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Update="NUnit" Version="3.14.0" />
<PackageReference Update="NUnit" Version="4.1.0" />
<PackageReference Update="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>

Просмотреть файл

@ -12,6 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
Directory.Build.targets = Directory.Build.targets
LICENSE.md = LICENSE.md
generator.json = generator.json
Silk.NET.sln.DotSettings = Silk.NET.sln.DotSettings
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{9DB0EA3E-7216-4F9C-98F5-8A7483E9F083}"

13
Silk.NET.sln.DotSettings Normal file
Просмотреть файл

@ -0,0 +1,13 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CL/@EntryIndexedValue">CL</s:String>
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/EnableEditorConfigSupport/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/EnableStyleCopSupport/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/ShowEditorConfigStatusBarIndicator/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Housekeeping/FeatureSuggestion/FeatureSuggestionManager/DisabledSuggesters/=EditorConfigFeatureSuggester/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=glcompatibility/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=glcore/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Khronos/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=MSFT/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=vulkansc/@EntryIndexedValue">True</s:Boolean>
</wpf:ResourceDictionary>

Просмотреть файл

@ -77,8 +77,7 @@
{
"Name": "gl",
"SourceSubdirectory": "glcompat",
"BakedOutputSubdirectory": "gl",
"MaxVersion": "3.2"
"BakedOutputSubdirectory": "gl"
},
{
"Name": "glcore",

Просмотреть файл

@ -0,0 +1,21 @@
namespace Silk.NET.Core;
/// <summary>
/// The process must be 64-bit for this symbol to be used.
/// </summary>
[AttributeUsage(
AttributeTargets.Assembly
| AttributeTargets.Class
| AttributeTargets.Constructor
| AttributeTargets.Enum
| AttributeTargets.Event
| AttributeTargets.Field
| AttributeTargets.Interface
| AttributeTargets.Method
| AttributeTargets.Module
| AttributeTargets.Property
| AttributeTargets.Struct,
AllowMultiple = true,
Inherited = false
)]
public class Requires64BitAttribute : Attribute;

Просмотреть файл

@ -4,6 +4,7 @@
/// Indicates that the annotated API is supported using a specific API profile.
/// </summary>
/// <param name="profile">The API profile supported.</param>
/// <param name="apiSets">The API sets in which the API is supported in this profile.</param>
[AttributeUsage(
AttributeTargets.Assembly
| AttributeTargets.Class
@ -19,7 +20,7 @@
AllowMultiple = true,
Inherited = false
)]
public class SupportedApiProfileAttribute(string profile) : Attribute
public class SupportedApiProfileAttribute(string profile, string[] apiSets) : Attribute
{
/// <summary>
/// The API profile supported e.g. gl, glcore, gles2, vulkan, vulkansc, etc.
@ -27,17 +28,53 @@ public class SupportedApiProfileAttribute(string profile) : Attribute
public string Profile { get; } = profile;
/// <summary>
/// The API extension required (in its native form).
/// A list of API sets (i.e. feature or extension names) in which the API is supported. If any of the elements
/// contains a <c>+</c>, then this attribute value is interpreted to mean &quot;this API requires <b>any</b> of the
/// <b>combinations</b> of API sets&quot;. If not, this attribute value is interpreted to mean &quot;this API
/// requires <b>any</b> of the API sets to be supported&quot;.
/// </summary>
public string? Extension { get; init; }
/// <remarks>
/// By default, the API is deemed supported if any of the sets in this array are supported. However, this can be
/// changed using <see cref="RequireAll"/>.
/// </remarks>
public string[]? ApiSets { get; } = apiSets;
/// <summary>
/// The minimum version of this API profile required in order to be supported.
/// The minimum (inclusive) version number (for illustration purposes only) wherein the API is supported by default.
/// </summary>
/// <remarks>
/// This is non-normative, please rely only on <see cref="ApiSets"/> to determine whether an API is supported for a
/// given configuration. For instance, this does not preclude extensions being in <see cref="ApiSets"/>, which may
/// support this API earlier or regardless of the version listed in this property.
/// </remarks>
public string? MinVersion { get; init; }
/// <summary>
/// The maximum version of this API profile required in order to be supported.
/// The maximum (exclusive) version number (for illustration purposes only) wherein the API is no longer supported
/// by default.
/// </summary>
/// <remarks>
/// This is non-normative, please rely only on <see cref="ApiSets"/> to determine whether an API is supported for a
/// given configuration. For instance, this does not preclude extensions being in <see cref="ApiSets"/>, which may
/// support this API later or regardless of the version listed in this property.
/// </remarks>
public string? MaxVersion { get; init; }
/// <summary>
/// If this <see cref="SupportedApiProfileAttribute"/> evaluates to indicate that the annotated API is supported,
/// the support for the given API sets are also implied. If any of the implications contains a <c>+</c>, then this
/// attribute value is interpreted to mean &quot;this API being supported may imply <b>one or more</b> of the
/// following API set <b>combinations</b>&quot;. If not, this attribute value is interpreted to mean &quot;this API
/// being supported implies <b>all</b> of the following API sets are also supported&quot;
/// </summary>
/// <remarks>
/// This is primarily used to declare dependencies between API sets. It is not expected for this property to vary at
/// an API-by-API level.
/// </remarks>
public string[]? ImpliesSets { get; init; }
/// <summary>
/// Requires all of the sets in <see cref="ApiSets"/> to be supported to support using the annotated API.
/// </summary>
public bool RequireAll { get; init; }
}

Просмотреть файл

@ -1,6 +1,56 @@
namespace Silk.NET.Core;
/// <summary>
/// An attribute used to indicate that a method is a transformed variant of another method.
/// An attribute used to indicate that a symbol is a transformed variant of another symbol.
/// </summary>
public class TransformedAttribute : Attribute;
/// <remarks>
/// This attribute is primarily used as an intrinsic in the Silk.NET SilkTouch generator pipeline. This includes:
/// <list type="bullet">
/// <item>
/// <term>Indicating mods should ignore an annotated type.</term>
/// <description>
/// An example of this is when a type is generated using the typical PascalCase nomenclature and should not flow through
/// the <c>PrettifyNames</c> automated prefix detection pipeline. Note that the typical behaviour of the mod, namely
/// trimming an identified prefix and converting to PascalCose if not already, will still occur. Mods should ignore or
/// otherwise specially treat types that are annotated with this attribute except in extreme circumstances.
/// </description>
/// </item>
/// <item>
/// <term>Indicating mods should not ignore an annotated method.</term>
/// <description>
/// Generally mods are optimistic about whether their modifications can be applied to types, whereas this can't be said
/// for methods and other members of types, especially when they have bodies. If a method has a body and a mod is unable
/// to recognise the origin of said body, then the mod quite often ignores it. This attribute prevents that, for example
/// in this leads the <c>AddVTables</c> mod to recognise a method with a body as a V-Table candidate whereas usually
/// these are pessimised. Mods should avoid pessimising methods or other members that are annotated with this attribute.
/// </description>
/// </item>
/// </list>
/// Generally, this attribute indicates special recognition is required and that normal behaviour should not occur for
/// the annotated symbol in the generator pipeline except in special circumstances i.e. the annotated symbol &quot;goes
/// against the norm&quot;.
/// </remarks>
/// <param name="isTransformed">
/// Whether the attribute applies. By default, a transformation attribute on a parent automatically cascades to its
/// members, but this parameter being set to false can be used to prevent that.
/// </param>
[AttributeUsage(
AttributeTargets.Class
| AttributeTargets.Constructor
| AttributeTargets.Enum
| AttributeTargets.Event
| AttributeTargets.Field
| AttributeTargets.Interface
| AttributeTargets.Method
| AttributeTargets.Property
| AttributeTargets.Struct,
AllowMultiple = true,
Inherited = false
)]
public class TransformedAttribute(bool isTransformed = true) : Attribute
{
/// <summary>
/// Whether the attribute applies.
/// </summary>
public bool IsTransformed { get; } = isTransformed;
}

Просмотреть файл

@ -0,0 +1,51 @@
using System.Runtime.CompilerServices;
namespace Silk.NET.Core;
/// <summary>
/// Represents a constant that optionally can be represented as an enum. This allows both constant integers and
/// enumerated members to be used by the same parameter without a cast.
/// </summary>
/// <param name="Value">The underlying value.</param>
/// <typeparam name="TUnderlying">The underlying value type.</typeparam>
/// <typeparam name="TEnum1">
/// The enum that can be used in place of a <typeparamref name="TUnderlying"/> constant.
/// </typeparam>
public readonly record struct Constant<TUnderlying, TEnum1>(TUnderlying Value)
where TUnderlying : unmanaged
where TEnum1 : unmanaged
{
/// <summary>
/// Creates a <see cref="Constant{TUnderlying,TEnum1}"/> from its underlying value.
/// </summary>
/// <param name="value">The underlying value.</param>
/// <returns>The constant.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator Constant<TUnderlying, TEnum1>(TUnderlying value) => new(value);
/// <summary>
/// Creates a <see cref="Constant{TUnderlying,TEnum1}"/> from the given <typeparamref name="TEnum1"/>.
/// </summary>
/// <param name="value">The enum.</param>
/// <returns>The value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator Constant<TUnderlying, TEnum1>(TEnum1 value) =>
SilkMarshal.ConstCast<TEnum1, TUnderlying>(value);
/// <summary>
/// Gets the underlying value.
/// </summary>
/// <param name="value">The constant.</param>
/// <returns>The underlying value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator TUnderlying(Constant<TUnderlying, TEnum1> value) => value.Value;
/// <summary>
/// Gets the underlying value as a <typeparamref name="TEnum1"/>.
/// </summary>
/// <param name="value">The constant.</param>
/// <returns>The value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator TEnum1(Constant<TUnderlying, TEnum1> value) =>
SilkMarshal.ConstCast<TUnderlying, TEnum1>(value);
}

Просмотреть файл

@ -0,0 +1,75 @@
using System.Runtime.CompilerServices;
namespace Silk.NET.Core;
/// <summary>
/// Represents a constant that optionally can be represented as an enum. This allows both constant integers and
/// enumerated members to be used by the same parameter without a cast.
/// </summary>
/// <param name="Value">The underlying value.</param>
/// <typeparam name="TUnderlying">The underlying value type.</typeparam>
/// <typeparam name="TEnum1">
/// An enum that can be used in place of a <typeparamref name="TUnderlying"/> constant.
/// </typeparam>
/// <typeparam name="TEnum2">
/// Another enum that can be used in place of a <typeparamref name="TUnderlying"/> constant.
/// </typeparam>
public readonly record struct Constant<TUnderlying, TEnum1, TEnum2>(TUnderlying Value)
where TUnderlying : unmanaged
where TEnum1 : unmanaged
where TEnum2 : unmanaged
{
/// <summary>
/// Creates a <see cref="Constant{TUnderlying,TEnum1,TEnum2}"/> from its underlying value.
/// </summary>
/// <param name="value">The underlying value.</param>
/// <returns>The constant.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator Constant<TUnderlying, TEnum1, TEnum2>(TUnderlying value) =>
new(value);
/// <summary>
/// Creates a <see cref="Constant{TUnderlying,TEnum1,TEnum2}"/> from the given <typeparamref name="TEnum1"/>.
/// </summary>
/// <param name="value">The enum.</param>
/// <returns>The value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator Constant<TUnderlying, TEnum1, TEnum2>(TEnum1 value) =>
SilkMarshal.ConstCast<TEnum1, TUnderlying>(value);
/// <summary>
/// Creates a <see cref="Constant{TUnderlying,TEnum1,TEnum2}"/> from the given <typeparamref name="TEnum2"/>.
/// </summary>
/// <param name="value">The enum.</param>
/// <returns>The value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator Constant<TUnderlying, TEnum1, TEnum2>(TEnum2 value) =>
SilkMarshal.ConstCast<TEnum2, TUnderlying>(value);
/// <summary>
/// Gets the underlying value.
/// </summary>
/// <param name="value">The constant.</param>
/// <returns>The underlying value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator TUnderlying(Constant<TUnderlying, TEnum1, TEnum2> value) =>
value.Value;
/// <summary>
/// Gets the underlying value as a <typeparamref name="TEnum1"/>.
/// </summary>
/// <param name="value">The constant.</param>
/// <returns>The value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator TEnum1(Constant<TUnderlying, TEnum1, TEnum2> value) =>
SilkMarshal.ConstCast<TUnderlying, TEnum1>(value);
/// <summary>
/// Gets the underlying value as a <typeparamref name="TEnum2"/>.
/// </summary>
/// <param name="value">The constant.</param>
/// <returns>The value.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static implicit operator TEnum2(Constant<TUnderlying, TEnum1, TEnum2> value) =>
SilkMarshal.ConstCast<TUnderlying, TEnum2>(value);
}

Просмотреть файл

@ -3,4 +3,5 @@
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=annotations/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=com/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=dsl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=ducktyping/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=pointers/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

Просмотреть файл

@ -1,5 +1,5 @@
using System.Buffers;
using System.Diagnostics.CodeAnalysis;
using System.Numerics;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@ -583,4 +583,214 @@ public static unsafe class SilkMarshal
}
return ret;
}
/// <summary>
/// Represents an unsafe constant cast wherein:
/// <list type="bullet">
/// <item>
/// <term>Casts to smaller types truncate the most significant bits.</term>
/// <description>
/// The return value is obtained by reinterpreting and dereferencing a pointer to <typeparamref name="TFrom"/> as a
/// <typeparamref name="TTo"/>, which on a little-endian machine is offset by the absolute byte difference between
/// the size of <typeparamref name="TFrom"/> and <typeparamref name="TTo"/> to ensure that only the least
/// significant bits are taken; or an equivalent, more optimised methodology for smaller types.
/// </description>
/// </item>
/// <item>
/// <term>Casts to larger types fill the most significant bits with zeroes.</term>
/// <description>
/// Assignment occurs through reinterpretation of a pointer to a zeroed-out <typeparamref name="TTo"/> to a
/// <typeparamref name="TFrom"/>, which on a little-endian machine is offset by the absolute byte difference
/// between the size of <typeparamref name="TFrom"/> and <typeparamref name="TTo"/>, to obtain the return value;
/// or an equivalent, more optimised methodology for smaller types.
/// </description>
/// </item>
/// </list>
/// </summary>
/// <remarks>
/// This is optimised to a <see cref="Unsafe.BitCast{TFrom, TTo}"/> where possible. Namely, where the size of types
/// are the same or where <typeparamref name="TFrom"/> and <typeparamref name="TTo"/> both have the same size as a
/// primitive type. This often results in a single CPU instruction (on x64) being emitted when inlined.
/// </remarks>
/// <param name="value">The value to cast.</param>
/// <typeparam name="TFrom">The type to cast from.</typeparam>
/// <typeparam name="TTo">The type to cast to.</typeparam>
/// <returns>The casted constant.</returns>
/// <exception cref="NotImplementedException">
/// Currently, neither signed numbers that are not primitive-sized nor floating point numbers are supported
/// <typeparamref name="TTo"/> types.
/// </exception>
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public static TTo ConstCast<TFrom, TTo>(TFrom value)
where TFrom : unmanaged
where TTo : unmanaged
{
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.AggressiveOptimization)]
static TTo UnsignedFallback(TFrom value)
{
if (sizeof(TFrom) > sizeof(TTo))
{
var valcop = value; // <-- codegen dies otherwise, presumably some pessimism?
return *(
(TTo*)&valcop + (BitConverter.IsLittleEndian ? sizeof(TFrom) - sizeof(TTo) : 0)
);
}
TTo val = default;
*(TFrom*)(&val + (BitConverter.IsLittleEndian ? sizeof(TTo) - sizeof(TFrom) : 0)) =
value;
return val;
}
// Sadly switch expression codegen is not optimal so we have the below abominations.
// I can't wait for the alternatives to Silk.NET to point this out to prospective users and say that this code
// is disgusting therefore the entire library is disgusting. Yes, I know it's disgusting. The point is we do
// this for perf so you don't have to!
//
// Oh here's the codegen on x64:
// IntEnum -> int: mov eax, ecx; ret ShortEnum -> int: movzx eax, cx; ret
// IntEnum -> uint: mov eax, ecx; ret ShortEnum -> uint: movzx eax, cx; ret
// IntEnum -> long: mov eax, ecx; ret ShortEnum -> long: movzx eax, cx; ret
// IntEnum -> ulong: mov eax, ecx; ret ShortEnum -> ulong: movzx eax, cx; ret
// IntEnum -> short: movsx rax, cx; ret ShortEnum -> short: movsx rax, cx; ret
// IntEnum -> ushort: movzx eax, cx; ret ShortEnum -> ushort: movzx eax, cx; ret
// IntEnum -> byte: movzx eax, cl; ret ShortEnum -> byte: movzx eax, cl; ret
// IntEnum -> sbyte: movsx rax, cl; ret ShortEnum -> sbyte: movsx rax, cl; ret
// UIntEnum -> int: mov eax, ecx; ret UShortEnum -> int: movzx eax, cx; ret
// UIntEnum -> uint: mov eax, ecx; ret UShortEnum -> uint: movzx eax, cx; ret
// UIntEnum -> long: mov eax, ecx; ret UShortEnum -> long: movzx eax, cx; ret
// UIntEnum -> ulong: mov eax, ecx; ret UShortEnum -> ulong: movzx eax, cx; ret
// UIntEnum -> short: movsx rax, cx; ret UShortEnum -> short: movsx rax, cx; ret
// UIntEnum -> ushort: movzx eax, cx; ret UShortEnum -> ushort: movzx eax, cx; ret
// UIntEnum -> byte: movzx eax, cl; ret UShortEnum -> byte: movzx eax, cl; ret
// UIntEnum -> sbyte: movsx rax, cl; ret UShortEnum -> sbyte: movsx rax, cl; ret
// LongEnum -> int: mov eax, ecx; ret ByteEnum -> int: movzx eax, cl; ret
// LongEnum -> uint: mov eax, ecx; ret ByteEnum -> uint: movzx eax, cl; ret
// LongEnum -> long: mov rax, rcx; ret ByteEnum -> long: movzx eax, cl; ret
// LongEnum -> ulong: mov rax, rcx; ret ByteEnum -> ulong: movzx eax, cl; ret
// LongEnum -> short: movsx rax, cx; ret ByteEnum -> short: movzx eax, cl; ret
// LongEnum -> ushort: movzx eax, cx; ret ByteEnum -> ushort: movzx eax, cl; ret
// LongEnum -> byte: movzx eax, cl; ret ByteEnum -> byte: movzx eax, cl; ret
// LongEnum -> sbyte: movsx rax, cl; ret ByteEnum -> sbyte: movsx rax, cl; ret
// ULongEnum -> int: mov eax, ecx; ret SByteEnum -> int: movzx eax, cl; ret
// ULongEnum -> uint: mov eax, ecx; ret SByteEnum -> uint: movzx eax, cl; ret
// ULongEnum -> long: mov rax, rcx; ret SByteEnum -> long: movzx eax, cl; ret
// ULongEnum -> ulong: mov rax, rcx; ret SByteEnum -> ulong: movzx eax, cl; ret
// ULongEnum -> short: movsx rax, cx; ret SByteEnum -> short: movzx eax, cl; ret
// ULongEnum -> ushort: movzx eax, cx; ret SByteEnum -> ushort: movzx eax, cl; ret
// ULongEnum -> byte: movzx eax, cl; ret SByteEnum -> byte: movzx eax, cl; ret
// ULongEnum -> sbyte: movsx rax, cl; ret SByteEnum -> sbyte: movsx rax, cl; ret
[MethodImpl(
MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization
)]
static TTo UnsignedCast(TFrom value) =>
sizeof(TTo) == sizeof(TFrom)
? Unsafe.BitCast<TFrom, TTo>(value)
: sizeof(TTo) == 1 && sizeof(TFrom) == 2
? Unsafe.BitCast<byte, TTo>((byte)Unsafe.BitCast<TFrom, ushort>(value))
: sizeof(TTo) == 1 && sizeof(TFrom) == 4
? Unsafe.BitCast<byte, TTo>((byte)Unsafe.BitCast<TFrom, uint>(value))
: sizeof(TTo) == 1 && sizeof(TFrom) == 8
? Unsafe.BitCast<byte, TTo>((byte)Unsafe.BitCast<TFrom, ulong>(value))
: sizeof(TTo) == 2 && sizeof(TFrom) == 1
? Unsafe.BitCast<ushort, TTo>(Unsafe.BitCast<TFrom, byte>(value))
: sizeof(TTo) == 2 && sizeof(TFrom) == 4
? Unsafe.BitCast<ushort, TTo>(
(ushort)Unsafe.BitCast<TFrom, uint>(value)
)
: sizeof(TTo) == 2 && sizeof(TFrom) == 8
? Unsafe.BitCast<ushort, TTo>(
(ushort)Unsafe.BitCast<TFrom, ulong>(value)
)
: sizeof(TTo) == 4 && sizeof(TFrom) == 1
? Unsafe.BitCast<uint, TTo>(
Unsafe.BitCast<TFrom, byte>(value)
)
: sizeof(TTo) == 4 && sizeof(TFrom) == 2
? Unsafe.BitCast<uint, TTo>(
Unsafe.BitCast<TFrom, ushort>(value)
)
: sizeof(TTo) == 4 && sizeof(TFrom) == 8
? Unsafe.BitCast<uint, TTo>(
(uint)Unsafe.BitCast<TFrom, ulong>(value)
)
: sizeof(TTo) == 8 && sizeof(TFrom) == 1
? Unsafe.BitCast<ulong, TTo>(
Unsafe.BitCast<TFrom, byte>(value)
)
: sizeof(TTo) == 8 && sizeof(TFrom) == 2
? Unsafe.BitCast<ulong, TTo>(
Unsafe.BitCast<TFrom, ushort>(value)
)
: sizeof(TTo) == 8 && sizeof(TFrom) == 4
? Unsafe.BitCast<ulong, TTo>(
Unsafe.BitCast<TFrom, uint>(
value
)
)
: UnsignedFallback(value);
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.AggressiveOptimization)]
static TTo SignedFallback(TFrom _) =>
throw new NotImplementedException(
"Non-primitive signed numbers are not supported at this time."
);
[MethodImpl(
MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization
)]
static TTo SignedCast(TFrom value) =>
sizeof(TTo) == sizeof(TFrom)
? Unsafe.BitCast<TFrom, TTo>(value)
: sizeof(TTo) == 1 && sizeof(TFrom) == 2
? Unsafe.BitCast<sbyte, TTo>((sbyte)Unsafe.BitCast<TFrom, short>(value))
: sizeof(TTo) == 1 && sizeof(TFrom) == 4
? Unsafe.BitCast<sbyte, TTo>((sbyte)Unsafe.BitCast<TFrom, int>(value))
: sizeof(TTo) == 1 && sizeof(TFrom) == 8
? Unsafe.BitCast<sbyte, TTo>((sbyte)Unsafe.BitCast<TFrom, long>(value))
: sizeof(TTo) == 2 && sizeof(TFrom) == 1
? Unsafe.BitCast<short, TTo>(Unsafe.BitCast<TFrom, sbyte>(value))
: sizeof(TTo) == 2 && sizeof(TFrom) == 4
? Unsafe.BitCast<short, TTo>(
(short)Unsafe.BitCast<TFrom, int>(value)
)
: sizeof(TTo) == 2 && sizeof(TFrom) == 8
? Unsafe.BitCast<short, TTo>(
(short)Unsafe.BitCast<TFrom, long>(value)
)
: sizeof(TTo) == 4 && sizeof(TFrom) == 1
? Unsafe.BitCast<int, TTo>(
Unsafe.BitCast<TFrom, sbyte>(value)
)
: sizeof(TTo) == 4 && sizeof(TFrom) == 2
? Unsafe.BitCast<int, TTo>(
Unsafe.BitCast<TFrom, short>(value)
)
: sizeof(TTo) == 4 && sizeof(TFrom) == 8
? Unsafe.BitCast<int, TTo>(
(int)Unsafe.BitCast<TFrom, long>(value)
)
: sizeof(TTo) == 8 && sizeof(TFrom) == 1
? Unsafe.BitCast<long, TTo>(
Unsafe.BitCast<TFrom, sbyte>(value)
)
: sizeof(TTo) == 8 && sizeof(TFrom) == 2
? Unsafe.BitCast<long, TTo>(
Unsafe.BitCast<TFrom, short>(value)
)
: sizeof(TTo) == 8 && sizeof(TFrom) == 4
? Unsafe.BitCast<long, TTo>(
Unsafe.BitCast<TFrom, int>(
value
)
)
: SignedFallback(value);
return typeof(TTo).IsAssignableTo(typeof(IFloatingPoint<>))
? throw new NotImplementedException("Floating points are not supported at this time.")
: typeof(TTo).IsAssignableTo(typeof(ISignedNumber<>))
? SignedCast(value)
: UnsignedCast(value);
}
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -36,6 +36,11 @@ public class PrettifyNames(
/// </summary>
public Dictionary<string, string>? PrefixOverrides { get; init; }
/// <summary>
/// Manually renamed native names.
/// </summary>
public Dictionary<string, string>? NameOverrides { get; init; }
/// <summary>
/// The base trimmer version. If null, trimming is disabled.
/// </summary>
@ -56,37 +61,64 @@ public class PrettifyNames(
/// <inheritdoc />
public Task<GeneratedSyntax> AfterScrapeAsync(string key, GeneratedSyntax syntax)
{
var visitor = new Visitor();
// First pass to scan the sources and create a dictionary of type/member names.
var cfg = config.Get(key);
var visitor = new Visitor { NameOverrides = (cfg.NameOverrides?.ToDictionary() ?? [])! };
foreach (var (_, node) in syntax.Files.Where(x => x.Key.StartsWith("sources/")))
{
visitor.Visit(node);
}
var rewriter = new Rewriter();
var cfg = config.Get(key);
var translator = new NameUtils.NameTransformer(cfg.LongAcronymThreshold ?? 3);
// If we have a trimmer baseline set, that means the user wants to trim the names as well as prettify them.
if (cfg.TrimmerBaseline is not null)
{
// Get all the trimmers that are above this baseline. We also sort by the version. Why? Because someone
// couldn't be bothered to introduce a weight property. It is also unclear what effect this has on 2.17/2.18
// but to be honest those trimmers aren't used and are only included for posterity and understanding of the
// old logic.
var trimmers = trimmerProviders
.SelectMany(x => x.Get(key))
.OrderBy(x => x.Version)
.ToArray();
// Create a type name dictionary to trim the type names.
var typeNames = visitor.Types.ToDictionary(
x => x.Key,
x => (x.Key, (List<string>?)null)
);
// If we don't have a prefix hint and don't have more than one type, we can't determine a prefix so don't
// trim.
if (typeNames.Count > 1 || cfg.GlobalPrefixHint is not null)
{
Trim(null, cfg.GlobalPrefixHint, key, typeNames, cfg.PrefixOverrides, trimmers);
Trim(
null,
cfg.GlobalPrefixHint,
key,
typeNames,
cfg.PrefixOverrides,
trimmers,
visitor.NameOverrides,
visitor.NonDeterminant
);
}
// Now rename everything within that type.
foreach (var (typeName, (newTypeName, _)) in typeNames)
{
var (_, (consts, functions)) = visitor.Types.First(x => x.Key == typeName);
// Rename the "constants" i.e. all the consts/static readonlys in this type. These are treated
// individually because everything that isn't a constant or a function is only prettified instead of prettified & trimmed.
var constNames = consts?.ToDictionary(
x => x,
x => (Primary: x, (List<string>?)null)
);
// Trim the constants if we have any.
if (constNames is not null)
{
Trim(
@ -95,7 +127,9 @@ public class PrettifyNames(
key,
constNames,
cfg.PrefixOverrides,
trimmers
trimmers,
cfg.NameOverrides!,
visitor.NonDeterminant
);
}
else
@ -103,15 +137,22 @@ public class PrettifyNames(
constNames = new Dictionary<string, (string Primary, List<string>?)>();
}
// Rename the functions. More often that not functions have different nomenclature to constants, so we
// treat them separately.
var functionNames = functions
?.DistinctBy(x => x.Name)
.ToDictionary(x => x.Name, x => (Primary: x.Name, (List<string>?)null));
var functionSyntax = functions is null
? null
: functionNames?.Keys.ToDictionary(
x => x,
x => functions.Where(y => y.Name == x).Select(y => y.Syntax)
);
// Collect the syntax as this is used for conflict resolution in the Trim function.
var functionSyntax =
functions is null || functionNames is null
? null
: functionNames.Keys.ToDictionary(
x => x,
x => functions.Where(y => y.Name == x).Select(y => y.Syntax)
);
// Now trim if we have any functions.
if (functionNames is not null)
{
Trim(
@ -121,10 +162,13 @@ public class PrettifyNames(
functionNames,
cfg.PrefixOverrides,
trimmers,
cfg.NameOverrides!,
visitor.NonDeterminant,
functionSyntax
);
}
// Add back anything else that isn't a trimming candidate (but should still have a pretty name)
var prettifiedOnly = visitor.PrettifyOnlyTypes.TryGetValue(typeName, out var val)
? val.Select(x => new KeyValuePair<string, (string Primary, List<string>?)>(
x,
@ -132,6 +176,7 @@ public class PrettifyNames(
))
: Enumerable.Empty<KeyValuePair<string, (string Primary, List<string>?)>>();
// Add it to the rewriter's list of names to... rewrite...
rewriter.Types[typeName] = (
newTypeName.Prettify(translator),
// TODO deprecate secondaries if they're within the baseline?
@ -145,8 +190,9 @@ public class PrettifyNames(
);
}
}
else
else // (there's no trimming baseline)
{
// Prettify only if the user has not indicated they want to trim.
foreach (var (name, (nonFunctions, functions)) in visitor.Types)
{
rewriter.Types[name] = (
@ -157,16 +203,20 @@ public class PrettifyNames(
}
}
foreach (var (name, (newName, nonFunctions, functions)) in rewriter.Types)
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("{} = {}", name, newName);
foreach (var (old, @new) in nonFunctions ?? new())
foreach (var (name, (newName, nonFunctions, functions)) in rewriter.Types)
{
logger.LogDebug("{}.{} = {}.{}", name, old, newName, @new);
}
foreach (var (old, @new) in functions ?? new())
{
logger.LogDebug("{}.{} = {}.{}", name, old, newName, @new);
logger.LogDebug("{} = {}", name, newName);
foreach (var (old, @new) in nonFunctions ?? new())
{
logger.LogDebug("{}.{} = {}.{}", name, old, newName, @new);
}
foreach (var (old, @new) in functions ?? new())
{
logger.LogDebug("{}.{} = {}.{}", name, old, newName, @new);
}
}
}
@ -198,9 +248,60 @@ public class PrettifyNames(
Dictionary<string, (string Primary, List<string>? Secondary)> names,
Dictionary<string, string>? prefixOverrides,
IEnumerable<INameTrimmer> trimmers,
Dictionary<string, string>? nameOverrides,
HashSet<string> nonDeterminant,
Dictionary<string, IEnumerable<MethodDeclarationSyntax>>? functionSyntax = null
)
{
// Ensure the trimmers don't see names that have been manually overridden, as we don't want them to influence
// automatic prefix determination for example
var namesToTrim = names;
foreach (
var (nativeName, overriddenName) in nameOverrides
?? Enumerable.Empty<KeyValuePair<string, string>>()
)
{
var nameToAdd = nativeName;
if (nativeName.Contains('.'))
{
// We're processing a type dictionary, so don't add a member thing.
if (container is null)
{
continue;
}
// Check whether the override is for this type.
var span = container.AsSpan();
if (span[..span.IndexOf('.')] == "*" || span[..span.IndexOf('.')] == container)
{
nameToAdd = span[(span.IndexOf('.') + 1)..].ToString();
}
else
{
continue;
}
}
if (!namesToTrim.TryGetValue(nameToAdd, out var v))
{
continue;
}
// If we haven't created the differentiated dictionary yet, then do so now. We do want to keep the original
// dictionary so we can actually apply the renames; if we have created two different branching dictionaries
// they are recombined following trimming.
if (namesToTrim == names)
{
namesToTrim = namesToTrim.ToDictionary();
}
// Don't let the trimmers see the overridden native name.
namesToTrim.Remove(nameToAdd);
// Apply the name override to the dictionary we actually use.
names[nameToAdd] = (overriddenName, [..v.Secondary, nameToAdd]);
}
// Run each trimmer
string? identifiedPrefix = null;
foreach (var trimmer in trimmers)
@ -211,10 +312,20 @@ public class PrettifyNames(
key,
names,
prefixOverrides,
nonDeterminant,
ref identifiedPrefix
);
}
// Apply changes.
if (namesToTrim != names)
{
foreach (var (evalName, result) in namesToTrim)
{
names[evalName] = result;
}
}
// Prefer shorter names
foreach (var (trimmingName, (primary, secondary)) in names)
{
@ -469,6 +580,8 @@ public class PrettifyNames(
> Types = new();
public Dictionary<string, List<string>> PrettifyOnlyTypes = new();
public required Dictionary<string, string> NameOverrides { get; init; }
public HashSet<string> NonDeterminant { get; } = [];
private (
ClassDeclarationSyntax Class,
List<string> NonFunctions,
@ -481,28 +594,41 @@ public class PrettifyNames(
public override void VisitClassDeclaration(ClassDeclarationSyntax node)
{
if (
_classInProgress is not null
|| _enumInProgress is not null
|| node.Ancestors().OfType<BaseTypeDeclarationSyntax>().Any()
_classInProgress is not null // nesting is ignored for now
|| _enumInProgress is not null // class nested in an enum, wtf?
|| node.Ancestors().OfType<BaseTypeDeclarationSyntax>().Any() // again... nesting is ignored.
)
{
// ignoring nesting for now
return;
}
if (
node.AttributeLists.Any(x =>
x.Attributes.Any(y => y.IsAttribute("Silk.NET.Core.Transformed"))
)
)
{
NonDeterminant.Add(node.Identifier.ToString());
}
_classInProgress = (
node,
new List<string>(),
new List<(string, MethodDeclarationSyntax)>()
);
// Recurse into the members.
base.VisitClassDeclaration(node);
var id = _classInProgress.Value.Class.Identifier.ToString();
var id = node.Identifier.ToString();
// Tolerate partial classes.
if (!Types.TryGetValue(id, out var inner))
{
inner = (new List<string>(), new List<(string, MethodDeclarationSyntax)>());
Types.Add(id, inner);
}
// Merge with the other partials.
(inner.NonFunctions ??= new List<string>()).AddRange(
_classInProgress.Value.NonFunctions
);
@ -514,11 +640,13 @@ public class PrettifyNames(
public override void VisitFieldDeclaration(FieldDeclarationSyntax node)
{
// Can't have a field within a field or an enum. This is basically a "wtf" check.
if (_visitingField is not null || _enumInProgress is not null)
{
return;
}
// If it's not a constant then we only prettify.
if (
!node.Modifiers.Any(SyntaxKind.ConstKeyword)
&& (
@ -584,6 +712,15 @@ public class PrettifyNames(
return;
}
if (
node.AttributeLists.Any(x =>
x.Attributes.Any(y => y.IsAttribute("Silk.NET.Core.Transformed"))
)
)
{
NonDeterminant.Add(node.Identifier.ToString());
}
Types[node.Identifier.ToString()] = (null, null);
base.VisitStructDeclaration(node);
}
@ -599,6 +736,15 @@ public class PrettifyNames(
return;
}
if (
node.AttributeLists.Any(x =>
x.Attributes.Any(y => y.IsAttribute("Silk.NET.Core.Transformed"))
)
)
{
NonDeterminant.Add(node.Identifier.ToString());
}
_enumInProgress = (node, new List<string>());
base.VisitEnumDeclaration(node);
var id = _enumInProgress.Value.Enum.Identifier.ToString();

Просмотреть файл

@ -25,6 +25,7 @@ public interface INameTrimmer
/// <param name="jobKey">The job key.</param>
/// <param name="names">The names within the container.</param>
/// <param name="prefixOverrides">The prefix overrides.</param>
/// <param name="nonDeterminant">Names that should not be treated as determinant of the identified prefix.</param>
/// <param name="identifiedPrefix">The prefix identified that this trimmer is trimming from the functions.</param>
void Trim(
string? container,
@ -32,6 +33,7 @@ public interface INameTrimmer
string? jobKey,
Dictionary<string, (string Primary, List<string>? Secondary)>? names,
Dictionary<string, string>? prefixOverrides,
HashSet<string>? nonDeterminant,
ref string? identifiedPrefix
);
}

Просмотреть файл

@ -33,6 +33,7 @@ public class NameTrimmer : INameTrimmer
string? jobKey,
Dictionary<string, (string Primary, List<string>? Secondary)>? names,
Dictionary<string, string>? prefixOverrides,
HashSet<string>? nonDeterminant,
ref string? identifiedPrefix
)
{
@ -53,6 +54,7 @@ public class NameTrimmer : INameTrimmer
hint,
names,
prefixOverrides,
nonDeterminant,
i == 0,
naive = i == 2
);
@ -109,7 +111,7 @@ public class NameTrimmer : INameTrimmer
{
continue;
}
var sec = secondary ?? new List<string>();
var sec = secondary ?? [];
sec.Add(oldPrimary);
// this was trimmingName originally. given that we're using trimming name to determine a prefix but then
// using that prefix on the old primary, this could cause intended behaviour in some cases. there's probably
@ -128,6 +130,7 @@ public class NameTrimmer : INameTrimmer
/// <param name="hint">The global prefix hint if applicable.</param>
/// <param name="names">The names to get a prefix for.</param>
/// <param name="prefixOverrides">Prefix overrides.</param>
/// <param name="nonDeterminant">List of names that should not be used for prefix determination.</param>
/// <param name="getTrimmingName">
/// Whether to use <see cref="GetTrimmingName"/> or to use the native name as-is.
/// </param>
@ -147,6 +150,7 @@ public class NameTrimmer : INameTrimmer
string? hint,
Dictionary<string, (string Primary, List<string>? Secondary)>? names,
Dictionary<string, string>? prefixOverrides,
HashSet<string>? nonDeterminant,
bool getTrimmingName,
bool naive
)
@ -185,13 +189,19 @@ public class NameTrimmer : INameTrimmer
? @override
: names.Count == 1 && !string.IsNullOrWhiteSpace(containerTrimmingName)
? NameUtils.FindCommonPrefix(
new List<string> { names.Keys.First(), containerTrimmingName },
[
names.Keys.First(x => !(nonDeterminant?.Contains(x) ?? false)),
containerTrimmingName
],
true,
false,
naive
)
: NameUtils.FindCommonPrefix(
localNames.Keys.ToList(),
localNames
.Where(x => !(nonDeterminant?.Contains(x.Value.Key) ?? false))
.Select(x => x.Key)
.ToList(),
// If naive mode is on and we're trimming type names, allow full matches (method class is
// probably the prefix)
naive && container is null,
@ -201,8 +211,9 @@ public class NameTrimmer : INameTrimmer
// If any of the children's trimming name is shorter than the prefix length,
if (
localNames.Keys.Any(x => x.Length <= prefix.Length)
&& !string.IsNullOrWhiteSpace(containerTrimmingName)
localNames.Keys.Any(x =>
x.Length <= prefix.Length && !(nonDeterminant?.Contains(x) ?? false)
) && !string.IsNullOrWhiteSpace(containerTrimmingName)
)
{
// Do a second pass, but put the container name in the loop to see if it makes a difference

Просмотреть файл

@ -46,7 +46,7 @@ public static partial class NameUtils
/// </param>
/// <returns>String that is common between all provided names</returns>
public static string FindCommonPrefix(
List<string> names,
IReadOnlyList<string> names,
bool allowFullMatch,
bool allowLeadingDigits,
bool naive = false
@ -82,7 +82,7 @@ public static partial class NameUtils
/// </param>
/// <returns>String that is common between all provided names</returns>
public static string FindCommonPrefix(
List<string> names,
IReadOnlyList<string> names,
bool allowFullMatch,
int maxLen,
bool naive = false

Просмотреть файл

@ -30,7 +30,4 @@
<EmbeddedResource Include="Clang\VisualStudioVarPrint.bat" />
</ItemGroup>
</Project>

Просмотреть файл

@ -17,6 +17,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Update="NUnit" Version="4.1.0" />
</ItemGroup>
</Project>

Просмотреть файл

@ -10,13 +10,31 @@ public class Ptr2DTests
public unsafe void NullIsNull()
{
Ptr2D<nint> ptr = nullptr;
Assert.True(((delegate*<ref Ptr<nint>, bool>)(delegate*<ref readonly int, bool>)&Unsafe.IsNullRef<int>)(
ref ((delegate*<in Ptr<nint>, ref Ptr<nint>>)(delegate*<ref readonly int, ref int>)&Unsafe.AsRef<int>)(
in ptr.Handle)));
Assert.True(((delegate*<ref Ptr<nint>, bool>)(delegate*<ref readonly int, bool>)&Unsafe.IsNullRef<int>)(
ref ((delegate*<in Ptr<nint>, ref Ptr<nint>>)(delegate*<ref readonly int, ref int>)&Unsafe.AsRef<int>)(
in ptr[0])));
Assert.True((nint**)ptr is null);
Assert.True((void**)ptr is null);
Assert.That(
(
(delegate* <ref Ptr<nint>, bool>)
(delegate* <ref readonly int, bool>)&Unsafe.IsNullRef<int>
)(
ref (
(delegate* <in Ptr<nint>, ref Ptr<nint>>)
(delegate* <ref readonly int, ref int>)&Unsafe.AsRef<int>
)(in ptr.Handle)
),
Is.True
);
Assert.That(
(
(delegate* <ref Ptr<nint>, bool>)
(delegate* <ref readonly int, bool>)&Unsafe.IsNullRef<int>
)(
ref (
(delegate* <in Ptr<nint>, ref Ptr<nint>>)
(delegate* <ref readonly int, ref int>)&Unsafe.AsRef<int>
)(in ptr[0])
),
Is.True
);
Assert.That((nint**)ptr is null, Is.True);
Assert.That((void**)ptr is null, Is.True);
}
}

Просмотреть файл

@ -10,10 +10,13 @@ public class PtrTests
public unsafe void NullIsNull()
{
Ptr<nint> ptr = nullptr;
Assert.True(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.Handle)));
Assert.True(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr[0])));
Assert.True(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.GetPinnableReference())));
Assert.True((nint*) ptr is null);
Assert.True((void*) ptr is null);
Assert.Multiple(() =>
{
Assert.That(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.Handle)), Is.True);
Assert.That(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr[0])), Is.True);
Assert.That(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.GetPinnableReference())), Is.True);
Assert.That((nint*)ptr is null, Is.True);
Assert.That((void*)ptr is null, Is.True);
});
}
}

Просмотреть файл

@ -14,7 +14,10 @@ public class Ref2DTests
Assert.That((string)thingPtr.Ref, Is.EqualTo(STR_1));
Assert.That((string)thingPtr[0], Is.EqualTo(STR_1));
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))), Is.EqualTo(STR_1));
Assert.That(
Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
@ -40,8 +43,12 @@ public class Ref2DTests
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(
Encoding.UTF32.GetString(
MemoryMarshal.Cast<uint, byte>(thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4))),
Is.EqualTo(STR_1));
MemoryMarshal.Cast<uint, byte>(
thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4)
)
),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
@ -54,8 +61,10 @@ public class Ref2DTests
Assert.That((string)thingPtr.Ref, Is.EqualTo(STR_1));
Assert.That((string)thingPtr[0], Is.EqualTo(STR_1));
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))),
Is.EqualTo(STR_1));
Assert.That(
Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
}
@ -85,8 +94,12 @@ public class Ref2DTests
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(
Encoding.UTF32.GetString(
MemoryMarshal.Cast<uint, byte>(thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4))),
Is.EqualTo(STR_1));
MemoryMarshal.Cast<uint, byte>(
thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4)
)
),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
}
@ -98,15 +111,18 @@ public class Ref2DTests
Assert.That((string)thingPtr.Ref, Is.EqualTo(STR_1));
Assert.That((string)thingPtr[0], Is.EqualTo(STR_1));
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))),
Is.EqualTo(STR_1));
Assert.That(
Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
[Test]
public unsafe void SingleStringPtrUtf16FromJaggedArray()
{
Ref2D<char> thingPtr = new[] {
Ref2D<char> thingPtr = new[]
{
MemoryMarshal.Cast<byte, char>(Encoding.Unicode.GetBytes(STR_1 + "\0")).ToArray()
};
Assert.That((string)thingPtr.Ref, Is.EqualTo(STR_1));
@ -119,15 +135,21 @@ public class Ref2DTests
[Test]
public unsafe void SingleStringPtrUtf32FromJaggedArray()
{
Ref2D<uint> thingPtr =
new[] { MemoryMarshal.Cast<byte, uint>(Encoding.UTF32.GetBytes(STR_1 + "\0")).ToArray() };
Ref2D<uint> thingPtr = new[]
{
MemoryMarshal.Cast<byte, uint>(Encoding.UTF32.GetBytes(STR_1 + "\0")).ToArray()
};
Assert.That((string)thingPtr.Ref, Is.EqualTo(STR_1));
Assert.That((string)thingPtr[0], Is.EqualTo(STR_1));
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(
Encoding.UTF32.GetString(
MemoryMarshal.Cast<uint, byte>(thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4))),
Is.EqualTo(STR_1));
MemoryMarshal.Cast<uint, byte>(
thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4)
)
),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
@ -140,8 +162,10 @@ public class Ref2DTests
Assert.That((string)thingPtr.Ref, Is.EqualTo(STR_1));
Assert.That((string)thingPtr[0], Is.EqualTo(STR_1));
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))),
Is.EqualTo(STR_1));
Assert.That(
Encoding.UTF8.GetString(thingPtr[0].AsSpan(Encoding.UTF8.GetByteCount(STR_1))),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
}
@ -171,8 +195,12 @@ public class Ref2DTests
Assert.That(thingPtr[0][0], Is.EqualTo(STR_1[0]));
Assert.That(
Encoding.UTF32.GetString(
MemoryMarshal.Cast<uint, byte>(thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4))),
Is.EqualTo(STR_1));
MemoryMarshal.Cast<uint, byte>(
thingPtr[0].AsSpan(Encoding.UTF32.GetByteCount(STR_1) / 4)
)
),
Is.EqualTo(STR_1)
);
Assert.That(thingPtr.ReadToStringArray(length: 1)?[0], Is.EqualTo(STR_1));
}
}
@ -181,16 +209,43 @@ public class Ref2DTests
public unsafe void NullIsNull()
{
Ref2D<nint> ptr = nullptr;
Assert.True(((delegate*<ref Ref<nint>, bool>)(delegate*<ref readonly int, bool>)&Unsafe.IsNullRef<int>)(
ref ((delegate*<in Ref<nint>, ref Ref<nint>>)(delegate*<ref readonly int, ref int>)&Unsafe.AsRef<int>)(
in ptr.Ref)));
Assert.True(((delegate*<ref Ref<nint>, bool>)(delegate*<ref readonly int, bool>)&Unsafe.IsNullRef<int>)(
ref ((delegate*<in Ref<nint>, ref Ref<nint>>)(delegate*<ref readonly int, ref int>)&Unsafe.AsRef<int>)(
in ptr[0])));
Assert.True(((delegate*<ref nint*, bool>)(delegate*<ref readonly int, bool>)&Unsafe.IsNullRef<int>)(
ref ((delegate*<in nint*, ref nint*>)(delegate*<ref readonly int, ref int>)&Unsafe.AsRef<int>)(
in ptr.GetPinnableReference())));
Assert.True((nint**) ptr is null);
Assert.True((void**) ptr is null);
Assert.That(
(
(delegate* <ref Ref<nint>, bool>)
(delegate* <ref readonly int, bool>)&Unsafe.IsNullRef<int>
)(
ref (
(delegate* <in Ref<nint>, ref Ref<nint>>)
(delegate* <ref readonly int, ref int>)&Unsafe.AsRef<int>
)(in ptr.Ref)
),
Is.True
);
Assert.That(
(
(delegate* <ref Ref<nint>, bool>)
(delegate* <ref readonly int, bool>)&Unsafe.IsNullRef<int>
)(
ref (
(delegate* <in Ref<nint>, ref Ref<nint>>)
(delegate* <ref readonly int, ref int>)&Unsafe.AsRef<int>
)(in ptr[0])
),
Is.True
);
Assert.That(
(
(delegate* <ref nint*, bool>)
(delegate* <ref readonly int, bool>)&Unsafe.IsNullRef<int>
)(
ref (
(delegate* <in nint*, ref nint*>)
(delegate* <ref readonly int, ref int>)&Unsafe.AsRef<int>
)(in ptr.GetPinnableReference())
),
Is.True
);
Assert.That((nint**)ptr is null, Is.True);
Assert.That((void**)ptr is null, Is.True);
}
}

Просмотреть файл

@ -82,10 +82,10 @@ public class RefTests
public unsafe void NullIsNull()
{
Ref<nint> ptr = nullptr;
Assert.True(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.Handle)));
Assert.True(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr[0])));
Assert.True(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.GetPinnableReference())));
Assert.True((nint*) ptr is null);
Assert.True((void*) ptr is null);
Assert.That(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.Handle)), Is.True);
Assert.That(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr[0])), Is.True);
Assert.That(Unsafe.IsNullRef(ref Unsafe.AsRef(in ptr.GetPinnableReference())), Is.True);
Assert.That((nint*) ptr is null, Is.True);
Assert.That((void*) ptr is null, Is.True);
}
}

Просмотреть файл

@ -11,10 +11,13 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
<PackageReference Include="NUnit.Analyzers" Version="4.1.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.2" />
<PackageReference Update="NUnit" Version="4.1.0" />
</ItemGroup>
<ItemGroup>

Просмотреть файл

@ -0,0 +1,137 @@
[opencl] cl_amd_device_attribute_query (extension) =
[opencl] cl_APPLE_ContextLoggingFunctions (extension) =
[opencl] cl_APPLE_SetMemObjectDestructor (extension) =
[opencl] cl_arm_controlled_kernel_termination (extension) =
[opencl] cl_arm_get_core_id (extension) =
[opencl] cl_arm_import_memory (extension) =
[opencl] cl_arm_job_slot_selection (extension) =
[opencl] cl_arm_printf (extension) =
[opencl] cl_arm_protected_memory_allocation (extension) =
[opencl] cl_arm_scheduling_controls (extension) =
[opencl] cl_arm_shared_virtual_memory (extension) =
[opencl] cl_ext_cxx_for_opencl (extension) =
[opencl] cl_ext_device_fission (extension) =
[opencl] cl_ext_float_atomics (extension) =
[opencl] cl_ext_image_from_buffer (extension) =
[opencl] cl_ext_image_raw10_raw12 (extension) =
[opencl] cl_ext_image_requirements_info (extension) =
[opencl] cl_ext_migrate_memobject (extension) =
[opencl] cl_img_cached_allocations (extension) =
[opencl] cl_img_cancel_command (extension) =
[opencl] cl_img_generate_mipmap (extension) =
[opencl] cl_img_mem_properties (extension) =
[opencl] cl_img_use_gralloc_ptr (extension) =
[opencl] cl_img_yuv_image (extension) =
[opencl] cl_intel_accelerator (extension) =
[opencl] cl_intel_advanced_motion_estimation (extension) =
[opencl] cl_intel_command_queue_families (extension) =
[opencl] cl_intel_create_buffer_with_properties (extension) =
[opencl] cl_intel_create_mem_object_properties (extension) =
[opencl] cl_intel_device_attribute_query (extension) =
[opencl] cl_intel_device_partition_by_names (extension) =
[opencl] cl_intel_device_side_avc_motion_estimation (extension) =
[opencl] cl_intel_driver_diagnostics (extension) =
[opencl] cl_intel_dx9_media_sharing (extension) =
[opencl] cl_intel_egl_image_yuv (extension) =
[opencl] cl_intel_exec_by_local_thread (extension) =
[opencl] cl_intel_mem_alloc_buffer_location (extension) =
[opencl] cl_intel_mem_channel_property (extension) =
[opencl] cl_intel_mem_force_host_memory (extension) =
[opencl] cl_intel_motion_estimation (extension) =
[opencl] cl_intel_packed_yuv (extension) =
[opencl] cl_intel_planar_yuv (extension) =
[opencl] cl_intel_program_scope_host_pipe (extension) =
[opencl] cl_intel_queue_no_sync_operations (extension) =
[opencl] cl_intel_required_subgroup_size (extension) =
[opencl] cl_intel_sharing_format_query (extension) =
[opencl] cl_intel_sharing_format_query_d3d10 (extension) =
[opencl] cl_intel_sharing_format_query_d3d11 (extension) =
[opencl] cl_intel_sharing_format_query_dx9 (extension) =
[opencl] cl_intel_sharing_format_query_gl (extension) =
[opencl] cl_intel_sharing_format_query_va_api (extension) =
[opencl] cl_intel_simultaneous_sharing (extension) =
[opencl] cl_intel_unified_shared_memory (extension) =
[opencl] cl_intel_va_api_media_sharing (extension) =
[opencl] cl_khr_3d_image_writes (extension) =
[opencl] cl_khr_async_work_group_copy_fence (extension) =
[opencl] cl_khr_byte_addressable_store (extension) =
[opencl] cl_khr_command_buffer (extension) = CL_VERSION_1_2
[opencl] cl_khr_command_buffer_multi_device (extension) = cl_khr_command_buffer
[opencl] cl_khr_command_buffer_mutable_dispatch (extension) = cl_khr_command_buffer
[opencl] cl_khr_create_command_queue (extension) =
[opencl] cl_khr_d3d10_sharing (extension) =
[opencl] cl_khr_d3d11_sharing (extension) =
[opencl] cl_khr_depth_images (extension) =
[opencl] cl_khr_device_enqueue_local_arg_types (extension) =
[opencl] cl_khr_device_uuid (extension) =
[opencl] cl_khr_dx9_media_sharing (extension) =
[opencl] cl_khr_egl_event (extension) =
[opencl] cl_khr_egl_image (extension) =
[opencl] cl_khr_expect_assume (extension) =
[opencl] cl_khr_extended_async_copies (extension) =
[opencl] cl_khr_extended_bit_ops (extension) =
[opencl] cl_khr_extended_versioning (extension) =
[opencl] cl_khr_external_memory (extension) = CL_VERSION_3_0
[opencl] cl_khr_external_memory_dma_buf (extension) = cl_khr_external_memory, CL_VERSION_3_0
[opencl] cl_khr_external_memory_dx (extension) = cl_khr_external_memory, CL_VERSION_3_0
[opencl] cl_khr_external_memory_opaque_fd (extension) = cl_khr_external_memory, CL_VERSION_3_0
[opencl] cl_khr_external_memory_win32 (extension) = cl_khr_external_memory, CL_VERSION_3_0
[opencl] cl_khr_external_semaphore (extension) = cl_khr_semaphore, CL_VERSION_1_2
[opencl] cl_khr_external_semaphore_dx_fence (extension) = cl_khr_external_semaphore, cl_khr_semaphore, CL_VERSION_1_2
[opencl] cl_khr_external_semaphore_opaque_fd (extension) = cl_khr_external_semaphore, cl_khr_semaphore, CL_VERSION_1_2
[opencl] cl_khr_external_semaphore_sync_fd (extension) = cl_khr_external_semaphore, cl_khr_semaphore, CL_VERSION_1_2
[opencl] cl_khr_external_semaphore_win32 (extension) = cl_khr_external_semaphore, cl_khr_semaphore, CL_VERSION_1_2
[opencl] cl_khr_fp16 (extension) =
[opencl] cl_khr_fp64 (extension) =
[opencl] cl_khr_gl_depth_images (extension) = cl_khr_gl_sharing
[opencl] cl_khr_gl_event (extension) = cl_khr_gl_sharing
[opencl] cl_khr_gl_msaa_sharing (extension) = cl_khr_gl_depth_images, cl_khr_gl_sharing
[opencl] cl_khr_gl_sharing (extension) =
[opencl] cl_khr_global_int32_base_atomics (extension) =
[opencl] cl_khr_global_int32_extended_atomics (extension) =
[opencl] cl_khr_icd (extension) =
[opencl] cl_khr_il_program (extension) =
[opencl] cl_khr_image2d_from_buffer (extension) =
[opencl] cl_khr_initialize_memory (extension) =
[opencl] cl_khr_int64_base_atomics (extension) =
[opencl] cl_khr_int64_extended_atomics (extension) =
[opencl] cl_khr_integer_dot_product (extension) =
[opencl] cl_khr_local_int32_base_atomics (extension) =
[opencl] cl_khr_local_int32_extended_atomics (extension) =
[opencl] cl_khr_mipmap_image (extension) =
[opencl] cl_khr_mipmap_image_writes (extension) = cl_khr_mipmap_image
[opencl] cl_khr_pci_bus_info (extension) =
[opencl] cl_khr_priority_hints (extension) =
[opencl] cl_khr_select_fprounding_mode (extension) =
[opencl] cl_khr_semaphore (extension) = CL_VERSION_1_2
[opencl] cl_khr_spir (extension) =
[opencl] cl_khr_srgb_image_writes (extension) =
[opencl] cl_khr_subgroup_ballot (extension) =
[opencl] cl_khr_subgroup_clustered_reduce (extension) =
[opencl] cl_khr_subgroup_extended_types (extension) =
[opencl] cl_khr_subgroup_named_barrier (extension) =
[opencl] cl_khr_subgroup_non_uniform_arithmetic (extension) =
[opencl] cl_khr_subgroup_non_uniform_vote (extension) =
[opencl] cl_khr_subgroup_rotate (extension) =
[opencl] cl_khr_subgroup_shuffle (extension) =
[opencl] cl_khr_subgroup_shuffle_relative (extension) =
[opencl] cl_khr_subgroups (extension) =
[opencl] cl_khr_suggested_local_work_size (extension) =
[opencl] cl_khr_terminate_context (extension) =
[opencl] cl_khr_throttle_hints (extension) =
[opencl] cl_khr_work_group_uniform_arithmetic (extension) =
[opencl] cl_loader_info (extension) =
[opencl] cl_loader_layers (extension) =
[opencl] cl_nv_device_attribute_query (extension) =
[opencl] cl_pocl_content_size (extension) =
[opencl] cl_qcom_android_native_buffer_host_ptr (extension) =
[opencl] cl_qcom_ext_host_ptr (extension) =
[opencl] cl_qcom_ext_host_ptr_iocoherent (extension) =
[opencl] cl_qcom_ion_host_ptr (extension) =
[opencl] CL_VERSION_1_0 =
[opencl] CL_VERSION_1_1 =
[opencl] CL_VERSION_1_2 =
[opencl] CL_VERSION_2_0 =
[opencl] CL_VERSION_2_1 =
[opencl] CL_VERSION_2_2 =
[opencl] CL_VERSION_3_0 =

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,73 @@
[glx] GLX_3DFX_multisample (extension) =
[glx] GLX_AMD_gpu_association (extension) =
[glx] GLX_ARB_context_flush_control (extension) =
[glx] GLX_ARB_create_context (extension) =
[glx] GLX_ARB_create_context_no_error (extension) =
[glx] GLX_ARB_create_context_profile (extension) =
[glx] GLX_ARB_create_context_robustness (extension) =
[glx] GLX_ARB_fbconfig_float (extension) =
[glx] GLX_ARB_framebuffer_sRGB (extension) =
[glx] GLX_ARB_get_proc_address (extension) =
[glx] GLX_ARB_multisample (extension) =
[glx] GLX_ARB_robustness_application_isolation (extension) =
[glx] GLX_ARB_robustness_share_group_isolation (extension) =
[glx] GLX_ARB_vertex_buffer_object (extension) =
[glx] GLX_EXT_buffer_age (extension) =
[glx] GLX_EXT_context_priority (extension) =
[glx] GLX_EXT_create_context_es_profile (extension) =
[glx] GLX_EXT_create_context_es2_profile (extension) =
[glx] GLX_EXT_fbconfig_packed_float (extension) =
[glx] GLX_EXT_framebuffer_sRGB (extension) =
[glx] GLX_EXT_get_drawable_type (extension) =
[glx] GLX_EXT_import_context (extension) =
[glx] GLX_EXT_libglvnd (extension) =
[glx] GLX_EXT_no_config_context (extension) =
[glx] GLX_EXT_stereo_tree (extension) =
[glx] GLX_EXT_swap_control (extension) =
[glx] GLX_EXT_swap_control_tear (extension) =
[glx] GLX_EXT_texture_from_pixmap (extension) =
[glx] GLX_EXT_visual_info (extension) =
[glx] GLX_EXT_visual_rating (extension) =
[glx] GLX_INTEL_swap_event (extension) =
[glx] GLX_MESA_agp_offset (extension) =
[glx] GLX_MESA_copy_sub_buffer (extension) =
[glx] GLX_MESA_pixmap_colormap (extension) =
[glx] GLX_MESA_query_renderer (extension) =
[glx] GLX_MESA_release_buffers (extension) =
[glx] GLX_MESA_set_3dfx_mode (extension) =
[glx] GLX_MESA_swap_control (extension) =
[glx] GLX_NV_copy_buffer (extension) =
[glx] GLX_NV_copy_image (extension) =
[glx] GLX_NV_delay_before_swap (extension) =
[glx] GLX_NV_float_buffer (extension) =
[glx] GLX_NV_multigpu_context (extension) =
[glx] GLX_NV_multisample_coverage (extension) =
[glx] GLX_NV_present_video (extension) =
[glx] GLX_NV_robustness_video_memory_purge (extension) =
[glx] GLX_NV_swap_group (extension) =
[glx] GLX_NV_video_capture (extension) =
[glx] GLX_NV_video_out (extension) =
[glx] GLX_OML_swap_method (extension) =
[glx] GLX_OML_sync_control (extension) =
[glx] GLX_SGI_cushion (extension) =
[glx] GLX_SGI_make_current_read (extension) =
[glx] GLX_SGI_swap_control (extension) =
[glx] GLX_SGI_video_sync (extension) =
[glx] GLX_SGIS_blended_overlay (extension) =
[glx] GLX_SGIS_multisample (extension) =
[glx] GLX_SGIS_shared_multisample (extension) =
[glx] GLX_SGIX_dmbuffer (extension) =
[glx] GLX_SGIX_fbconfig (extension) =
[glx] GLX_SGIX_hyperpipe (extension) =
[glx] GLX_SGIX_pbuffer (extension) =
[glx] GLX_SGIX_swap_barrier (extension) =
[glx] GLX_SGIX_swap_group (extension) =
[glx] GLX_SGIX_video_resize (extension) =
[glx] GLX_SGIX_video_source (extension) =
[glx] GLX_SGIX_visual_select_group (extension) =
[glx] GLX_SUN_get_transparent_index (extension) =
[glx] GLX_VERSION_1_0 =
[glx] GLX_VERSION_1_1 =
[glx] GLX_VERSION_1_2 =
[glx] GLX_VERSION_1_3 =
[glx] GLX_VERSION_1_4 =

Просмотреть файл

@ -0,0 +1,446 @@
[vulkan] VK_AMD_buffer_marker (extension) =
[vulkan] VK_AMD_device_coherent_memory (extension) = VK_AMD_device_coherent_memory+VK_KHR_get_physical_device_properties2, VK_AMD_device_coherent_memory+VK_VERSION_1_1
[vulkan] VK_AMD_display_native_hdr (extension) = VK_KHR_get_surface_capabilities2+VK_KHR_swapchain+VK_KHR_get_physical_device_properties2, VK_KHR_get_surface_capabilities2+VK_KHR_swapchain+VK_VERSION_1_1
[vulkan] VK_AMD_draw_indirect_count (extension) =
[vulkan] VK_AMD_gcn_shader (extension) =
[vulkan] VK_AMD_gpu_shader_half_float (extension) =
[vulkan] VK_AMD_gpu_shader_int16 (extension) =
[vulkan] VK_AMD_memory_overallocation_behavior (extension) =
[vulkan] VK_AMD_mixed_attachment_samples (extension) =
[vulkan] VK_AMD_negative_viewport_height (extension) =
[vulkan] VK_AMD_pipeline_compiler_control (extension) =
[vulkan] VK_AMD_rasterization_order (extension) =
[vulkan] VK_AMD_shader_ballot (extension) =
[vulkan] VK_AMD_shader_core_properties (extension) = VK_AMD_shader_core_properties+VK_KHR_get_physical_device_properties2, VK_AMD_shader_core_properties+VK_VERSION_1_1
[vulkan] VK_AMD_shader_core_properties2 (extension) = VK_AMD_shader_core_properties
[vulkan] VK_AMD_shader_early_and_late_fragment_tests (extension) = VK_AMD_shader_early_and_late_fragment_tests+VK_KHR_get_physical_device_properties2, VK_AMD_shader_early_and_late_fragment_tests+VK_VERSION_1_1
[vulkan] VK_AMD_shader_explicit_vertex_parameter (extension) =
[vulkan] VK_AMD_shader_fragment_mask (extension) =
[vulkan] VK_AMD_shader_image_load_store_lod (extension) =
[vulkan] VK_AMD_shader_info (extension) =
[vulkan] VK_AMD_shader_trinary_minmax (extension) =
[vulkan] VK_AMD_texture_gather_bias_lod (extension) = VK_AMD_texture_gather_bias_lod+VK_KHR_get_physical_device_properties2, VK_AMD_texture_gather_bias_lod+VK_VERSION_1_1
[vulkan] VK_AMDX_shader_enqueue (extension) = VK_KHR_pipeline_library+VK_KHR_spirv_1_4+VK_KHR_synchronization2+VK_KHR_get_physical_device_properties2, VK_KHR_pipeline_library+VK_KHR_spirv_1_4+VK_KHR_synchronization2+VK_VERSION_1_1, VK_KHR_pipeline_library+VK_KHR_spirv_1_4+VK_VERSION_1_3
[vulkan] VK_ANDROID_external_format_resolve (extension) = VK_ANDROID_external_memory_android_hardware_buffer
[vulkan] VK_ANDROID_external_memory_android_hardware_buffer (extension) = VK_EXT_queue_family_foreign+VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation, VK_EXT_queue_family_foreign+VK_VERSION_1_1
[vulkan] VK_ARM_rasterization_order_attachment_access (extension) = VK_ARM_rasterization_order_attachment_access+VK_KHR_get_physical_device_properties2, VK_ARM_rasterization_order_attachment_access+VK_VERSION_1_1
[vulkan] VK_ARM_render_pass_striped (extension) = VK_KHR_synchronization2+VK_KHR_get_physical_device_properties2, VK_KHR_synchronization2+VK_VERSION_1_1, VK_VERSION_1_3
[vulkan] VK_ARM_scheduling_controls (extension) = VK_ARM_shader_core_builtins
[vulkan] VK_ARM_shader_core_builtins (extension) = VK_ARM_shader_core_builtins+VK_KHR_get_physical_device_properties2, VK_ARM_shader_core_builtins+VK_VERSION_1_1
[vulkan] VK_ARM_shader_core_properties (extension) = VK_VERSION_1_1
[vulkan] VK_EXT_4444_formats (extension) = VK_EXT_4444_formats+VK_KHR_get_physical_device_properties2, VK_EXT_4444_formats+VK_VERSION_1_1
[vulkansc] VK_EXT_4444_formats (extension) = VK_EXT_4444_formats+VK_KHR_get_physical_device_properties2, VK_EXT_4444_formats+VK_VERSION_1_1
[vulkan] VK_EXT_acquire_drm_display (extension) = VK_EXT_direct_mode_display
[vulkan] VK_EXT_acquire_xlib_display (extension) = VK_EXT_direct_mode_display
[vulkansc] VK_EXT_application_parameters (extension) =
[vulkan] VK_EXT_astc_decode_mode (extension) = VK_EXT_astc_decode_mode+VK_KHR_get_physical_device_properties2, VK_EXT_astc_decode_mode+VK_VERSION_1_1
[vulkansc] VK_EXT_astc_decode_mode (extension) = VK_EXT_astc_decode_mode+VK_KHR_get_physical_device_properties2, VK_EXT_astc_decode_mode+VK_VERSION_1_1
[vulkan] VK_EXT_attachment_feedback_loop_dynamic_state (extension) = VK_EXT_attachment_feedback_loop_layout+VK_KHR_get_physical_device_properties2, VK_EXT_attachment_feedback_loop_layout+VK_VERSION_1_1
[vulkan] VK_EXT_attachment_feedback_loop_layout (extension) = VK_EXT_attachment_feedback_loop_layout+VK_KHR_get_physical_device_properties2, VK_EXT_attachment_feedback_loop_layout+VK_VERSION_1_1
[vulkan] VK_EXT_blend_operation_advanced (extension) = VK_EXT_blend_operation_advanced+VK_KHR_get_physical_device_properties2, VK_EXT_blend_operation_advanced+VK_VERSION_1_1
[vulkansc] VK_EXT_blend_operation_advanced (extension) = VK_EXT_blend_operation_advanced+VK_KHR_get_physical_device_properties2, VK_EXT_blend_operation_advanced+VK_VERSION_1_1
[vulkan] VK_EXT_border_color_swizzle (extension) = VK_EXT_custom_border_color
[vulkan] VK_EXT_buffer_device_address (extension) = VK_EXT_buffer_device_address+VK_KHR_get_physical_device_properties2, VK_EXT_buffer_device_address+VK_VERSION_1_1
[vulkan] VK_EXT_calibrated_timestamps (extension) = VK_EXT_calibrated_timestamps+VK_KHR_get_physical_device_properties2, VK_EXT_calibrated_timestamps+VK_VERSION_1_1
[vulkansc] VK_EXT_calibrated_timestamps (extension) = VK_EXT_calibrated_timestamps+VK_KHR_get_physical_device_properties2, VK_EXT_calibrated_timestamps+VK_VERSION_1_1
[vulkan] VK_EXT_color_write_enable (extension) = VK_EXT_color_write_enable+VK_KHR_get_physical_device_properties2, VK_EXT_color_write_enable+VK_VERSION_1_1
[vulkansc] VK_EXT_color_write_enable (extension) = VK_EXT_color_write_enable+VK_KHR_get_physical_device_properties2, VK_EXT_color_write_enable+VK_VERSION_1_1
[vulkan] VK_EXT_conditional_rendering (extension) = VK_EXT_conditional_rendering+VK_KHR_get_physical_device_properties2, VK_EXT_conditional_rendering+VK_VERSION_1_1
[vulkan] VK_EXT_conservative_rasterization (extension) = VK_EXT_conservative_rasterization+VK_KHR_get_physical_device_properties2, VK_EXT_conservative_rasterization+VK_VERSION_1_1
[vulkansc] VK_EXT_conservative_rasterization (extension) = VK_EXT_conservative_rasterization+VK_KHR_get_physical_device_properties2, VK_EXT_conservative_rasterization+VK_VERSION_1_1
[vulkan] VK_EXT_custom_border_color (extension) = VK_EXT_custom_border_color+VK_KHR_get_physical_device_properties2, VK_EXT_custom_border_color+VK_VERSION_1_1
[vulkansc] VK_EXT_custom_border_color (extension) = VK_EXT_custom_border_color+VK_KHR_get_physical_device_properties2, VK_EXT_custom_border_color+VK_VERSION_1_1
[vulkan] VK_EXT_debug_marker (extension) = VK_EXT_debug_report
[vulkan] VK_EXT_debug_report (extension) =
[vulkan] VK_EXT_debug_utils (extension) =
[vulkansc] VK_EXT_debug_utils (extension) =
[vulkan] VK_EXT_depth_bias_control (extension) = VK_EXT_depth_bias_control+VK_KHR_get_physical_device_properties2, VK_EXT_depth_bias_control+VK_VERSION_1_1
[vulkan] VK_EXT_depth_clamp_zero_one (extension) = VK_EXT_depth_clamp_zero_one+VK_KHR_get_physical_device_properties2, VK_EXT_depth_clamp_zero_one+VK_VERSION_1_1
[vulkan] VK_EXT_depth_clip_control (extension) = VK_EXT_depth_clip_control+VK_KHR_get_physical_device_properties2, VK_EXT_depth_clip_control+VK_VERSION_1_1
[vulkan] VK_EXT_depth_clip_enable (extension) = VK_EXT_depth_clip_enable+VK_KHR_get_physical_device_properties2, VK_EXT_depth_clip_enable+VK_VERSION_1_1
[vulkansc] VK_EXT_depth_clip_enable (extension) = VK_EXT_depth_clip_enable+VK_KHR_get_physical_device_properties2, VK_EXT_depth_clip_enable+VK_VERSION_1_1
[vulkan] VK_EXT_depth_range_unrestricted (extension) =
[vulkansc] VK_EXT_depth_range_unrestricted (extension) =
[vulkan] VK_EXT_descriptor_buffer (extension) = VK_KHR_synchronization2+VK_KHR_buffer_device_address+VK_EXT_descriptor_indexing+VK_KHR_get_physical_device_properties2, VK_KHR_synchronization2+VK_KHR_buffer_device_address+VK_EXT_descriptor_indexing+VK_VERSION_1_1, VK_KHR_synchronization2+VK_VERSION_1_2, VK_VERSION_1_3
[vulkan] VK_EXT_descriptor_indexing (extension) = VK_KHR_get_physical_device_properties2+VK_KHR_maintenance3, VK_VERSION_1_1
[vulkan] VK_EXT_device_address_binding_report (extension) = VK_EXT_debug_utils+VK_KHR_get_physical_device_properties2, VK_EXT_debug_utils+VK_VERSION_1_1
[vulkan] VK_EXT_device_fault (extension) = VK_EXT_device_fault+VK_KHR_get_physical_device_properties2, VK_EXT_device_fault+VK_VERSION_1_1
[vulkan] VK_EXT_device_memory_report (extension) = VK_EXT_device_memory_report+VK_KHR_get_physical_device_properties2, VK_EXT_device_memory_report+VK_VERSION_1_1
[vulkan] VK_EXT_direct_mode_display (extension) = VK_KHR_display
[vulkansc] VK_EXT_direct_mode_display (extension) = VK_KHR_display
[vulkan] VK_EXT_directfb_surface (extension) = VK_KHR_surface
[vulkan] VK_EXT_discard_rectangles (extension) = VK_EXT_discard_rectangles+VK_KHR_get_physical_device_properties2, VK_EXT_discard_rectangles+VK_VERSION_1_1
[vulkansc] VK_EXT_discard_rectangles (extension) = VK_EXT_discard_rectangles+VK_KHR_get_physical_device_properties2, VK_EXT_discard_rectangles+VK_VERSION_1_1
[vulkan] VK_EXT_display_control (extension) = VK_EXT_display_surface_counter, VK_KHR_swapchain
[vulkansc] VK_EXT_display_control (extension) = VK_EXT_display_surface_counter, VK_KHR_swapchain
[vulkan] VK_EXT_display_surface_counter (extension) = VK_KHR_display
[vulkansc] VK_EXT_display_surface_counter (extension) = VK_KHR_display
[vulkan] VK_EXT_dynamic_rendering_unused_attachments (extension) = VK_KHR_dynamic_rendering+VK_KHR_get_physical_device_properties2, VK_KHR_dynamic_rendering+VK_VERSION_1_1, VK_VERSION_1_3
[vulkan] VK_EXT_extended_dynamic_state (extension) = VK_EXT_extended_dynamic_state+VK_KHR_get_physical_device_properties2, VK_EXT_extended_dynamic_state+VK_VERSION_1_1
[vulkansc] VK_EXT_extended_dynamic_state (extension) = VK_EXT_extended_dynamic_state+VK_KHR_get_physical_device_properties2, VK_EXT_extended_dynamic_state+VK_VERSION_1_1
[vulkan] VK_EXT_extended_dynamic_state2 (extension) = VK_EXT_extended_dynamic_state2+VK_KHR_get_physical_device_properties2, VK_EXT_extended_dynamic_state2+VK_VERSION_1_1
[vulkansc] VK_EXT_extended_dynamic_state2 (extension) = VK_EXT_extended_dynamic_state2+VK_KHR_get_physical_device_properties2, VK_EXT_extended_dynamic_state2+VK_VERSION_1_1
[vulkan] VK_EXT_extended_dynamic_state3 (extension) = VK_EXT_extended_dynamic_state3+VK_KHR_get_physical_device_properties2, VK_EXT_extended_dynamic_state3+VK_VERSION_1_1
[vulkan] VK_EXT_external_memory_acquire_unmodified (extension) = VK_EXT_external_memory_acquire_unmodified+VK_KHR_external_memory, VK_EXT_external_memory_acquire_unmodified+VK_VERSION_1_1
[vulkan] VK_EXT_external_memory_dma_buf (extension) = VK_KHR_external_memory_fd
[vulkansc] VK_EXT_external_memory_dma_buf (extension) = VK_KHR_external_memory_fd
[vulkan] VK_EXT_external_memory_host (extension) = VK_EXT_external_memory_host+VK_KHR_external_memory, VK_EXT_external_memory_host+VK_VERSION_1_1
[vulkansc] VK_EXT_external_memory_host (extension) = VK_EXT_external_memory_host+VK_KHR_external_memory, VK_EXT_external_memory_host+VK_VERSION_1_1
[vulkan] VK_EXT_filter_cubic (extension) =
[vulkansc] VK_EXT_filter_cubic (extension) =
[vulkan] VK_EXT_fragment_density_map (extension) = VK_EXT_fragment_density_map+VK_KHR_get_physical_device_properties2, VK_EXT_fragment_density_map+VK_VERSION_1_1
[vulkan] VK_EXT_fragment_density_map2 (extension) = VK_EXT_fragment_density_map
[vulkan] VK_EXT_fragment_shader_interlock (extension) = VK_EXT_fragment_shader_interlock+VK_KHR_get_physical_device_properties2, VK_EXT_fragment_shader_interlock+VK_VERSION_1_1
[vulkansc] VK_EXT_fragment_shader_interlock (extension) = VK_EXT_fragment_shader_interlock+VK_KHR_get_physical_device_properties2, VK_EXT_fragment_shader_interlock+VK_VERSION_1_1
[vulkan] VK_EXT_frame_boundary (extension) =
[vulkan] VK_EXT_full_screen_exclusive (extension) = VK_KHR_surface+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain+VK_KHR_get_physical_device_properties2, VK_KHR_surface+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain+VK_VERSION_1_1
[vulkan] VK_EXT_global_priority (extension) =
[vulkansc] VK_EXT_global_priority (extension) =
[vulkan] VK_EXT_global_priority_query (extension) = VK_EXT_global_priority+VK_KHR_get_physical_device_properties2, VK_EXT_global_priority+VK_VERSION_1_1
[vulkan] VK_EXT_graphics_pipeline_library (extension) = VK_KHR_pipeline_library+VK_KHR_get_physical_device_properties2, VK_KHR_pipeline_library+VK_VERSION_1_1
[vulkan] VK_EXT_hdr_metadata (extension) = VK_KHR_swapchain
[vulkansc] VK_EXT_hdr_metadata (extension) = VK_KHR_swapchain
[vulkan] VK_EXT_headless_surface (extension) = VK_KHR_surface
[vulkansc] VK_EXT_headless_surface (extension) = VK_KHR_surface
[vulkan] VK_EXT_host_image_copy (extension) = VK_KHR_copy_commands2+VK_KHR_format_feature_flags2+VK_KHR_get_physical_device_properties2, VK_KHR_copy_commands2+VK_KHR_format_feature_flags2+VK_VERSION_1_1, VK_VERSION_1_3
[vulkan] VK_EXT_host_query_reset (extension) = VK_EXT_host_query_reset+VK_KHR_get_physical_device_properties2, VK_EXT_host_query_reset+VK_VERSION_1_1
[vulkan] VK_EXT_image_2d_view_of_3d (extension) = VK_KHR_maintenance1+VK_KHR_get_physical_device_properties2, VK_VERSION_1_1
[vulkan] VK_EXT_image_compression_control (extension) = VK_EXT_image_compression_control+VK_KHR_get_physical_device_properties2, VK_EXT_image_compression_control+VK_VERSION_1_1
[vulkan] VK_EXT_image_compression_control_swapchain (extension) = VK_EXT_image_compression_control
[vulkan] VK_EXT_image_drm_format_modifier (extension) = VK_KHR_image_format_list+VK_KHR_bind_memory2+VK_KHR_get_physical_device_properties2+VK_KHR_sampler_ycbcr_conversion, VK_KHR_image_format_list+VK_VERSION_1_1, VK_VERSION_1_2
[vulkansc] VK_EXT_image_drm_format_modifier (extension) = VK_KHR_image_format_list+VK_KHR_bind_memory2+VK_KHR_get_physical_device_properties2+VK_KHR_sampler_ycbcr_conversion, VK_KHR_image_format_list+VK_VERSION_1_1, VK_VERSION_1_2
[vulkan] VK_EXT_image_robustness (extension) = VK_EXT_image_robustness+VK_KHR_get_physical_device_properties2, VK_EXT_image_robustness+VK_VERSION_1_1
[vulkansc] VK_EXT_image_robustness (extension) = VK_EXT_image_robustness+VK_KHR_get_physical_device_properties2, VK_EXT_image_robustness+VK_VERSION_1_1
[vulkan] VK_EXT_image_sliced_view_of_3d (extension) = VK_KHR_maintenance1+VK_KHR_get_physical_device_properties2, VK_VERSION_1_1
[vulkan] VK_EXT_image_view_min_lod (extension) = VK_EXT_image_view_min_lod+VK_KHR_get_physical_device_properties2, VK_EXT_image_view_min_lod+VK_VERSION_1_1
[vulkan] VK_EXT_index_type_uint8 (extension) = VK_EXT_index_type_uint8+VK_KHR_get_physical_device_properties2, VK_EXT_index_type_uint8+VK_VERSION_1_1
[vulkansc] VK_EXT_index_type_uint8 (extension) = VK_EXT_index_type_uint8+VK_KHR_get_physical_device_properties2, VK_EXT_index_type_uint8+VK_VERSION_1_1
[vulkan] VK_EXT_inline_uniform_block (extension) = VK_KHR_get_physical_device_properties2+VK_KHR_maintenance1, VK_VERSION_1_1
[vulkan] VK_EXT_layer_settings (extension) =
[vulkan] VK_EXT_legacy_dithering (extension) = VK_EXT_legacy_dithering+VK_KHR_get_physical_device_properties2, VK_EXT_legacy_dithering+VK_VERSION_1_1
[vulkan] VK_EXT_line_rasterization (extension) = VK_EXT_line_rasterization+VK_KHR_get_physical_device_properties2, VK_EXT_line_rasterization+VK_VERSION_1_1
[vulkansc] VK_EXT_line_rasterization (extension) = VK_EXT_line_rasterization+VK_KHR_get_physical_device_properties2, VK_EXT_line_rasterization+VK_VERSION_1_1
[vulkan] VK_EXT_load_store_op_none (extension) =
[vulkan] VK_EXT_map_memory_placed (extension) = VK_KHR_map_memory2
[vulkan] VK_EXT_memory_budget (extension) = VK_EXT_memory_budget+VK_KHR_get_physical_device_properties2, VK_EXT_memory_budget+VK_VERSION_1_1
[vulkansc] VK_EXT_memory_budget (extension) = VK_EXT_memory_budget+VK_KHR_get_physical_device_properties2, VK_EXT_memory_budget+VK_VERSION_1_1
[vulkan] VK_EXT_memory_priority (extension) = VK_EXT_memory_priority+VK_KHR_get_physical_device_properties2, VK_EXT_memory_priority+VK_VERSION_1_1
[vulkan] VK_EXT_mesh_shader (extension) = VK_KHR_spirv_1_4
[vulkan] VK_EXT_metal_objects (extension) =
[vulkan] VK_EXT_metal_surface (extension) = VK_KHR_surface
[vulkan] VK_EXT_multi_draw (extension) = VK_EXT_multi_draw+VK_KHR_get_physical_device_properties2, VK_EXT_multi_draw+VK_VERSION_1_1
[vulkan] VK_EXT_multisampled_render_to_single_sampled (extension) = VK_KHR_create_renderpass2+VK_KHR_depth_stencil_resolve, VK_VERSION_1_2
[vulkan] VK_EXT_mutable_descriptor_type (extension) = VK_KHR_maintenance3
[vulkan] VK_EXT_nested_command_buffer (extension) = VK_EXT_nested_command_buffer+VK_KHR_get_physical_device_properties2, VK_EXT_nested_command_buffer+VK_VERSION_1_1
[vulkan] VK_EXT_non_seamless_cube_map (extension) = VK_EXT_non_seamless_cube_map+VK_KHR_get_physical_device_properties2, VK_EXT_non_seamless_cube_map+VK_VERSION_1_1
[vulkan] VK_EXT_opacity_micromap (extension) = VK_KHR_acceleration_structure+VK_KHR_synchronization2, VK_KHR_acceleration_structure+VK_VERSION_1_3
[vulkan] VK_EXT_pageable_device_local_memory (extension) = VK_EXT_memory_priority
[vulkan] VK_EXT_pci_bus_info (extension) = VK_EXT_pci_bus_info+VK_KHR_get_physical_device_properties2, VK_EXT_pci_bus_info+VK_VERSION_1_1
[vulkansc] VK_EXT_pci_bus_info (extension) = VK_EXT_pci_bus_info+VK_KHR_get_physical_device_properties2, VK_EXT_pci_bus_info+VK_VERSION_1_1
[vulkan] VK_EXT_physical_device_drm (extension) = VK_EXT_physical_device_drm+VK_KHR_get_physical_device_properties2, VK_EXT_physical_device_drm+VK_VERSION_1_1
[vulkan] VK_EXT_pipeline_creation_cache_control (extension) = VK_EXT_pipeline_creation_cache_control+VK_KHR_get_physical_device_properties2, VK_EXT_pipeline_creation_cache_control+VK_VERSION_1_1
[vulkan] VK_EXT_pipeline_creation_feedback (extension) =
[vulkan] VK_EXT_pipeline_library_group_handles (extension) = VK_KHR_pipeline_library, VK_KHR_ray_tracing_pipeline
[vulkan] VK_EXT_pipeline_properties (extension) = VK_EXT_pipeline_properties+VK_KHR_get_physical_device_properties2, VK_EXT_pipeline_properties+VK_VERSION_1_1
[vulkan] VK_EXT_pipeline_protected_access (extension) = VK_EXT_pipeline_protected_access+VK_KHR_get_physical_device_properties2, VK_EXT_pipeline_protected_access+VK_VERSION_1_1
[vulkan] VK_EXT_pipeline_robustness (extension) = VK_EXT_pipeline_robustness+VK_KHR_get_physical_device_properties2, VK_EXT_pipeline_robustness+VK_VERSION_1_1
[vulkan] VK_EXT_post_depth_coverage (extension) =
[vulkansc] VK_EXT_post_depth_coverage (extension) =
[vulkan] VK_EXT_primitive_topology_list_restart (extension) = VK_EXT_primitive_topology_list_restart+VK_KHR_get_physical_device_properties2, VK_EXT_primitive_topology_list_restart+VK_VERSION_1_1
[vulkan] VK_EXT_primitives_generated_query (extension) = VK_EXT_transform_feedback
[vulkan] VK_EXT_private_data (extension) = VK_EXT_private_data+VK_KHR_get_physical_device_properties2, VK_EXT_private_data+VK_VERSION_1_1
[vulkan] VK_EXT_provoking_vertex (extension) = VK_EXT_provoking_vertex+VK_KHR_get_physical_device_properties2, VK_EXT_provoking_vertex+VK_VERSION_1_1
[vulkan] VK_EXT_queue_family_foreign (extension) = VK_EXT_queue_family_foreign+VK_KHR_external_memory, VK_EXT_queue_family_foreign+VK_VERSION_1_1
[vulkansc] VK_EXT_queue_family_foreign (extension) = VK_EXT_queue_family_foreign+VK_KHR_external_memory, VK_EXT_queue_family_foreign+VK_VERSION_1_1
[vulkan] VK_EXT_rasterization_order_attachment_access (extension) = VK_EXT_rasterization_order_attachment_access+VK_KHR_get_physical_device_properties2, VK_EXT_rasterization_order_attachment_access+VK_VERSION_1_1
[vulkan] VK_EXT_rgba10x6_formats (extension) = VK_EXT_rgba10x6_formats+VK_KHR_sampler_ycbcr_conversion, VK_EXT_rgba10x6_formats+VK_VERSION_1_1
[vulkan] VK_EXT_robustness2 (extension) = VK_EXT_robustness2+VK_KHR_get_physical_device_properties2, VK_EXT_robustness2+VK_VERSION_1_1
[vulkansc] VK_EXT_robustness2 (extension) = VK_EXT_robustness2+VK_KHR_get_physical_device_properties2, VK_EXT_robustness2+VK_VERSION_1_1
[vulkan] VK_EXT_sample_locations (extension) = VK_EXT_sample_locations+VK_KHR_get_physical_device_properties2, VK_EXT_sample_locations+VK_VERSION_1_1
[vulkansc] VK_EXT_sample_locations (extension) = VK_EXT_sample_locations+VK_KHR_get_physical_device_properties2, VK_EXT_sample_locations+VK_VERSION_1_1
[vulkan] VK_EXT_sampler_filter_minmax (extension) = VK_EXT_sampler_filter_minmax+VK_KHR_get_physical_device_properties2, VK_EXT_sampler_filter_minmax+VK_VERSION_1_1
[vulkan] VK_EXT_scalar_block_layout (extension) = VK_EXT_scalar_block_layout+VK_KHR_get_physical_device_properties2, VK_EXT_scalar_block_layout+VK_VERSION_1_1
[vulkan] VK_EXT_separate_stencil_usage (extension) =
[vulkan] VK_EXT_shader_atomic_float (extension) = VK_EXT_shader_atomic_float+VK_KHR_get_physical_device_properties2, VK_EXT_shader_atomic_float+VK_VERSION_1_1
[vulkansc] VK_EXT_shader_atomic_float (extension) = VK_EXT_shader_atomic_float+VK_KHR_get_physical_device_properties2, VK_EXT_shader_atomic_float+VK_VERSION_1_1
[vulkan] VK_EXT_shader_atomic_float2 (extension) = VK_EXT_shader_atomic_float
[vulkan] VK_EXT_shader_demote_to_helper_invocation (extension) = VK_EXT_shader_demote_to_helper_invocation+VK_KHR_get_physical_device_properties2, VK_EXT_shader_demote_to_helper_invocation+VK_VERSION_1_1
[vulkansc] VK_EXT_shader_demote_to_helper_invocation (extension) = VK_EXT_shader_demote_to_helper_invocation+VK_KHR_get_physical_device_properties2, VK_EXT_shader_demote_to_helper_invocation+VK_VERSION_1_1
[vulkan] VK_EXT_shader_image_atomic_int64 (extension) = VK_EXT_shader_image_atomic_int64+VK_KHR_get_physical_device_properties2, VK_EXT_shader_image_atomic_int64+VK_VERSION_1_1
[vulkansc] VK_EXT_shader_image_atomic_int64 (extension) = VK_EXT_shader_image_atomic_int64+VK_KHR_get_physical_device_properties2, VK_EXT_shader_image_atomic_int64+VK_VERSION_1_1
[vulkan] VK_EXT_shader_module_identifier (extension) = VK_EXT_pipeline_creation_cache_control+VK_KHR_get_physical_device_properties2, VK_EXT_pipeline_creation_cache_control+VK_VERSION_1_1, VK_VERSION_1_3
[vulkan] VK_EXT_shader_object (extension) = VK_KHR_dynamic_rendering+VK_KHR_get_physical_device_properties2, VK_KHR_dynamic_rendering+VK_VERSION_1_1, VK_VERSION_1_3
[vulkan] VK_EXT_shader_stencil_export (extension) =
[vulkansc] VK_EXT_shader_stencil_export (extension) =
[vulkan] VK_EXT_shader_subgroup_ballot (extension) =
[vulkan] VK_EXT_shader_subgroup_vote (extension) =
[vulkan] VK_EXT_shader_tile_image (extension) = VK_VERSION_1_3
[vulkan] VK_EXT_shader_viewport_index_layer (extension) =
[vulkan] VK_EXT_subgroup_size_control (extension) = VK_VERSION_1_1
[vulkansc] VK_EXT_subgroup_size_control (extension) = VK_VERSION_1_1
[vulkan] VK_EXT_subpass_merge_feedback (extension) = VK_EXT_subpass_merge_feedback+VK_KHR_get_physical_device_properties2, VK_EXT_subpass_merge_feedback+VK_VERSION_1_1
[vulkan] VK_EXT_surface_maintenance1 (extension) = VK_KHR_get_surface_capabilities2, VK_KHR_surface
[vulkan] VK_EXT_swapchain_colorspace (extension) = VK_KHR_surface
[vulkansc] VK_EXT_swapchain_colorspace (extension) = VK_KHR_surface
[vulkan] VK_EXT_swapchain_maintenance1 (extension) = VK_KHR_swapchain+VK_EXT_surface_maintenance1+VK_KHR_get_physical_device_properties2, VK_KHR_swapchain+VK_EXT_surface_maintenance1+VK_VERSION_1_1
[vulkan] VK_EXT_texel_buffer_alignment (extension) = VK_EXT_texel_buffer_alignment+VK_KHR_get_physical_device_properties2, VK_EXT_texel_buffer_alignment+VK_VERSION_1_1
[vulkansc] VK_EXT_texel_buffer_alignment (extension) = VK_EXT_texel_buffer_alignment+VK_KHR_get_physical_device_properties2, VK_EXT_texel_buffer_alignment+VK_VERSION_1_1
[vulkan] VK_EXT_texture_compression_astc_hdr (extension) = VK_EXT_texture_compression_astc_hdr+VK_KHR_get_physical_device_properties2, VK_EXT_texture_compression_astc_hdr+VK_VERSION_1_1
[vulkansc] VK_EXT_texture_compression_astc_hdr (extension) = VK_EXT_texture_compression_astc_hdr+VK_KHR_get_physical_device_properties2, VK_EXT_texture_compression_astc_hdr+VK_VERSION_1_1
[vulkan] VK_EXT_tooling_info (extension) =
[vulkan] VK_EXT_transform_feedback (extension) = VK_EXT_transform_feedback+VK_KHR_get_physical_device_properties2, VK_EXT_transform_feedback+VK_VERSION_1_1
[vulkan] VK_EXT_validation_cache (extension) =
[vulkan] VK_EXT_validation_features (extension) =
[vulkansc] VK_EXT_validation_features (extension) =
[vulkan] VK_EXT_validation_flags (extension) =
[vulkan] VK_EXT_vertex_attribute_divisor (extension) = VK_EXT_vertex_attribute_divisor+VK_KHR_get_physical_device_properties2, VK_EXT_vertex_attribute_divisor+VK_VERSION_1_1
[vulkansc] VK_EXT_vertex_attribute_divisor (extension) = VK_EXT_vertex_attribute_divisor+VK_KHR_get_physical_device_properties2, VK_EXT_vertex_attribute_divisor+VK_VERSION_1_1
[vulkan] VK_EXT_vertex_input_dynamic_state (extension) = VK_EXT_vertex_input_dynamic_state+VK_KHR_get_physical_device_properties2, VK_EXT_vertex_input_dynamic_state+VK_VERSION_1_1
[vulkansc] VK_EXT_vertex_input_dynamic_state (extension) = VK_EXT_vertex_input_dynamic_state+VK_KHR_get_physical_device_properties2, VK_EXT_vertex_input_dynamic_state+VK_VERSION_1_1
[vulkan] VK_EXT_ycbcr_2plane_444_formats (extension) = VK_EXT_ycbcr_2plane_444_formats+VK_KHR_sampler_ycbcr_conversion, VK_EXT_ycbcr_2plane_444_formats+VK_VERSION_1_1
[vulkansc] VK_EXT_ycbcr_2plane_444_formats (extension) = VK_EXT_ycbcr_2plane_444_formats+VK_KHR_sampler_ycbcr_conversion, VK_EXT_ycbcr_2plane_444_formats+VK_VERSION_1_1
[vulkan] VK_EXT_ycbcr_image_arrays (extension) = VK_EXT_ycbcr_image_arrays+VK_KHR_sampler_ycbcr_conversion, VK_EXT_ycbcr_image_arrays+VK_VERSION_1_1
[vulkansc] VK_EXT_ycbcr_image_arrays (extension) = VK_EXT_ycbcr_image_arrays+VK_KHR_sampler_ycbcr_conversion, VK_EXT_ycbcr_image_arrays+VK_VERSION_1_1
[vulkan] VK_FUCHSIA_buffer_collection (extension) = VK_FUCHSIA_external_memory+VK_KHR_sampler_ycbcr_conversion, VK_FUCHSIA_external_memory+VK_VERSION_1_1
[vulkan] VK_FUCHSIA_external_memory (extension) = VK_KHR_external_memory_capabilities+VK_KHR_external_memory, VK_VERSION_1_1
[vulkan] VK_FUCHSIA_external_semaphore (extension) = VK_KHR_external_semaphore, VK_KHR_external_semaphore_capabilities
[vulkan] VK_FUCHSIA_imagepipe_surface (extension) = VK_KHR_surface
[vulkan] VK_GGP_frame_token (extension) = VK_GGP_stream_descriptor_surface, VK_KHR_swapchain
[vulkan] VK_GGP_stream_descriptor_surface (extension) = VK_KHR_surface
[vulkan] VK_GOOGLE_decorate_string (extension) =
[vulkan] VK_GOOGLE_display_timing (extension) = VK_KHR_swapchain
[vulkan] VK_GOOGLE_hlsl_functionality1 (extension) =
[vulkan] VK_GOOGLE_surfaceless_query (extension) = VK_KHR_surface
[vulkan] VK_GOOGLE_user_type (extension) =
[vulkan] VK_HUAWEI_cluster_culling_shader (extension) = VK_HUAWEI_cluster_culling_shader+VK_KHR_get_physical_device_properties2, VK_HUAWEI_cluster_culling_shader+VK_VERSION_1_1
[vulkan] VK_HUAWEI_invocation_mask (extension) = VK_KHR_ray_tracing_pipeline+VK_KHR_synchronization2, VK_KHR_ray_tracing_pipeline+VK_VERSION_1_3
[vulkan] VK_HUAWEI_subpass_shading (extension) = VK_KHR_synchronization2+VK_KHR_create_renderpass2, VK_KHR_synchronization2+VK_VERSION_1_2, VK_VERSION_1_3
[vulkan] VK_IMG_filter_cubic (extension) =
[vulkan] VK_IMG_format_pvrtc (extension) =
[vulkan] VK_IMG_relaxed_line_rasterization (extension) = VK_IMG_relaxed_line_rasterization+VK_KHR_get_physical_device_properties2, VK_IMG_relaxed_line_rasterization+VK_VERSION_1_1
[vulkan] VK_INTEL_performance_query (extension) =
[vulkan] VK_INTEL_shader_integer_functions2 (extension) = VK_INTEL_shader_integer_functions2+VK_KHR_get_physical_device_properties2, VK_INTEL_shader_integer_functions2+VK_VERSION_1_1
[vulkan] VK_KHR_16bit_storage (extension) = VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class, VK_VERSION_1_1
[vulkan] VK_KHR_8bit_storage (extension) = VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class, VK_VERSION_1_1
[vulkan] VK_KHR_acceleration_structure (extension) = VK_KHR_deferred_host_operations+VK_VERSION_1_1+VK_EXT_descriptor_indexing+VK_KHR_buffer_device_address, VK_KHR_deferred_host_operations+VK_VERSION_1_2
[vulkan] VK_KHR_android_surface (extension) = VK_KHR_surface
[vulkan] VK_KHR_bind_memory2 (extension) =
[vulkan] VK_KHR_buffer_device_address (extension) = VK_KHR_get_physical_device_properties2+VK_KHR_device_group, VK_VERSION_1_1
[vulkan] VK_KHR_calibrated_timestamps (extension) = VK_KHR_calibrated_timestamps+VK_KHR_get_physical_device_properties2, VK_KHR_calibrated_timestamps+VK_VERSION_1_1
[vulkan] VK_KHR_cooperative_matrix (extension) = VK_KHR_cooperative_matrix+VK_KHR_get_physical_device_properties2, VK_KHR_cooperative_matrix+VK_VERSION_1_1
[vulkan] VK_KHR_copy_commands2 (extension) = VK_KHR_copy_commands2+VK_KHR_get_physical_device_properties2, VK_KHR_copy_commands2+VK_VERSION_1_1
[vulkansc] VK_KHR_copy_commands2 (extension) = VK_KHR_copy_commands2+VK_KHR_get_physical_device_properties2, VK_KHR_copy_commands2+VK_VERSION_1_1
[vulkan] VK_KHR_create_renderpass2 (extension) = VK_KHR_multiview+VK_KHR_maintenance2, VK_VERSION_1_1
[vulkan] VK_KHR_dedicated_allocation (extension) = VK_KHR_dedicated_allocation+VK_KHR_get_memory_requirements2, VK_KHR_dedicated_allocation+VK_VERSION_1_1
[vulkan] VK_KHR_deferred_host_operations (extension) =
[vulkan] VK_KHR_depth_stencil_resolve (extension) = VK_KHR_depth_stencil_resolve+VK_KHR_create_renderpass2, VK_KHR_depth_stencil_resolve+VK_VERSION_1_2
[vulkan] VK_KHR_descriptor_update_template (extension) =
[vulkan] VK_KHR_device_group (extension) = VK_KHR_device_group_creation
[vulkan] VK_KHR_device_group_creation (extension) =
[vulkan] VK_KHR_display (extension) = VK_KHR_surface
[vulkansc] VK_KHR_display (extension) = VK_KHR_surface
[vulkan] VK_KHR_display_swapchain (extension) = VK_KHR_display, VK_KHR_swapchain
[vulkansc] VK_KHR_display_swapchain (extension) = VK_KHR_display, VK_KHR_swapchain
[vulkan] VK_KHR_draw_indirect_count (extension) =
[vulkan] VK_KHR_driver_properties (extension) = VK_KHR_driver_properties+VK_KHR_get_physical_device_properties2, VK_KHR_driver_properties+VK_VERSION_1_1
[vulkan] VK_KHR_dynamic_rendering (extension) = VK_KHR_depth_stencil_resolve+VK_KHR_get_physical_device_properties2, VK_KHR_depth_stencil_resolve+VK_VERSION_1_1, VK_VERSION_1_2
[vulkan] VK_KHR_dynamic_rendering_local_read (extension) = VK_KHR_dynamic_rendering_local_read+VK_KHR_dynamic_rendering, VK_KHR_dynamic_rendering_local_read+VK_VERSION_1_3
[vulkan] VK_KHR_external_fence (extension) = VK_KHR_external_fence_capabilities
[vulkan] VK_KHR_external_fence_capabilities (extension) = VK_KHR_external_fence_capabilities+VK_KHR_get_physical_device_properties2, VK_KHR_external_fence_capabilities+VK_VERSION_1_1
[vulkan] VK_KHR_external_fence_fd (extension) = VK_KHR_external_fence_fd+VK_KHR_external_fence, VK_KHR_external_fence_fd+VK_VERSION_1_1
[vulkansc] VK_KHR_external_fence_fd (extension) = VK_KHR_external_fence_fd+VK_KHR_external_fence, VK_KHR_external_fence_fd+VK_VERSION_1_1
[vulkan] VK_KHR_external_fence_win32 (extension) = VK_KHR_external_fence
[vulkan] VK_KHR_external_memory (extension) = VK_KHR_external_memory+VK_KHR_external_memory_capabilities, VK_KHR_external_memory+VK_VERSION_1_1
[vulkan] VK_KHR_external_memory_capabilities (extension) = VK_KHR_external_memory_capabilities+VK_KHR_get_physical_device_properties2, VK_KHR_external_memory_capabilities+VK_VERSION_1_1
[vulkan] VK_KHR_external_memory_fd (extension) = VK_KHR_external_memory_fd+VK_KHR_external_memory, VK_KHR_external_memory_fd+VK_VERSION_1_1
[vulkansc] VK_KHR_external_memory_fd (extension) = VK_KHR_external_memory_fd+VK_KHR_external_memory, VK_KHR_external_memory_fd+VK_VERSION_1_1
[vulkan] VK_KHR_external_memory_win32 (extension) = VK_KHR_external_memory_win32+VK_KHR_external_memory, VK_KHR_external_memory_win32+VK_VERSION_1_1
[vulkan] VK_KHR_external_semaphore (extension) = VK_KHR_external_semaphore_capabilities
[vulkan] VK_KHR_external_semaphore_capabilities (extension) = VK_KHR_external_semaphore_capabilities+VK_KHR_get_physical_device_properties2, VK_KHR_external_semaphore_capabilities+VK_VERSION_1_1
[vulkan] VK_KHR_external_semaphore_fd (extension) = VK_KHR_external_semaphore_fd+VK_KHR_external_semaphore, VK_KHR_external_semaphore_fd+VK_VERSION_1_1
[vulkansc] VK_KHR_external_semaphore_fd (extension) = VK_KHR_external_semaphore_fd+VK_KHR_external_semaphore, VK_KHR_external_semaphore_fd+VK_VERSION_1_1
[vulkan] VK_KHR_external_semaphore_win32 (extension) = VK_KHR_external_semaphore
[vulkan] VK_KHR_format_feature_flags2 (extension) = VK_KHR_format_feature_flags2+VK_KHR_get_physical_device_properties2, VK_KHR_format_feature_flags2+VK_VERSION_1_1
[vulkan] VK_KHR_fragment_shader_barycentric (extension) = VK_KHR_fragment_shader_barycentric+VK_KHR_get_physical_device_properties2, VK_KHR_fragment_shader_barycentric+VK_VERSION_1_1
[vulkan] VK_KHR_fragment_shading_rate (extension) = VK_KHR_create_renderpass2+VK_KHR_get_physical_device_properties2, VK_KHR_create_renderpass2+VK_VERSION_1_1, VK_VERSION_1_2
[vulkansc] VK_KHR_fragment_shading_rate (extension) = VK_KHR_create_renderpass2+VK_KHR_get_physical_device_properties2, VK_KHR_create_renderpass2+VK_VERSION_1_1, VK_VERSION_1_2
[vulkan] VK_KHR_get_display_properties2 (extension) = VK_KHR_display
[vulkansc] VK_KHR_get_display_properties2 (extension) = VK_KHR_display
[vulkan] VK_KHR_get_memory_requirements2 (extension) =
[vulkan] VK_KHR_get_physical_device_properties2 (extension) =
[vulkan] VK_KHR_get_surface_capabilities2 (extension) = VK_KHR_surface
[vulkansc] VK_KHR_get_surface_capabilities2 (extension) = VK_KHR_surface
[vulkan] VK_KHR_global_priority (extension) = VK_KHR_global_priority+VK_KHR_get_physical_device_properties2, VK_KHR_global_priority+VK_VERSION_1_1
[vulkan] VK_KHR_image_format_list (extension) =
[vulkan] VK_KHR_imageless_framebuffer (extension) = VK_KHR_image_format_list+VK_KHR_get_physical_device_properties2+VK_KHR_maintenance2, VK_KHR_image_format_list+VK_VERSION_1_1, VK_VERSION_1_2
[vulkan] VK_KHR_incremental_present (extension) = VK_KHR_swapchain
[vulkansc] VK_KHR_incremental_present (extension) = VK_KHR_swapchain
[vulkan] VK_KHR_index_type_uint8 (extension) = VK_KHR_index_type_uint8+VK_KHR_get_physical_device_properties2, VK_KHR_index_type_uint8+VK_VERSION_1_1
[vulkan] VK_KHR_line_rasterization (extension) = VK_KHR_line_rasterization+VK_KHR_get_physical_device_properties2, VK_KHR_line_rasterization+VK_VERSION_1_1
[vulkan] VK_KHR_load_store_op_none (extension) =
[vulkan] VK_KHR_maintenance1 (extension) =
[vulkan] VK_KHR_maintenance2 (extension) =
[vulkan] VK_KHR_maintenance3 (extension) = VK_KHR_maintenance3+VK_KHR_get_physical_device_properties2, VK_KHR_maintenance3+VK_VERSION_1_1
[vulkan] VK_KHR_maintenance4 (extension) = VK_VERSION_1_1
[vulkan] VK_KHR_maintenance5 (extension) = VK_VERSION_1_1+VK_KHR_dynamic_rendering, VK_VERSION_1_3
[vulkan] VK_KHR_maintenance6 (extension) = VK_VERSION_1_1
[vulkan] VK_KHR_map_memory2 (extension) =
[vulkan] VK_KHR_multiview (extension) = VK_KHR_multiview+VK_KHR_get_physical_device_properties2, VK_KHR_multiview+VK_VERSION_1_1
[vulkansc] VK_KHR_object_refresh (extension) =
[vulkan] VK_KHR_performance_query (extension) = VK_KHR_performance_query+VK_KHR_get_physical_device_properties2, VK_KHR_performance_query+VK_VERSION_1_1
[vulkansc] VK_KHR_performance_query (extension) = VK_KHR_performance_query+VK_KHR_get_physical_device_properties2, VK_KHR_performance_query+VK_VERSION_1_1
[vulkan] VK_KHR_pipeline_executable_properties (extension) = VK_KHR_pipeline_executable_properties+VK_KHR_get_physical_device_properties2, VK_KHR_pipeline_executable_properties+VK_VERSION_1_1
[vulkan] VK_KHR_pipeline_library (extension) =
[vulkan] VK_KHR_portability_enumeration (extension) =
[vulkan] VK_KHR_portability_subset (extension) = VK_KHR_portability_subset+VK_KHR_get_physical_device_properties2, VK_KHR_portability_subset+VK_VERSION_1_1
[vulkan] VK_KHR_present_id (extension) = VK_KHR_swapchain+VK_KHR_get_physical_device_properties2, VK_KHR_swapchain+VK_VERSION_1_1
[vulkan] VK_KHR_present_wait (extension) = VK_KHR_present_id, VK_KHR_swapchain
[vulkan] VK_KHR_push_descriptor (extension) = VK_KHR_push_descriptor+VK_KHR_get_physical_device_properties2, VK_KHR_push_descriptor+VK_VERSION_1_1
[vulkan] VK_KHR_ray_query (extension) = VK_KHR_acceleration_structure, VK_KHR_spirv_1_4
[vulkan] VK_KHR_ray_tracing_maintenance1 (extension) = VK_KHR_acceleration_structure
[vulkan] VK_KHR_ray_tracing_pipeline (extension) = VK_KHR_acceleration_structure, VK_KHR_spirv_1_4
[vulkan] VK_KHR_ray_tracing_position_fetch (extension) = VK_KHR_acceleration_structure
[vulkan] VK_KHR_relaxed_block_layout (extension) =
[vulkan] VK_KHR_sampler_mirror_clamp_to_edge (extension) =
[vulkan] VK_KHR_sampler_ycbcr_conversion (extension) = VK_KHR_maintenance1+VK_KHR_bind_memory2+VK_KHR_get_memory_requirements2+VK_KHR_get_physical_device_properties2, VK_VERSION_1_1
[vulkan] VK_KHR_separate_depth_stencil_layouts (extension) = VK_KHR_create_renderpass2+VK_KHR_get_physical_device_properties2, VK_KHR_create_renderpass2+VK_VERSION_1_1, VK_VERSION_1_2
[vulkan] VK_KHR_shader_atomic_int64 (extension) = VK_KHR_shader_atomic_int64+VK_KHR_get_physical_device_properties2, VK_KHR_shader_atomic_int64+VK_VERSION_1_1
[vulkan] VK_KHR_shader_clock (extension) = VK_KHR_shader_clock+VK_KHR_get_physical_device_properties2, VK_KHR_shader_clock+VK_VERSION_1_1
[vulkansc] VK_KHR_shader_clock (extension) = VK_KHR_shader_clock+VK_KHR_get_physical_device_properties2, VK_KHR_shader_clock+VK_VERSION_1_1
[vulkan] VK_KHR_shader_draw_parameters (extension) =
[vulkan] VK_KHR_shader_expect_assume (extension) = VK_KHR_shader_expect_assume+VK_KHR_get_physical_device_properties2, VK_KHR_shader_expect_assume+VK_VERSION_1_1
[vulkan] VK_KHR_shader_float_controls (extension) = VK_KHR_shader_float_controls+VK_KHR_get_physical_device_properties2, VK_KHR_shader_float_controls+VK_VERSION_1_1
[vulkan] VK_KHR_shader_float_controls2 (extension) = VK_KHR_shader_float_controls, VK_VERSION_1_1
[vulkan] VK_KHR_shader_float16_int8 (extension) = VK_KHR_shader_float16_int8+VK_KHR_get_physical_device_properties2, VK_KHR_shader_float16_int8+VK_VERSION_1_1
[vulkan] VK_KHR_shader_integer_dot_product (extension) = VK_KHR_shader_integer_dot_product+VK_KHR_get_physical_device_properties2, VK_KHR_shader_integer_dot_product+VK_VERSION_1_1
[vulkan] VK_KHR_shader_maximal_reconvergence (extension) = VK_VERSION_1_1
[vulkan] VK_KHR_shader_non_semantic_info (extension) =
[vulkan] VK_KHR_shader_quad_control (extension) = VK_KHR_shader_maximal_reconvergence, VK_KHR_vulkan_memory_model, VK_VERSION_1_1
[vulkan] VK_KHR_shader_subgroup_extended_types (extension) = VK_VERSION_1_1
[vulkan] VK_KHR_shader_subgroup_rotate (extension) =
[vulkan] VK_KHR_shader_subgroup_uniform_control_flow (extension) = VK_VERSION_1_1
[vulkan] VK_KHR_shader_terminate_invocation (extension) = VK_KHR_shader_terminate_invocation+VK_KHR_get_physical_device_properties2, VK_KHR_shader_terminate_invocation+VK_VERSION_1_1
[vulkansc] VK_KHR_shader_terminate_invocation (extension) = VK_KHR_shader_terminate_invocation+VK_KHR_get_physical_device_properties2, VK_KHR_shader_terminate_invocation+VK_VERSION_1_1
[vulkan] VK_KHR_shared_presentable_image (extension) = VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+VK_KHR_get_physical_device_properties2, VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+VK_VERSION_1_1
[vulkansc] VK_KHR_shared_presentable_image (extension) = VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+VK_KHR_get_physical_device_properties2, VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+VK_VERSION_1_1
[vulkan] VK_KHR_spirv_1_4 (extension) = VK_KHR_shader_float_controls, VK_VERSION_1_1
[vulkan] VK_KHR_storage_buffer_storage_class (extension) =
[vulkan] VK_KHR_surface (extension) =
[vulkansc] VK_KHR_surface (extension) =
[vulkan] VK_KHR_surface_protected_capabilities (extension) = VK_KHR_get_surface_capabilities2, VK_VERSION_1_1
[vulkan] VK_KHR_swapchain (extension) = VK_KHR_surface
[vulkansc] VK_KHR_swapchain (extension) = VK_KHR_surface
[vulkan] VK_KHR_swapchain_mutable_format (extension) = VK_KHR_swapchain+VK_KHR_maintenance2+VK_KHR_image_format_list, VK_KHR_swapchain+VK_KHR_maintenance2+VK_VERSION_1_2, VK_KHR_swapchain+VK_VERSION_1_1+VK_KHR_image_format_list, VK_KHR_swapchain+VK_VERSION_1_1+VK_VERSION_1_2
[vulkansc] VK_KHR_swapchain_mutable_format (extension) = VK_KHR_swapchain+VK_KHR_maintenance2+VK_KHR_image_format_list, VK_KHR_swapchain+VK_KHR_maintenance2+VK_VERSION_1_2, VK_KHR_swapchain+VK_VERSION_1_1+VK_KHR_image_format_list, VK_KHR_swapchain+VK_VERSION_1_1+VK_VERSION_1_2
[vulkan] VK_KHR_synchronization2 (extension) = VK_KHR_synchronization2+VK_KHR_get_physical_device_properties2, VK_KHR_synchronization2+VK_VERSION_1_1
[vulkansc] VK_KHR_synchronization2 (extension) = VK_KHR_synchronization2+VK_KHR_get_physical_device_properties2, VK_KHR_synchronization2+VK_VERSION_1_1
[vulkan] VK_KHR_timeline_semaphore (extension) = VK_KHR_timeline_semaphore+VK_KHR_get_physical_device_properties2, VK_KHR_timeline_semaphore+VK_VERSION_1_1
[vulkan] VK_KHR_uniform_buffer_standard_layout (extension) = VK_KHR_uniform_buffer_standard_layout+VK_KHR_get_physical_device_properties2, VK_KHR_uniform_buffer_standard_layout+VK_VERSION_1_1
[vulkan] VK_KHR_variable_pointers (extension) = VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class, VK_VERSION_1_1
[vulkan] VK_KHR_vertex_attribute_divisor (extension) = VK_KHR_vertex_attribute_divisor+VK_KHR_get_physical_device_properties2, VK_KHR_vertex_attribute_divisor+VK_VERSION_1_1
[vulkan] VK_KHR_video_decode_av1 (extension) = VK_KHR_video_decode_queue
[vulkan] VK_KHR_video_decode_h264 (extension) = VK_KHR_video_decode_queue
[vulkan] VK_KHR_video_decode_h265 (extension) = VK_KHR_video_decode_queue
[vulkan] VK_KHR_video_decode_queue (extension) = VK_KHR_video_queue+VK_KHR_synchronization2, VK_KHR_video_queue+VK_VERSION_1_3
[vulkan] VK_KHR_video_encode_h264 (extension) = VK_KHR_video_encode_queue
[vulkan] VK_KHR_video_encode_h265 (extension) = VK_KHR_video_encode_queue
[vulkan] VK_KHR_video_encode_queue (extension) = VK_KHR_video_queue+VK_KHR_synchronization2, VK_KHR_video_queue+VK_VERSION_1_3
[vulkan] VK_KHR_video_maintenance1 (extension) = VK_KHR_video_queue
[vulkan] VK_KHR_video_queue (extension) = VK_VERSION_1_1+VK_KHR_synchronization2, VK_VERSION_1_3
[vulkan] VK_KHR_vulkan_memory_model (extension) = VK_KHR_vulkan_memory_model+VK_KHR_get_physical_device_properties2, VK_KHR_vulkan_memory_model+VK_VERSION_1_1
[vulkan] VK_KHR_wayland_surface (extension) = VK_KHR_surface
[vulkan] VK_KHR_win32_keyed_mutex (extension) = VK_KHR_external_memory_win32
[vulkan] VK_KHR_win32_surface (extension) = VK_KHR_surface
[vulkan] VK_KHR_workgroup_memory_explicit_layout (extension) = VK_KHR_workgroup_memory_explicit_layout+VK_KHR_get_physical_device_properties2, VK_KHR_workgroup_memory_explicit_layout+VK_VERSION_1_1
[vulkan] VK_KHR_xcb_surface (extension) = VK_KHR_surface
[vulkan] VK_KHR_xlib_surface (extension) = VK_KHR_surface
[vulkan] VK_KHR_zero_initialize_workgroup_memory (extension) = VK_KHR_zero_initialize_workgroup_memory+VK_KHR_get_physical_device_properties2, VK_KHR_zero_initialize_workgroup_memory+VK_VERSION_1_1
[vulkan] VK_LUNARG_direct_driver_loading (extension) =
[vulkan] VK_MSFT_layered_driver (extension) = VK_MSFT_layered_driver+VK_KHR_get_physical_device_properties2, VK_MSFT_layered_driver+VK_VERSION_1_1
[vulkan] VK_MVK_ios_surface (extension) = VK_KHR_surface
[vulkan] VK_MVK_macos_surface (extension) = VK_KHR_surface
[vulkan] VK_NN_vi_surface (extension) = VK_KHR_surface
[vulkan] VK_NV_acquire_winrt_display (extension) = VK_EXT_direct_mode_display
[vulkan] VK_NV_clip_space_w_scaling (extension) =
[vulkan] VK_NV_compute_shader_derivatives (extension) = VK_NV_compute_shader_derivatives+VK_KHR_get_physical_device_properties2, VK_NV_compute_shader_derivatives+VK_VERSION_1_1
[vulkan] VK_NV_cooperative_matrix (extension) = VK_NV_cooperative_matrix+VK_KHR_get_physical_device_properties2, VK_NV_cooperative_matrix+VK_VERSION_1_1
[vulkan] VK_NV_copy_memory_indirect (extension) = VK_KHR_buffer_device_address+VK_KHR_get_physical_device_properties2, VK_KHR_buffer_device_address+VK_VERSION_1_1, VK_VERSION_1_2
[vulkan] VK_NV_corner_sampled_image (extension) = VK_NV_corner_sampled_image+VK_KHR_get_physical_device_properties2, VK_NV_corner_sampled_image+VK_VERSION_1_1
[vulkan] VK_NV_coverage_reduction_mode (extension) = VK_NV_framebuffer_mixed_samples+VK_KHR_get_physical_device_properties2, VK_NV_framebuffer_mixed_samples+VK_VERSION_1_1
[vulkan] VK_NV_cuda_kernel_launch (extension) =
[vulkan] VK_NV_dedicated_allocation (extension) =
[vulkan] VK_NV_dedicated_allocation_image_aliasing (extension) = VK_KHR_dedicated_allocation+VK_KHR_get_physical_device_properties2, VK_VERSION_1_1
[vulkan] VK_NV_descriptor_pool_overallocation (extension) = VK_VERSION_1_1
[vulkan] VK_NV_device_diagnostic_checkpoints (extension) = VK_NV_device_diagnostic_checkpoints+VK_KHR_get_physical_device_properties2, VK_NV_device_diagnostic_checkpoints+VK_VERSION_1_1
[vulkan] VK_NV_device_diagnostics_config (extension) = VK_NV_device_diagnostics_config+VK_KHR_get_physical_device_properties2, VK_NV_device_diagnostics_config+VK_VERSION_1_1
[vulkan] VK_NV_device_generated_commands (extension) = VK_VERSION_1_1+VK_KHR_buffer_device_address, VK_VERSION_1_2
[vulkan] VK_NV_device_generated_commands_compute (extension) = VK_NV_device_generated_commands
[vulkan] VK_NV_displacement_micromap (extension) = VK_EXT_opacity_micromap
[vulkan] VK_NV_extended_sparse_address_space (extension) =
[vulkan] VK_NV_external_memory (extension) = VK_NV_external_memory_capabilities
[vulkan] VK_NV_external_memory_capabilities (extension) =
[vulkan] VK_NV_external_memory_rdma (extension) = VK_NV_external_memory_rdma+VK_KHR_external_memory, VK_NV_external_memory_rdma+VK_VERSION_1_1
[vulkansc] VK_NV_external_memory_sci_buf (extension) = VK_VERSION_1_1
[vulkan] VK_NV_external_memory_win32 (extension) = VK_NV_external_memory
[vulkansc] VK_NV_external_sci_sync (extension) = VK_VERSION_1_1
[vulkansc] VK_NV_external_sci_sync2 (extension) = VK_VERSION_1_1
[vulkan] VK_NV_fill_rectangle (extension) =
[vulkan] VK_NV_fragment_coverage_to_color (extension) =
[vulkan] VK_NV_fragment_shader_barycentric (extension) = VK_NV_fragment_shader_barycentric+VK_KHR_get_physical_device_properties2, VK_NV_fragment_shader_barycentric+VK_VERSION_1_1
[vulkan] VK_NV_fragment_shading_rate_enums (extension) = VK_KHR_fragment_shading_rate
[vulkan] VK_NV_framebuffer_mixed_samples (extension) =
[vulkan] VK_NV_geometry_shader_passthrough (extension) =
[vulkan] VK_NV_glsl_shader (extension) =
[vulkan] VK_NV_inherited_viewport_scissor (extension) = VK_NV_inherited_viewport_scissor+VK_KHR_get_physical_device_properties2, VK_NV_inherited_viewport_scissor+VK_VERSION_1_1
[vulkan] VK_NV_linear_color_attachment (extension) = VK_NV_linear_color_attachment+VK_KHR_get_physical_device_properties2, VK_NV_linear_color_attachment+VK_VERSION_1_1
[vulkan] VK_NV_low_latency (extension) =
[vulkan] VK_NV_low_latency2 (extension) = VK_NV_low_latency2+VK_KHR_timeline_semaphore, VK_NV_low_latency2+VK_VERSION_1_2
[vulkan] VK_NV_memory_decompression (extension) = VK_KHR_buffer_device_address+VK_KHR_get_physical_device_properties2, VK_KHR_buffer_device_address+VK_VERSION_1_1, VK_VERSION_1_2
[vulkan] VK_NV_mesh_shader (extension) = VK_NV_mesh_shader+VK_KHR_get_physical_device_properties2, VK_NV_mesh_shader+VK_VERSION_1_1
[vulkan] VK_NV_optical_flow (extension) = VK_KHR_format_feature_flags2+VK_KHR_synchronization2+VK_KHR_get_physical_device_properties2, VK_KHR_format_feature_flags2+VK_KHR_synchronization2+VK_VERSION_1_1, VK_VERSION_1_3
[vulkan] VK_NV_per_stage_descriptor_set (extension) = VK_KHR_maintenance6
[vulkan] VK_NV_present_barrier (extension) = VK_KHR_surface+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain+VK_KHR_get_physical_device_properties2, VK_KHR_surface+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain+VK_VERSION_1_1
[vulkansc] VK_NV_private_vendor_info (extension) =
[vulkan] VK_NV_raw_access_chains (extension) =
[vulkan] VK_NV_ray_tracing (extension) = VK_KHR_get_physical_device_properties2+VK_KHR_get_memory_requirements2, VK_VERSION_1_1
[vulkan] VK_NV_ray_tracing_invocation_reorder (extension) = VK_KHR_ray_tracing_pipeline
[vulkan] VK_NV_ray_tracing_motion_blur (extension) = VK_KHR_ray_tracing_pipeline
[vulkan] VK_NV_ray_tracing_validation (extension) =
[vulkan] VK_NV_representative_fragment_test (extension) = VK_NV_representative_fragment_test+VK_KHR_get_physical_device_properties2, VK_NV_representative_fragment_test+VK_VERSION_1_1
[vulkan] VK_NV_sample_mask_override_coverage (extension) =
[vulkan] VK_NV_scissor_exclusive (extension) = VK_NV_scissor_exclusive+VK_KHR_get_physical_device_properties2, VK_NV_scissor_exclusive+VK_VERSION_1_1
[vulkan] VK_NV_shader_atomic_float16_vector (extension) =
[vulkan] VK_NV_shader_image_footprint (extension) = VK_NV_shader_image_footprint+VK_KHR_get_physical_device_properties2, VK_NV_shader_image_footprint+VK_VERSION_1_1
[vulkan] VK_NV_shader_sm_builtins (extension) = VK_VERSION_1_1
[vulkan] VK_NV_shader_subgroup_partitioned (extension) = VK_VERSION_1_1
[vulkan] VK_NV_shading_rate_image (extension) = VK_NV_shading_rate_image+VK_KHR_get_physical_device_properties2, VK_NV_shading_rate_image+VK_VERSION_1_1
[vulkan] VK_NV_viewport_array2 (extension) =
[vulkan] VK_NV_viewport_swizzle (extension) =
[vulkan] VK_NV_win32_keyed_mutex (extension) = VK_NV_external_memory_win32
[vulkan] VK_NVX_binary_import (extension) =
[vulkan] VK_NVX_image_view_handle (extension) =
[vulkan] VK_NVX_multiview_per_view_attributes (extension) = VK_NVX_multiview_per_view_attributes+VK_KHR_multiview, VK_NVX_multiview_per_view_attributes+VK_VERSION_1_1
[vulkan] VK_QCOM_filter_cubic_clamp (extension) = VK_EXT_filter_cubic+VK_EXT_sampler_filter_minmax, VK_EXT_filter_cubic+VK_VERSION_1_2
[vulkan] VK_QCOM_filter_cubic_weights (extension) = VK_EXT_filter_cubic
[vulkan] VK_QCOM_fragment_density_map_offset (extension) = VK_EXT_fragment_density_map+VK_KHR_get_physical_device_properties2, VK_EXT_fragment_density_map+VK_VERSION_1_1
[vulkan] VK_QCOM_image_processing (extension) = VK_QCOM_image_processing+VK_KHR_format_feature_flags2, VK_QCOM_image_processing+VK_VERSION_1_3
[vulkan] VK_QCOM_image_processing2 (extension) = VK_QCOM_image_processing
[vulkan] VK_QCOM_multiview_per_view_render_areas (extension) =
[vulkan] VK_QCOM_multiview_per_view_viewports (extension) = VK_QCOM_multiview_per_view_viewports+VK_KHR_get_physical_device_properties2, VK_QCOM_multiview_per_view_viewports+VK_VERSION_1_1
[vulkan] VK_QCOM_render_pass_shader_resolve (extension) =
[vulkan] VK_QCOM_render_pass_store_ops (extension) =
[vulkan] VK_QCOM_render_pass_transform (extension) =
[vulkan] VK_QCOM_rotated_copy_commands (extension) = VK_QCOM_rotated_copy_commands+VK_KHR_copy_commands2, VK_QCOM_rotated_copy_commands+VK_VERSION_1_3
[vulkan] VK_QCOM_tile_properties (extension) = VK_QCOM_tile_properties+VK_KHR_get_physical_device_properties2, VK_QCOM_tile_properties+VK_VERSION_1_1
[vulkan] VK_QCOM_ycbcr_degamma (extension) =
[vulkan] VK_QNX_external_memory_screen_buffer (extension) = VK_EXT_queue_family_foreign+VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation, VK_EXT_queue_family_foreign+VK_VERSION_1_1
[vulkansc] VK_QNX_external_memory_screen_buffer (extension) = VK_EXT_queue_family_foreign+VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation, VK_EXT_queue_family_foreign+VK_VERSION_1_1
[vulkan] VK_QNX_screen_surface (extension) = VK_KHR_surface
[vulkan] VK_SEC_amigo_profiling (extension) = VK_SEC_amigo_profiling+VK_KHR_get_physical_device_properties2, VK_SEC_amigo_profiling+VK_VERSION_1_1
[vulkan] VK_VALVE_descriptor_set_host_mapping (extension) = VK_VALVE_descriptor_set_host_mapping+VK_KHR_get_physical_device_properties2, VK_VALVE_descriptor_set_host_mapping+VK_VERSION_1_1
[vulkan] VK_VALVE_mutable_descriptor_type (extension) = VK_KHR_maintenance3
[vulkan] VK_VERSION_1_0 =
[vulkan] VK_VERSION_1_1 =
[vulkan] VK_VERSION_1_2 =
[vulkan] VK_VERSION_1_3 =
[vulkansc] VKSC_VERSION_1_0 = VK_VERSION_1_0, VK_VERSION_1_1, VK_VERSION_1_2, VK_VERSION_1_3

Просмотреть файл

@ -0,0 +1,58 @@
[wgl] WGL_3DFX_multisample (extension) =
[wgl] WGL_3DL_stereo_control (extension) =
[wgl] WGL_AMD_gpu_association (extension) =
[wgl] WGL_ARB_buffer_region (extension) =
[wgl] WGL_ARB_context_flush_control (extension) =
[wgl] WGL_ARB_create_context (extension) =
[wgl] WGL_ARB_create_context_no_error (extension) =
[wgl] WGL_ARB_create_context_profile (extension) =
[wgl] WGL_ARB_create_context_robustness (extension) =
[wgl] WGL_ARB_extensions_string (extension) =
[wgl] WGL_ARB_framebuffer_sRGB (extension) =
[wgl] WGL_ARB_make_current_read (extension) =
[wgl] WGL_ARB_multisample (extension) =
[wgl] WGL_ARB_pbuffer (extension) =
[wgl] WGL_ARB_pixel_format (extension) =
[wgl] WGL_ARB_pixel_format_float (extension) =
[wgl] WGL_ARB_render_texture (extension) =
[wgl] WGL_ARB_robustness_application_isolation (extension) =
[wgl] WGL_ARB_robustness_share_group_isolation (extension) =
[wgl] WGL_ATI_pixel_format_float (extension) =
[wgl] WGL_ATI_render_texture_rectangle (extension) =
[wgl] WGL_EXT_colorspace (extension) =
[wgl] WGL_EXT_create_context_es_profile (extension) =
[wgl] WGL_EXT_create_context_es2_profile (extension) =
[wgl] WGL_EXT_depth_float (extension) =
[wgl] WGL_EXT_display_color_table (extension) =
[wgl] WGL_EXT_extensions_string (extension) =
[wgl] WGL_EXT_framebuffer_sRGB (extension) =
[wgl] WGL_EXT_make_current_read (extension) =
[wgl] WGL_EXT_multisample (extension) =
[wgl] WGL_EXT_pbuffer (extension) =
[wgl] WGL_EXT_pixel_format (extension) =
[wgl] WGL_EXT_pixel_format_packed_float (extension) =
[wgl] WGL_EXT_swap_control (extension) =
[wgl] WGL_EXT_swap_control_tear (extension) =
[wgl] WGL_I3D_digital_video_control (extension) =
[wgl] WGL_I3D_gamma (extension) =
[wgl] WGL_I3D_genlock (extension) =
[wgl] WGL_I3D_image_buffer (extension) =
[wgl] WGL_I3D_swap_frame_lock (extension) =
[wgl] WGL_I3D_swap_frame_usage (extension) =
[wgl] WGL_NV_copy_image (extension) =
[wgl] WGL_NV_delay_before_swap (extension) =
[wgl] WGL_NV_DX_interop (extension) =
[wgl] WGL_NV_DX_interop2 (extension) =
[wgl] WGL_NV_float_buffer (extension) =
[wgl] WGL_NV_gpu_affinity (extension) =
[wgl] WGL_NV_multigpu_context (extension) =
[wgl] WGL_NV_multisample_coverage (extension) =
[wgl] WGL_NV_present_video (extension) =
[wgl] WGL_NV_render_depth_texture (extension) =
[wgl] WGL_NV_render_texture_rectangle (extension) =
[wgl] WGL_NV_swap_group (extension) =
[wgl] WGL_NV_vertex_array_range (extension) =
[wgl] WGL_NV_video_capture (extension) =
[wgl] WGL_NV_video_output (extension) =
[wgl] WGL_OML_sync_control (extension) =
[wgl] WGL_VERSION_1_0 =

Просмотреть файл

@ -0,0 +1,97 @@
NOTE: This file lists differences/regressions between 3.0's enum grouping system baselined against 2.21's. If this file is non-empty and verified, it means the regressions have been justified. Justified differences are usually as a result of a discrepancy between the regression baseline JSON and the baseline XML.
Removed Group: cl_intel_device_side_avc_motion_estimation_??
Added Group: cl_arm_device_svm_capabilities_flags
Added: CL_DEVICE_SVM_ATOMICS_ARM
Added: CL_DEVICE_SVM_COARSE_GRAIN_BUFFER_ARM
Added: CL_DEVICE_SVM_FINE_GRAIN_BUFFER_ARM
Added: CL_DEVICE_SVM_FINE_GRAIN_SYSTEM_ARM
Added Group: cl_arm_svm_alloc_flags
Added: CL_MEM_SVM_ATOMICS_ARM
Added: CL_MEM_SVM_FINE_GRAIN_BUFFER_ARM
Existing Group: cl_command_queue_properties
Added: CL_QUEUE_RESERVED_QCOM
Added Group: cl_device_command_buffer_capabilities_khr
Added: CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR
Added: CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR
Added: CL_COMMAND_BUFFER_CAPABILITY_MULTIPLE_QUEUE_KHR
Added: CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR
Added: CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR
Existing Group: cl_device_partition_property_ext
Added: CL_AFFINITY_DOMAIN_L1_CACHE_EXT
Added: CL_AFFINITY_DOMAIN_L2_CACHE_EXT
Added: CL_AFFINITY_DOMAIN_L3_CACHE_EXT
Added: CL_AFFINITY_DOMAIN_L4_CACHE_EXT
Added: CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT
Added: CL_AFFINITY_DOMAIN_NUMA_EXT
Added Group: cl_intel_device_side_avc_motion_estimation_intra
Added: CL_AVC_ME_INTRA_16x16_INTEL
Added: CL_AVC_ME_INTRA_4x4_INTEL
Added: CL_AVC_ME_INTRA_8x8_INTEL
Added Group: cl_intel_driver_diagnostics
Added: CL_CONTEXT_DIAGNOSTICS_LEVEL_ALL_INTEL
Added: CL_CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL
Added: CL_CONTEXT_DIAGNOSTICS_LEVEL_GOOD_INTEL
Added: CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL
Existing Group: cl_mem_flags
Added: CL_MEM_RESERVED0_ARM
Added: CL_MEM_RESERVED0_QCOM
Added: CL_MEM_RESERVED1_ARM
Added: CL_MEM_RESERVED1_QCOM
Added: CL_MEM_RESERVED2_ARM
Added: CL_MEM_RESERVED2_QCOM
Added: CL_MEM_RESERVED21_INTEL
Added: CL_MEM_RESERVED22_INTEL
Added: CL_MEM_RESERVED3_ARM
Added: CL_MEM_RESERVED3_QCOM
Existing Group: cl_mem_migration_flags
Added: CL_MIGRATE_MEM_OBJECT_HOST_EXT
Added Group: cl_platform_command_buffer_capabilities_khr
Added: CL_COMMAND_BUFFER_PLATFORM_AUTOMATIC_REMAP_KHR
Added: CL_COMMAND_BUFFER_PLATFORM_REMAP_QUEUES_KHR
Added: CL_COMMAND_BUFFER_PLATFORM_UNIVERSAL_SYNC_KHR
Added Group: cl_queue_properties_khr
Added Group: cl_semaphore_type_khr
Added: CL_SEMAPHORE_TYPE_BINARY_KHR
Existing Group: cl_svm_mem_flags
Added: CL_MEM_ALLOC_HOST_PTR
Added: CL_MEM_COPY_HOST_PTR
Added: CL_MEM_HOST_NO_ACCESS
Added: CL_MEM_HOST_READ_ONLY
Added: CL_MEM_HOST_WRITE_ONLY
Added: CL_MEM_KERNEL_READ_AND_WRITE
Added: CL_MEM_READ_ONLY
Added: CL_MEM_READ_WRITE
Added: CL_MEM_SVM_ATOMICS
Added: CL_MEM_SVM_FINE_GRAIN_BUFFER
Added: CL_MEM_USE_HOST_PTR
Added: CL_MEM_WRITE_ONLY
Added Group: cl_unified_shared_memory_capabilities_intel
Added: CL_UNIFIED_SHARED_MEMORY_ACCESS_INTEL
Added: CL_UNIFIED_SHARED_MEMORY_ATOMIC_ACCESS_INTEL
Added: CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ACCESS_INTEL
Added: CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ATOMIC_ACCESS_INTEL
Existing Group: ErrorCodes
Added: CL_ERROR_RESERVED0_IMG
Added: CL_ERROR_RESERVED1_IMG
Added: CL_ERROR_RESERVED2_IMG
Added: CL_ERROR_RESERVED3_IMG
Added: CL_PIPE_EMPTY_INTEL
Added: CL_PIPE_FULL_INTEL
Unchanged: allocation_type, cl_accelerator_info_intel, cl_accelerator_type_intel, cl_addressing_mode, cl_affinity_domain_ext, cl_bool, cl_buffer_create_type, cl_build_status, cl_channel_order, cl_channel_type, cl_command_buffer_flags_khr, cl_command_buffer_info_khr, cl_command_buffer_properties_khr, cl_command_buffer_state_khr, cl_command_buffer_structure_type_khr, cl_command_queue_capabilities_intel, cl_command_queue_info, cl_command_termination_reason_arm, cl_command_type, cl_context_info, cl_context_memory_initialize_khr, cl_context_properties, cl_d3d10_device_set_khr, cl_d3d10_device_source_khr, cl_d3d11_device_set_khr, cl_d3d11_device_source_khr, cl_device_affinity_domain, cl_device_atomic_capabilities, cl_device_command_buffer_capabilities_khr, cl_device_controlled_termination_capabilities_arm, cl_device_device_enqueue_capabilities, cl_device_exec_capabilities, cl_device_feature_capabilities_intel, cl_device_fp_atomic_capabilities_ext, cl_device_fp_config, cl_device_info, cl_device_integer_dot_product_capabilities_khr, cl_device_local_mem_type, cl_device_mem_cache_type, cl_device_partition_property, cl_device_scheduling_controls_capabilities_arm, cl_device_svm_capabilities, cl_device_svm_capabilities_arm, cl_device_terminate_capability_khr, cl_device_type, cl_device_unified_shared_memory_capabilities_intel, cl_dx9_device_set_intel, cl_dx9_device_source_intel, cl_egl_image_properties_khr, cl_event_info, cl_external_memory_handle_type_khr, cl_external_semaphore_handle_type_khr, cl_filter_mode, cl_gl_context_info, cl_gl_object_type, cl_gl_texture_info, cl_icdl_info, cl_image_info, cl_image_pitch_info_qcom, cl_image_requirements_info_ext, cl_import_properties_arm, cl_intel_advanced_motion_estimation_cl_motion_detect_desc_intel, cl_intel_advanced_motion_estimation_cl_motion_detect_desc_intel_2, cl_intel_advanced_motion_estimation_device_me_version, cl_intel_advanced_motion_estimation_flags, cl_intel_advanced_motion_estimation_intra_search_prediction_modes_buffer_chroma_block, cl_intel_advanced_motion_estimation_intra_search_prediction_modes_buffer_luma_block, cl_intel_advanced_motion_estimation_search_cost_penalty, cl_intel_advanced_motion_estimation_search_cost_precision, cl_intel_advanced_motion_estimation_skip_block_type, cl_intel_device_side_avc_motion_estimation_adjust, cl_intel_device_side_avc_motion_estimation_border, cl_intel_device_side_avc_motion_estimation_cost_precision, cl_intel_device_side_avc_motion_estimation_frame_dir, cl_intel_device_side_avc_motion_estimation_intra_luma, cl_intel_device_side_avc_motion_estimation_intra_neighbor, cl_intel_device_side_avc_motion_estimation_luma_predictor, cl_intel_device_side_avc_motion_estimation_major, cl_intel_device_side_avc_motion_estimation_major_dir, cl_intel_device_side_avc_motion_estimation_minor, cl_intel_device_side_avc_motion_estimation_partition, cl_intel_device_side_avc_motion_estimation_scan_dir, cl_intel_device_side_avc_motion_estimation_skip, cl_intel_device_side_avc_motion_estimation_skip_block_based, cl_intel_device_side_avc_motion_estimation_skip_dir, cl_intel_device_side_avc_motion_estimation_slice, cl_intel_device_side_avc_motion_estimation_subpixel, cl_intel_device_side_avc_motion_estimation_version, cl_intel_device_side_avc_motion_estimation_weight, cl_intel_device_side_avc_motion_estimation_window, cl_kernel_arg_access_qualifier, cl_kernel_arg_address_qualifier, cl_kernel_arg_info, cl_kernel_arg_type_qualifier, cl_kernel_exec_info, cl_kernel_exec_info_arm, cl_kernel_info, cl_kernel_sub_group_info, cl_kernel_work_group_info, cl_khronos_vendor_id, cl_layer_info, cl_map_flags, cl_media_adapter_set_khr, cl_media_adapter_type_khr, cl_mem_alloc_flags_img, cl_mem_alloc_flags_intel, cl_mem_alloc_info_intel, cl_mem_info, cl_mem_migration_flags_ext, cl_mem_object_type, cl_mem_properties, cl_mem_properties_intel, cl_mipmap_filter_mode_img, cl_motion_estimation_desc_intel_mb_block_type, cl_motion_estimation_desc_intel_sad_adjust_mode, cl_motion_estimation_desc_intel_search_path_type, cl_motion_estimation_desc_intel_subpixel_mode, cl_mutable_command_info_khr, cl_mutable_dispatch_asserts_khr, cl_mutable_dispatch_fields_khr, cl_ndrange_kernel_command_properties_khr, cl_pipe_info, cl_platform_command_buffer_capabilities_khr, cl_platform_info, cl_profiling_info, cl_program_binary_type, cl_program_build_info, cl_program_info, cl_queue_priority_khr, cl_queue_properties, cl_queue_throttle_khr, cl_sampler_info, cl_sampler_properties, cl_semaphore_info_khr, cl_semaphore_properties_khr, cl_semaphore_reimport_properties_khr, cl_semaphore_type, cl_svm_mem_flags_arm, cl_unified_shared_memory_type_intel, cl_va_api_device_set_intel, cl_va_api_device_source_intel, clCommandExecutionStatus, host_cache_policy

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,294 @@
__GLX_NUMBER_EVENTS = GLXEventCodes
GLX_3DFX_FULLSCREEN_MODE_MESA = GLXMesa3DFXMode
GLX_3DFX_WINDOW_MODE_MESA = GLXMesa3DFXMode
GLX_ACCUM_ALPHA_SIZE = GLXAttribute, GLXEnum
GLX_ACCUM_BLUE_SIZE = GLXAttribute, GLXEnum
GLX_ACCUM_BUFFER_BIT = GLXPbufferClobberMask
GLX_ACCUM_BUFFER_BIT_SGIX = GLXPbufferClobberMask
GLX_ACCUM_GREEN_SIZE = GLXAttribute, GLXEnum
GLX_ACCUM_RED_SIZE = GLXAttribute, GLXEnum
GLX_ALPHA_SIZE = GLXAttribute, GLXEnum
GLX_AUX_BUFFERS = GLXAttribute, GLXEnum
GLX_AUX_BUFFERS_BIT = GLXPbufferClobberMask
GLX_AUX_BUFFERS_BIT_SGIX = GLXPbufferClobberMask
GLX_AUX0_EXT = GLXEnum
GLX_AUX1_EXT = GLXEnum
GLX_AUX2_EXT = GLXEnum
GLX_AUX3_EXT = GLXEnum
GLX_AUX4_EXT = GLXEnum
GLX_AUX5_EXT = GLXEnum
GLX_AUX6_EXT = GLXEnum
GLX_AUX7_EXT = GLXEnum
GLX_AUX8_EXT = GLXEnum
GLX_AUX9_EXT = GLXEnum
GLX_BACK_BUFFER_AGE_EXT = GLXEnum
GLX_BACK_EXT = GLXEnum
GLX_BACK_LEFT_BUFFER_BIT = GLXPbufferClobberMask
GLX_BACK_LEFT_BUFFER_BIT_SGIX = GLXPbufferClobberMask
GLX_BACK_LEFT_EXT = GLXEnum
GLX_BACK_RIGHT_BUFFER_BIT = GLXPbufferClobberMask
GLX_BACK_RIGHT_BUFFER_BIT_SGIX = GLXPbufferClobberMask
GLX_BACK_RIGHT_EXT = GLXEnum
GLX_BAD_ATTRIBUTE = GLXErrorCode
GLX_BAD_CONTEXT = GLXErrorCode
GLX_BAD_ENUM = GLXErrorCode
GLX_BAD_HYPERPIPE_CONFIG_SGIX = GLXErrorCode
GLX_BAD_HYPERPIPE_SGIX = GLXErrorCode
GLX_BAD_SCREEN = GLXErrorCode
GLX_BAD_VALUE = GLXErrorCode
GLX_BAD_VISUAL = GLXErrorCode
GLX_BIND_TO_MIPMAP_TEXTURE_EXT = GLXEnum
GLX_BIND_TO_TEXTURE_RGB_EXT = GLXEnum
GLX_BIND_TO_TEXTURE_RGBA_EXT = GLXEnum
GLX_BIND_TO_TEXTURE_TARGETS_EXT = GLXEnum
GLX_BLENDED_RGBA_SGIS = GLXEnum
GLX_BLUE_SIZE = GLXAttribute, GLXEnum
GLX_BUFFER_CLOBBER_MASK_SGIX = GLXEventMask
GLX_BUFFER_SIZE = GLXAttribute, GLXEnum
GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK = GLXEventMask
GLX_BufferSwapComplete = GLXEventCodes
GLX_COLOR_INDEX_BIT = GLXRenderTypeMask
GLX_COLOR_INDEX_BIT_SGIX = GLXRenderTypeMask
GLX_COLOR_INDEX_TYPE = GLXEnum
GLX_COLOR_INDEX_TYPE_SGIX = GLXEnum
GLX_COLOR_SAMPLES_NV = GLXEnum
GLX_CONFIG_CAVEAT = GLXAttribute, GLXEnum
GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB = GLXEnum
GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = GLXContextProfileMask
GLX_CONTEXT_CORE_PROFILE_BIT_ARB = GLXContextProfileMask
GLX_CONTEXT_DEBUG_BIT_ARB = GLXContextFlags
GLX_CONTEXT_ES_PROFILE_BIT_EXT = GLXContextProfileMask
GLX_CONTEXT_ES2_PROFILE_BIT_EXT = GLXContextProfileMask
GLX_CONTEXT_FLAGS_ARB = GLXEnum
GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = GLXContextFlags
GLX_CONTEXT_MAJOR_VERSION_ARB = GLXEnum
GLX_CONTEXT_MINOR_VERSION_ARB = GLXEnum
GLX_CONTEXT_MULTIGPU_ATTRIB_AFR_NV = GLXEnum
GLX_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV = GLXEnum
GLX_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV = GLXEnum
GLX_CONTEXT_MULTIGPU_ATTRIB_NV = GLXEnum
GLX_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV = GLXEnum
GLX_CONTEXT_OPENGL_NO_ERROR_ARB = GLXEnum
GLX_CONTEXT_PRIORITY_HIGH_EXT = GLXEnum
GLX_CONTEXT_PRIORITY_LEVEL_EXT = GLXEnum
GLX_CONTEXT_PRIORITY_LOW_EXT = GLXEnum
GLX_CONTEXT_PRIORITY_MEDIUM_EXT = GLXEnum
GLX_CONTEXT_PROFILE_MASK_ARB = GLXEnum
GLX_CONTEXT_RELEASE_BEHAVIOR_ARB = GLXEnum
GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB = GLXEnum
GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB = GLXEnum
GLX_CONTEXT_RESET_ISOLATION_BIT_ARB = GLXContextFlags
GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB = GLEnum
GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB = GLXContextFlags
GLX_COPY_COMPLETE_INTEL = GLXEnum
GLX_COVERAGE_SAMPLES_NV = GLXEnum
GLX_DAMAGED = GLXEnum
GLX_DAMAGED_SGIX = GLXEnum
GLX_DEPTH_BUFFER_BIT = GLXPbufferClobberMask
GLX_DEPTH_BUFFER_BIT_SGIX = GLXPbufferClobberMask
GLX_DEPTH_SIZE = GLXAttribute, GLXEnum
GLX_DEVICE_ID_NV = GLXEnum
GLX_DIGITAL_MEDIA_PBUFFER_SGIX = GLXEnum
GLX_DIRECT_COLOR = GLXEnum
GLX_DIRECT_COLOR_EXT = GLXEnum
GLX_DONT_CARE = GLXEnum
GLX_DOUBLEBUFFER = GLXAttribute, GLXEnum
GLX_DRAWABLE_TYPE = GLXEnum
GLX_DRAWABLE_TYPE_SGIX = GLXEnum
GLX_EVENT_MASK = GLXEnum
GLX_EVENT_MASK_SGIX = GLXEnum
GLX_EXCHANGE_COMPLETE_INTEL = GLXEnum
GLX_EXTENSION_NAME = GLXStrings
GLX_EXTENSIONS = GLXStringName
GLX_FBCONFIG_ID = GLXEnum
GLX_FBCONFIG_ID_SGIX = GLXEnum
GLX_FLIP_COMPLETE_INTEL = GLXEnum
GLX_FLOAT_COMPONENTS_NV = GLXEnum
GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB = GLXEnum
GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT = GLXEnum
GLX_FRONT_EXT = GLXEnum
GLX_FRONT_LEFT_BUFFER_BIT = GLXPbufferClobberMask
GLX_FRONT_LEFT_BUFFER_BIT_SGIX = GLXPbufferClobberMask
GLX_FRONT_LEFT_EXT = GLXEnum
GLX_FRONT_RIGHT_BUFFER_BIT = GLXPbufferClobberMask
GLX_FRONT_RIGHT_BUFFER_BIT_SGIX = GLXPbufferClobberMask
GLX_FRONT_RIGHT_EXT = GLXEnum
GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV = GLXEnum
GLX_GPU_CLOCK_AMD = GLXEnum
GLX_GPU_FASTEST_TARGET_GPUS_AMD = GLXEnum
GLX_GPU_NUM_PIPES_AMD = GLXEnum
GLX_GPU_NUM_RB_AMD = GLXEnum
GLX_GPU_NUM_SIMD_AMD = GLXEnum
GLX_GPU_NUM_SPI_AMD = GLXEnum
GLX_GPU_OPENGL_VERSION_STRING_AMD = GLXEnum
GLX_GPU_RAM_AMD = GLXEnum
GLX_GPU_RENDERER_STRING_AMD = GLXEnum
GLX_GPU_VENDOR_AMD = GLXEnum
GLX_GRAY_SCALE = GLXEnum
GLX_GRAY_SCALE_EXT = GLXEnum
GLX_GREEN_SIZE = GLXAttribute, GLXEnum
GLX_HEIGHT = GLXEnum
GLX_HEIGHT_SGIX = GLXEnum
GLX_HYPERPIPE_DISPLAY_PIPE_SGIX = GLXHyperpipeTypeMask
GLX_HYPERPIPE_ID_SGIX = GLXEnum
GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX = GLXHyperpipeMiscSGIX
GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX = GLXHyperpipeAttribSGIX
GLX_HYPERPIPE_RENDER_PIPE_SGIX = GLXHyperpipeTypeMask
GLX_HYPERPIPE_STEREO_SGIX = GLXHyperpipeAttribSGIX
GLX_LARGEST_PBUFFER = GLXEnum
GLX_LARGEST_PBUFFER_SGIX = GLXEnum
GLX_LATE_SWAPS_TEAR_EXT = GLXEnum
GLX_LEVEL = GLXAttribute, GLXEnum
GLX_LOSE_CONTEXT_ON_RESET_ARB = GLEnum
GLX_MAX_PBUFFER_HEIGHT = GLXEnum
GLX_MAX_PBUFFER_HEIGHT_SGIX = GLXEnum
GLX_MAX_PBUFFER_PIXELS = GLXEnum
GLX_MAX_PBUFFER_PIXELS_SGIX = GLXEnum
GLX_MAX_PBUFFER_WIDTH = GLXEnum
GLX_MAX_PBUFFER_WIDTH_SGIX = GLXEnum
GLX_MAX_SWAP_INTERVAL_EXT = GLXEnum
GLX_MIPMAP_TEXTURE_EXT = GLXEnum
GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS = GLXEnum
GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS = GLXEnum
GLX_NO_EXTENSION = GLXErrorCode
GLX_NO_RESET_NOTIFICATION_ARB = GLEnum
GLX_NON_CONFORMANT_CONFIG = GLXEnum
GLX_NON_CONFORMANT_VISUAL_EXT = GLXEnum
GLX_NONE = GLXEnum
GLX_NONE_EXT = GLXEnum
GLX_NUM_VIDEO_CAPTURE_SLOTS_NV = GLXEnum
GLX_NUM_VIDEO_SLOTS_NV = GLXEnum
GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX = GLXEnum
GLX_OPTIMAL_PBUFFER_WIDTH_SGIX = GLXEnum
GLX_PBUFFER = GLXEnum
GLX_PBUFFER_BIT = GLXDrawableTypeMask
GLX_PBUFFER_BIT_SGIX = GLXDrawableTypeMask
GLX_PBUFFER_CLOBBER_MASK = GLXEventMask
GLX_PBUFFER_HEIGHT = GLXEnum
GLX_PBUFFER_SGIX = GLXEnum
GLX_PBUFFER_WIDTH = GLXEnum
GLX_PbufferClobber = GLXEventCodes
GLX_PIPE_RECT_LIMITS_SGIX = GLXHyperpipeAttribSGIX
GLX_PIPE_RECT_SGIX = GLXHyperpipeAttribSGIX
GLX_PIXMAP_BIT = GLXDrawableTypeMask
GLX_PIXMAP_BIT_SGIX = GLXDrawableTypeMask
GLX_PRESERVED_CONTENTS = GLXEnum
GLX_PRESERVED_CONTENTS_SGIX = GLXEnum
GLX_PSEUDO_COLOR = GLXEnum
GLX_PSEUDO_COLOR_EXT = GLXEnum
GLX_RED_SIZE = GLXAttribute, GLXEnum
GLX_RENDER_TYPE = GLXEnum
GLX_RENDER_TYPE_SGIX = GLXEnum
GLX_RENDERER_ACCELERATED_MESA = GLXEnum
GLX_RENDERER_DEVICE_ID_MESA = GLXEnum
GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA = GLXEnum
GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA = GLXEnum
GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA = GLXEnum
GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA = GLXEnum
GLX_RENDERER_PREFERRED_PROFILE_MESA = GLXEnum
GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA = GLXEnum
GLX_RENDERER_VENDOR_ID_MESA = GLXEnum
GLX_RENDERER_VERSION_MESA = GLXEnum
GLX_RENDERER_VIDEO_MEMORY_MESA = GLXEnum
GLX_RGBA = GLXAttribute, GLXEnum
GLX_RGBA_BIT = GLXRenderTypeMask
GLX_RGBA_BIT_SGIX = GLXRenderTypeMask
GLX_RGBA_FLOAT_BIT_ARB = GLXRenderTypeMask
GLX_RGBA_FLOAT_TYPE_ARB = GLXEnum
GLX_RGBA_TYPE = GLXEnum
GLX_RGBA_TYPE_SGIX = GLXEnum
GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT = GLXRenderTypeMask
GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT = GLXEnum
GLX_SAMPLE_BUFFERS = GLXEnum
GLX_SAMPLE_BUFFERS_3DFX = GLXEnum
GLX_SAMPLE_BUFFERS_ARB = GLXEnum
GLX_SAMPLE_BUFFERS_BIT_SGIX = GLXPbufferClobberMask
GLX_SAMPLE_BUFFERS_SGIS = GLXEnum
GLX_SAMPLES = GLXEnum
GLX_SAMPLES_3DFX = GLXEnum
GLX_SAMPLES_ARB = GLXEnum
GLX_SAMPLES_SGIS = GLXEnum
GLX_SAVED = GLXEnum
GLX_SAVED_SGIX = GLXEnum
GLX_SCREEN = GLXEnum
GLX_SCREEN_EXT = GLXEnum
GLX_SHARE_CONTEXT_EXT = GLXEnum
GLX_SLOW_CONFIG = GLXEnum
GLX_SLOW_VISUAL_EXT = GLXEnum
GLX_STATIC_COLOR = GLXEnum
GLX_STATIC_COLOR_EXT = GLXEnum
GLX_STATIC_GRAY = GLXEnum
GLX_STATIC_GRAY_EXT = GLXEnum
GLX_STENCIL_BUFFER_BIT = GLXPbufferClobberMask
GLX_STENCIL_BUFFER_BIT_SGIX = GLXPbufferClobberMask
GLX_STENCIL_SIZE = GLXAttribute, GLXEnum
GLX_STEREO = GLXAttribute, GLXEnum
GLX_STEREO_NOTIFY_EXT = GLX_GenericEventCode
GLX_STEREO_NOTIFY_MASK_EXT = GLXEventMask
GLX_STEREO_TREE_EXT = GLXEnum
GLX_SWAP_COPY_OML = GLXEnum
GLX_SWAP_EXCHANGE_OML = GLXEnum
GLX_SWAP_INTERVAL_EXT = GLXEnum
GLX_SWAP_METHOD_OML = GLXEnum
GLX_SWAP_UNDEFINED_OML = GLXEnum
GLX_SYNC_FRAME_SGIX = GLXSyncType
GLX_SYNC_SWAP_SGIX = GLXSyncType
GLX_TEXTURE_1D_BIT_EXT = GLXBindToTextureTargetMask
GLX_TEXTURE_1D_EXT = GLXEnum
GLX_TEXTURE_2D_BIT_EXT = GLXBindToTextureTargetMask
GLX_TEXTURE_2D_EXT = GLXEnum
GLX_TEXTURE_FORMAT_EXT = GLXEnum
GLX_TEXTURE_FORMAT_NONE_EXT = GLXEnum
GLX_TEXTURE_FORMAT_RGB_EXT = GLXEnum
GLX_TEXTURE_FORMAT_RGBA_EXT = GLXEnum
GLX_TEXTURE_RECTANGLE_BIT_EXT = GLXBindToTextureTargetMask
GLX_TEXTURE_RECTANGLE_EXT = GLXEnum
GLX_TEXTURE_TARGET_EXT = GLXEnum
GLX_TRANSPARENT_ALPHA_VALUE = GLXAttribute, GLXEnum
GLX_TRANSPARENT_ALPHA_VALUE_EXT = GLXAttribute, GLXEnum
GLX_TRANSPARENT_BLUE_VALUE = GLXAttribute, GLXEnum
GLX_TRANSPARENT_BLUE_VALUE_EXT = GLXAttribute, GLXEnum
GLX_TRANSPARENT_GREEN_VALUE = GLXAttribute, GLXEnum
GLX_TRANSPARENT_GREEN_VALUE_EXT = GLXAttribute, GLXEnum
GLX_TRANSPARENT_INDEX = GLXEnum
GLX_TRANSPARENT_INDEX_EXT = GLXEnum
GLX_TRANSPARENT_INDEX_VALUE = GLXAttribute, GLXEnum
GLX_TRANSPARENT_INDEX_VALUE_EXT = GLXAttribute, GLXEnum
GLX_TRANSPARENT_RED_VALUE = GLXAttribute, GLXEnum
GLX_TRANSPARENT_RED_VALUE_EXT = GLXAttribute, GLXEnum
GLX_TRANSPARENT_RGB = GLXEnum
GLX_TRANSPARENT_RGB_EXT = GLXEnum
GLX_TRANSPARENT_TYPE = GLXAttribute, GLXEnum
GLX_TRANSPARENT_TYPE_EXT = GLXAttribute, GLXEnum
GLX_TRUE_COLOR = GLXEnum
GLX_TRUE_COLOR_EXT = GLXEnum
GLX_UNIQUE_ID_NV = GLXEnum
GLX_USE_GL = GLXAttribute, GLXEnum
GLX_VENDOR = GLXStringName
GLX_VENDOR_NAMES_EXT = GLXEnum
GLX_VERSION = GLXStringName
GLX_VIDEO_OUT_ALPHA_NV = GLXEnum
GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV = GLXEnum
GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV = GLXEnum
GLX_VIDEO_OUT_COLOR_NV = GLXEnum
GLX_VIDEO_OUT_DEPTH_NV = GLXEnum
GLX_VIDEO_OUT_FIELD_1_NV = GLXEnum
GLX_VIDEO_OUT_FIELD_2_NV = GLXEnum
GLX_VIDEO_OUT_FRAME_NV = GLXEnum
GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV = GLXEnum
GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV = GLXEnum
GLX_VISUAL_CAVEAT_EXT = GLXAttribute, GLXEnum
GLX_VISUAL_ID = GLXEnum
GLX_VISUAL_ID_EXT = GLXEnum
GLX_VISUAL_SELECT_GROUP_SGIX = GLXEnum
GLX_WIDTH = GLXEnum
GLX_WIDTH_SGIX = GLXEnum
GLX_WINDOW = GLXEnum
GLX_WINDOW_BIT = GLXDrawableTypeMask
GLX_WINDOW_BIT_SGIX = GLXDrawableTypeMask
GLX_WINDOW_SGIX = GLXEnum
GLX_X_RENDERABLE = GLXEnum
GLX_X_RENDERABLE_SGIX = GLXEnum
GLX_X_VISUAL_TYPE = GLXAttribute, GLXEnum
GLX_X_VISUAL_TYPE_EXT = GLXAttribute, GLXEnum
GLX_Y_INVERTED_EXT = GLXEnum

Просмотреть файл

@ -0,0 +1,298 @@
ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV = WGLEnum
ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB = WGLEnum
ERROR_INVALID_PIXEL_TYPE_ARB = WGLEnum
ERROR_INVALID_PIXEL_TYPE_EXT = WGLEnum
ERROR_INVALID_PROFILE_ARB = WGLEnum
ERROR_INVALID_VERSION_ARB = WGLEnum
ERROR_MISSING_AFFINITY_MASK_NV = WGLEnum
WGL_ACCELERATION_ARB = WGLEnum
WGL_ACCELERATION_EXT = WGLEnum
WGL_ACCESS_READ_ONLY_NV = WGLDXInteropMaskNV
WGL_ACCESS_READ_WRITE_NV = WGLDXInteropMaskNV
WGL_ACCESS_WRITE_DISCARD_NV = WGLDXInteropMaskNV
WGL_ACCUM_ALPHA_BITS_ARB = WGLEnum
WGL_ACCUM_ALPHA_BITS_EXT = WGLEnum
WGL_ACCUM_BITS_ARB = WGLEnum
WGL_ACCUM_BITS_EXT = WGLEnum
WGL_ACCUM_BLUE_BITS_ARB = WGLEnum
WGL_ACCUM_BLUE_BITS_EXT = WGLEnum
WGL_ACCUM_GREEN_BITS_ARB = WGLEnum
WGL_ACCUM_GREEN_BITS_EXT = WGLEnum
WGL_ACCUM_RED_BITS_ARB = WGLEnum
WGL_ACCUM_RED_BITS_EXT = WGLEnum
WGL_ALPHA_BITS_ARB = WGLEnum
WGL_ALPHA_BITS_EXT = WGLEnum
WGL_ALPHA_SHIFT_ARB = WGLEnum
WGL_ALPHA_SHIFT_EXT = WGLEnum
WGL_AUX_BUFFERS_ARB = WGLEnum
WGL_AUX_BUFFERS_EXT = WGLEnum
WGL_AUX0_ARB = WGLEnum
WGL_AUX1_ARB = WGLEnum
WGL_AUX2_ARB = WGLEnum
WGL_AUX3_ARB = WGLEnum
WGL_AUX4_ARB = WGLEnum
WGL_AUX5_ARB = WGLEnum
WGL_AUX6_ARB = WGLEnum
WGL_AUX7_ARB = WGLEnum
WGL_AUX8_ARB = WGLEnum
WGL_AUX9_ARB = WGLEnum
WGL_BACK_COLOR_BUFFER_BIT_ARB = WGLColorBufferMask
WGL_BACK_LEFT_ARB = WGLEnum
WGL_BACK_RIGHT_ARB = WGLEnum
WGL_BIND_TO_TEXTURE_DEPTH_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = WGLEnum
WGL_BIND_TO_TEXTURE_RGB_ARB = WGLEnum
WGL_BIND_TO_TEXTURE_RGBA_ARB = WGLEnum
WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV = WGLEnum
WGL_BIND_TO_VIDEO_RGB_NV = WGLEnum
WGL_BIND_TO_VIDEO_RGBA_NV = WGLEnum
WGL_BLUE_BITS_ARB = WGLEnum
WGL_BLUE_BITS_EXT = WGLEnum
WGL_BLUE_SHIFT_ARB = WGLEnum
WGL_BLUE_SHIFT_EXT = WGLEnum
WGL_COLOR_BITS_ARB = WGLEnum
WGL_COLOR_BITS_EXT = WGLEnum
WGL_COLOR_SAMPLES_NV = WGLEnum
WGL_COLORSPACE_EXT = EGLEnum
WGL_COLORSPACE_LINEAR_EXT = EGLEnum
WGL_COLORSPACE_SRGB_EXT = EGLEnum
WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = WGLContextProfileMask
WGL_CONTEXT_CORE_PROFILE_BIT_ARB = WGLContextProfileMask
WGL_CONTEXT_DEBUG_BIT_ARB = WGLContextFlagsMask
WGL_CONTEXT_ES_PROFILE_BIT_EXT = WGLContextProfileMask
WGL_CONTEXT_ES2_PROFILE_BIT_EXT = WGLContextProfileMask
WGL_CONTEXT_FLAGS_ARB = WGLEnum
WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = WGLContextFlagsMask
WGL_CONTEXT_LAYER_PLANE_ARB = WGLEnum
WGL_CONTEXT_MAJOR_VERSION_ARB = WGLEnum
WGL_CONTEXT_MINOR_VERSION_ARB = WGLEnum
WGL_CONTEXT_MULTIGPU_ATTRIB_AFR_NV = WGLEnum
WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV = WGLEnum
WGL_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV = WGLEnum
WGL_CONTEXT_MULTIGPU_ATTRIB_NV = WGLEnum
WGL_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV = WGLEnum
WGL_CONTEXT_OPENGL_NO_ERROR_ARB = WGLEnum
WGL_CONTEXT_PROFILE_MASK_ARB = GLEnum
WGL_CONTEXT_RELEASE_BEHAVIOR_ARB = WGLEnum
WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB = WGLEnum
WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB = WGLEnum
WGL_CONTEXT_RESET_ISOLATION_BIT_ARB = WGLContextFlagsMask
WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB = GLEnum
WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB = WGLContextFlagsMask
WGL_COVERAGE_SAMPLES_NV = WGLEnum
WGL_CUBE_MAP_FACE_ARB = WGLEnum
WGL_DEPTH_BITS_ARB = WGLEnum
WGL_DEPTH_BITS_EXT = WGLEnum
WGL_DEPTH_BUFFER_BIT_ARB = WGLColorBufferMask
WGL_DEPTH_COMPONENT_NV = WGLEnum
WGL_DEPTH_FLOAT_EXT = WGLEnum
WGL_DEPTH_TEXTURE_FORMAT_NV = WGLEnum
WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = WGLEnum
WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = WGLEnum
WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = WGLEnum
WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = WGLEnum
WGL_DOUBLE_BUFFER_ARB = WGLEnum
WGL_DOUBLE_BUFFER_EXT = WGLEnum
WGL_DRAW_TO_BITMAP_ARB = WGLEnum
WGL_DRAW_TO_BITMAP_EXT = WGLEnum
WGL_DRAW_TO_PBUFFER_ARB = WGLEnum
WGL_DRAW_TO_PBUFFER_EXT = WGLEnum
WGL_DRAW_TO_WINDOW_ARB = WGLEnum
WGL_DRAW_TO_WINDOW_EXT = WGLEnum
WGL_FLOAT_COMPONENTS_NV = WGLEnum
WGL_FONT_LINES = WGLEnum
WGL_FONT_POLYGONS = WGLEnum
WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB = WGLEnum
WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT = WGLEnum
WGL_FRONT_COLOR_BUFFER_BIT_ARB = WGLColorBufferMask
WGL_FRONT_LEFT_ARB = WGLEnum
WGL_FRONT_RIGHT_ARB = WGLEnum
WGL_FULL_ACCELERATION_ARB = WGLEnum
WGL_FULL_ACCELERATION_EXT = WGLEnum
WGL_GAMMA_EXCLUDE_DESKTOP_I3D = WGLEnum
WGL_GAMMA_TABLE_SIZE_I3D = WGLEnum
WGL_GENERIC_ACCELERATION_ARB = WGLEnum
WGL_GENERIC_ACCELERATION_EXT = WGLEnum
WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D = WGLEnum
WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D = WGLEnum
WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D = WGLEnum
WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D = WGLEnum
WGL_GENLOCK_SOURCE_EDGE_RISING_I3D = WGLEnum
WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D = WGLEnum
WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D = WGLEnum
WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D = WGLEnum
WGL_GENLOCK_SOURCE_MULTIVIEW_I3D = WGLEnum
WGL_GPU_CLOCK_AMD = WGLEnum
WGL_GPU_FASTEST_TARGET_GPUS_AMD = WGLEnum
WGL_GPU_NUM_PIPES_AMD = WGLEnum
WGL_GPU_NUM_RB_AMD = WGLEnum
WGL_GPU_NUM_SIMD_AMD = WGLEnum
WGL_GPU_NUM_SPI_AMD = WGLEnum
WGL_GPU_OPENGL_VERSION_STRING_AMD = WGLEnum
WGL_GPU_RAM_AMD = WGLEnum
WGL_GPU_RENDERER_STRING_AMD = WGLEnum
WGL_GPU_VENDOR_AMD = WGLEnum
WGL_GREEN_BITS_ARB = WGLEnum
WGL_GREEN_BITS_EXT = WGLEnum
WGL_GREEN_SHIFT_ARB = WGLEnum
WGL_GREEN_SHIFT_EXT = WGLEnum
WGL_IMAGE_BUFFER_LOCK_I3D = WGLImageBufferMaskI3D
WGL_IMAGE_BUFFER_MIN_ACCESS_I3D = WGLImageBufferMaskI3D
WGL_LOSE_CONTEXT_ON_RESET_ARB = GLEnum
WGL_MAX_PBUFFER_HEIGHT_ARB = WGLEnum
WGL_MAX_PBUFFER_HEIGHT_EXT = WGLEnum
WGL_MAX_PBUFFER_PIXELS_ARB = WGLEnum
WGL_MAX_PBUFFER_PIXELS_EXT = WGLEnum
WGL_MAX_PBUFFER_WIDTH_ARB = WGLEnum
WGL_MAX_PBUFFER_WIDTH_EXT = WGLEnum
WGL_MIPMAP_LEVEL_ARB = WGLEnum
WGL_MIPMAP_TEXTURE_ARB = WGLEnum
WGL_NEED_PALETTE_ARB = WGLEnum
WGL_NEED_PALETTE_EXT = WGLEnum
WGL_NEED_SYSTEM_PALETTE_ARB = WGLEnum
WGL_NEED_SYSTEM_PALETTE_EXT = WGLEnum
WGL_NO_ACCELERATION_ARB = WGLEnum
WGL_NO_ACCELERATION_EXT = WGLEnum
WGL_NO_RESET_NOTIFICATION_ARB = GLEnum
WGL_NO_TEXTURE_ARB = WGLEnum
WGL_NUM_VIDEO_CAPTURE_SLOTS_NV = WGLEnum
WGL_NUM_VIDEO_SLOTS_NV = WGLEnum
WGL_NUMBER_OVERLAYS_ARB = WGLEnum
WGL_NUMBER_OVERLAYS_EXT = WGLEnum
WGL_NUMBER_PIXEL_FORMATS_ARB = WGLEnum
WGL_NUMBER_PIXEL_FORMATS_EXT = WGLEnum
WGL_NUMBER_UNDERLAYS_ARB = WGLEnum
WGL_NUMBER_UNDERLAYS_EXT = WGLEnum
WGL_OPTIMAL_PBUFFER_HEIGHT_EXT = WGLEnum
WGL_OPTIMAL_PBUFFER_WIDTH_EXT = WGLEnum
WGL_PBUFFER_HEIGHT_ARB = WGLEnum
WGL_PBUFFER_HEIGHT_EXT = WGLEnum
WGL_PBUFFER_LARGEST_ARB = WGLEnum
WGL_PBUFFER_LARGEST_EXT = WGLEnum
WGL_PBUFFER_LOST_ARB = WGLEnum
WGL_PBUFFER_WIDTH_ARB = WGLEnum
WGL_PBUFFER_WIDTH_EXT = WGLEnum
WGL_PIXEL_TYPE_ARB = WGLEnum
WGL_PIXEL_TYPE_EXT = WGLEnum
WGL_RED_BITS_ARB = WGLEnum
WGL_RED_BITS_EXT = WGLEnum
WGL_RED_SHIFT_ARB = WGLEnum
WGL_RED_SHIFT_EXT = WGLEnum
WGL_SAMPLE_BUFFERS_3DFX = WGLEnum
WGL_SAMPLE_BUFFERS_ARB = WGLEnum
WGL_SAMPLE_BUFFERS_EXT = WGLEnum
WGL_SAMPLES_3DFX = WGLEnum
WGL_SAMPLES_ARB = WGLEnum
WGL_SAMPLES_EXT = WGLEnum
WGL_SHARE_ACCUM_ARB = WGLEnum
WGL_SHARE_ACCUM_EXT = WGLEnum
WGL_SHARE_DEPTH_ARB = WGLEnum
WGL_SHARE_DEPTH_EXT = WGLEnum
WGL_SHARE_STENCIL_ARB = WGLEnum
WGL_SHARE_STENCIL_EXT = WGLEnum
WGL_STENCIL_BITS_ARB = WGLEnum
WGL_STENCIL_BITS_EXT = WGLEnum
WGL_STENCIL_BUFFER_BIT_ARB = WGLColorBufferMask
WGL_STEREO_ARB = WGLEnum
WGL_STEREO_EMITTER_DISABLE_3DL = WGLEnum
WGL_STEREO_EMITTER_ENABLE_3DL = WGLEnum
WGL_STEREO_EXT = WGLEnum
WGL_STEREO_POLARITY_INVERT_3DL = WGLEnum
WGL_STEREO_POLARITY_NORMAL_3DL = WGLEnum
WGL_SUPPORT_GDI_ARB = WGLEnum
WGL_SUPPORT_GDI_EXT = WGLEnum
WGL_SUPPORT_OPENGL_ARB = WGLEnum
WGL_SUPPORT_OPENGL_EXT = WGLEnum
WGL_SWAP_COPY_ARB = WGLEnum
WGL_SWAP_COPY_EXT = WGLEnum
WGL_SWAP_EXCHANGE_ARB = WGLEnum
WGL_SWAP_EXCHANGE_EXT = WGLEnum
WGL_SWAP_LAYER_BUFFERS_ARB = WGLEnum
WGL_SWAP_LAYER_BUFFERS_EXT = WGLEnum
WGL_SWAP_MAIN_PLANE = WGLLayerPlaneMask
WGL_SWAP_METHOD_ARB = WGLEnum
WGL_SWAP_METHOD_EXT = WGLEnum
WGL_SWAP_OVERLAY1 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY10 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY11 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY12 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY13 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY14 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY15 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY2 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY3 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY4 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY5 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY6 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY7 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY8 = WGLLayerPlaneMask
WGL_SWAP_OVERLAY9 = WGLLayerPlaneMask
WGL_SWAP_UNDEFINED_ARB = WGLEnum
WGL_SWAP_UNDEFINED_EXT = WGLEnum
WGL_SWAP_UNDERLAY1 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY10 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY11 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY12 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY13 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY14 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY15 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY2 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY3 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY4 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY5 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY6 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY7 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY8 = WGLLayerPlaneMask
WGL_SWAP_UNDERLAY9 = WGLLayerPlaneMask
WGL_TEXTURE_1D_ARB = WGLEnum
WGL_TEXTURE_2D_ARB = WGLEnum
WGL_TEXTURE_CUBE_MAP_ARB = WGLEnum
WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = WGLEnum
WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = WGLEnum
WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = WGLEnum
WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = WGLEnum
WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = WGLEnum
WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = WGLEnum
WGL_TEXTURE_DEPTH_COMPONENT_NV = WGLEnum
WGL_TEXTURE_FLOAT_R_NV = WGLEnum
WGL_TEXTURE_FLOAT_RG_NV = WGLEnum
WGL_TEXTURE_FLOAT_RGB_NV = WGLEnum
WGL_TEXTURE_FLOAT_RGBA_NV = WGLEnum
WGL_TEXTURE_FORMAT_ARB = WGLEnum
WGL_TEXTURE_RECTANGLE_ATI = WGLEnum
WGL_TEXTURE_RECTANGLE_NV = WGLEnum
WGL_TEXTURE_RGB_ARB = WGLEnum
WGL_TEXTURE_RGBA_ARB = WGLEnum
WGL_TEXTURE_TARGET_ARB = WGLEnum
WGL_TRANSPARENT_ALPHA_VALUE_ARB = WGLEnum
WGL_TRANSPARENT_ARB = WGLEnum
WGL_TRANSPARENT_BLUE_VALUE_ARB = WGLEnum
WGL_TRANSPARENT_EXT = WGLEnum
WGL_TRANSPARENT_GREEN_VALUE_ARB = WGLEnum
WGL_TRANSPARENT_INDEX_VALUE_ARB = WGLEnum
WGL_TRANSPARENT_RED_VALUE_ARB = WGLEnum
WGL_TRANSPARENT_VALUE_EXT = WGLEnum
WGL_TYPE_COLORINDEX_ARB = WGLEnum
WGL_TYPE_COLORINDEX_EXT = WGLEnum
WGL_TYPE_RGBA_ARB = WGLEnum
WGL_TYPE_RGBA_EXT = WGLEnum
WGL_TYPE_RGBA_FLOAT_ARB = WGLEnum
WGL_TYPE_RGBA_FLOAT_ATI = WGLEnum
WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT = WGLEnum
WGL_UNIQUE_ID_NV = WGLEnum
WGL_VIDEO_OUT_ALPHA_NV = WGLEnum
WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV = WGLEnum
WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV = WGLEnum
WGL_VIDEO_OUT_COLOR_NV = WGLEnum
WGL_VIDEO_OUT_DEPTH_NV = WGLEnum
WGL_VIDEO_OUT_FIELD_1 = WGLEnum
WGL_VIDEO_OUT_FIELD_2 = WGLEnum
WGL_VIDEO_OUT_FRAME = WGLEnum
WGL_VIDEO_OUT_STACKED_FIELDS_1_2 = WGLEnum
WGL_VIDEO_OUT_STACKED_FIELDS_2_1 = WGLEnum

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,311 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using NUnit.Framework;
using Silk.NET.BuildTools.Common;
using Silk.NET.SilkTouch.Mods;
using VerifyNUnit;
using VerifyTests;
namespace Silk.NET.SilkTouch.UnitTests.Khronos;
[TestFixture]
public class MixKhronosDataTests
{
struct Options : IOptionsSnapshot<MixKhronosData.Configuration>
{
public required MixKhronosData.Configuration Value { get; init; }
public MixKhronosData.Configuration Get(string? name) => Value;
}
[ModuleInitializer]
public static void Initialize() => VerifyDiffPlex.Initialize();
public static string TestFile(string name, [CallerFilePath] string? fPath = null) =>
Path.Combine(
Path.GetDirectoryName(fPath)
?? throw new InvalidOperationException("Expected to get directory name of test."),
$"test{name}"
);
public static IEnumerable<string> TestFiles(
Regex regex,
[CallerFilePath] string? fPath = null
) =>
Directory
.GetFiles(
Path.GetDirectoryName(fPath)
?? throw new InvalidOperationException("Expected to get directory name of test")
)
.Where(x => regex.IsMatch(x));
private static IAsyncEnumerable<object[]> TestCases()
{
IEnumerable<string> files = ["gl.xml", "wgl.xml", "glx.xml", "cl.xml", "vk.xml"];
return files
.ToAsyncEnumerable()
.SelectAwait(async x =>
{
var mod = new MixKhronosData(
new NullLogger<MixKhronosData>(),
new Options
{
Value = new MixKhronosData.Configuration { SpecPath = TestFile(x) }
}
);
await mod.BeforeJobAsync(
"",
new SilkTouchConfiguration { ClangSharpResponseFiles = [], Solution = "" }
);
return (object[])[x, mod.Jobs[""]];
});
}
private static IAsyncEnumerable<object[]> EnumTestCases() =>
TestCases().Where(x => x[0] is "gl.xml" or "wgl.xml" or "glx.xml" or "cl.xml");
private static IAsyncEnumerable<object[]> RegressionTestCases() =>
TestCases()
.SelectAwait(async s =>
s[0] is "gl.xml" or "cl.xml"
? (object[])
[
s[0],
s[1],
await Task.WhenAll(
TestFiles(
new Regex(
$@"regression\.2\.21\.{((string)s[0])[..^4]}.*\.json\.gz"
)
)
.Select(ReadProfile)
)
]
: null
)
.OfType<object[]>();
private static async Task<Profile> ReadProfile(string fPath)
{
await using var fs = File.OpenRead(fPath);
await using var gz = new GZipStream(fs, CompressionMode.Decompress);
using var sr = new StreamReader(gz);
return JsonConvert.DeserializeObject<Profile>(await sr.ReadToEndAsync())
?? throw new InvalidDataException("Deserialization returned null");
}
[Test, TestCaseSource(nameof(EnumTestCases))]
public Task EnumsToGroups(string file, object data) =>
Verifier
.Verify(
string.Join(
'\n',
((MixKhronosData.JobData)data)
.EnumsToGroups.OrderBy(x => x.Key)
.Select(x => $"{x.Key} = {string.Join(", ", x.Value.Order())}")
)
)
.UseFileName($"{nameof(MixKhronosDataTests)}.{nameof(EnumsToGroups)}.{file}");
[Test, TestCaseSource(nameof(TestCases))]
public Task ApiSets(string file, object data) =>
Verifier
.Verify(
string.Join(
'\n',
((MixKhronosData.JobData)data)
.ApiSets.OrderBy(x => x.Key)
.Select(x =>
string.Join(
'\n',
x.Value.Dependencies.Select(y =>
$"[{y.Key}] {(x.Value.IsExtension ? $"{x.Key} (extension)" : x.Key)} = "
+ string.Join(", ", y.Value.Order())
)
)
)
)
)
.UseFileName($"{nameof(MixKhronosDataTests)}.{nameof(ApiSets)}.{file}");
[Test, TestCaseSource(nameof(RegressionTestCases))]
public Task EnumGroupRegression(string file, object data, Profile[] profiles)
{
var baselineGroups = new Dictionary<string, HashSet<string>>();
foreach (
var x in profiles
.SelectMany(x => x.Projects.Values)
.SelectMany(x => x.Enums)
.Where(x =>
!string.IsNullOrWhiteSpace(x.NativeName) && x.NativeName is not "CLenum"
)
)
{
var key = (
x.NativeName is "GLenum"
? "GLEnum"
: x.NativeName.StartsWith("ErrorCodes")
? "ErrorCodes"
: x.NativeName
).Replace('.', '_').Trim();
key = key[(key.LastIndexOf(' ') + 1)..];
if (!baselineGroups.TryGetValue(key, out var constituents))
{
constituents = baselineGroups[key] = [];
}
foreach (var token in x.Tokens.Where(y => !string.IsNullOrWhiteSpace(y.NativeName)))
{
constituents.Add(token.NativeName);
}
}
var newGroups = ((MixKhronosData.JobData)data).Groups.ToDictionary(
x => x.Key,
_ => new HashSet<string>()
);
foreach (var (enumName, groupNames) in ((MixKhronosData.JobData)data).EnumsToGroups)
{
foreach (var groupName in groupNames)
{
if (newGroups.TryGetValue(groupName, out var constituents))
{
constituents.Add(enumName);
}
else
{
newGroups[groupName] = [enumName];
}
}
}
var verifyFile = new StringBuilder();
verifyFile.AppendLine(
"NOTE: This file lists differences/regressions between 3.0's enum grouping system "
+ "baselined against 2.21's. If this file is non-empty and verified, it means the regressions have "
+ "been justified. Justified differences are usually as a result of a discrepancy between the "
+ "regression baseline JSON and the baseline XML.\n"
);
foreach (
var (groupName, _) in baselineGroups
.Where(x => !newGroups.ContainsKey(x.Key))
.OrderBy(x => x.Key)
)
{
verifyFile.AppendLine($"Removed Group: {groupName}");
}
var unchanged = new List<string>();
foreach (var (groupName, constituents) in newGroups.OrderBy(x => x.Key))
{
var hasOutputHeader = !baselineGroups.TryGetValue(
groupName,
out var baselineConstituents
);
if (hasOutputHeader)
{
verifyFile.AppendLine($"\nAdded Group: {groupName}");
}
foreach (var constituent in baselineConstituents?.Order() ?? Enumerable.Empty<string>())
{
if (!constituents.Contains(constituent))
{
if (!hasOutputHeader)
{
verifyFile.AppendLine($"\nExisting Group: {groupName}");
hasOutputHeader = true;
}
verifyFile.AppendLine($" Removed: {constituent}");
}
}
foreach (
var constituent in constituents
.Where(x => !(baselineConstituents?.Contains(x) ?? false))
.Order()
)
{
if (!hasOutputHeader)
{
verifyFile.AppendLine($"\nExisting Group: {groupName}");
hasOutputHeader = true;
}
verifyFile.AppendLine($" Added: {constituent}");
}
if (!hasOutputHeader)
{
unchanged.Add(groupName);
}
}
verifyFile.AppendLine($"\nUnchanged: {string.Join(", ", unchanged)}");
return Verifier
.Verify(verifyFile.ToString())
.UseFileName($"{nameof(MixKhronosDataTests)}.{nameof(EnumGroupRegression)}.{file}");
}
[Test, TestCaseSource(nameof(TestCases))]
public Task SupportedApiProfiles(string file, object data) =>
Verifier
.Verify(
string.Join(
'\n',
((MixKhronosData.JobData)data)
.SupportedApiProfiles?.OrderBy(x => x.Key)
.Select(x =>
$"{x.Key}\n{new string('-', x.Key.Length)}\n{string.Join('\n', x.Value.Select(x => x.ToString()).Order())}\n"
) ?? []
)
)
.UseFileName($"{nameof(MixKhronosDataTests)}.{nameof(SupportedApiProfiles)}.{file}");
[Test]
public void DependsStringParsing1() =>
Assert.That(
MixKhronosData
.ParseDependencyOptions(
"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_depth_stencil_resolve),VK_VERSION_1_2"
)
.Options,
Is.EquivalentTo(
(IEnumerable<string>)
[
"VK_KHR_depth_stencil_resolve+VK_KHR_get_physical_device_properties2",
"VK_KHR_depth_stencil_resolve+VK_VERSION_1_1",
"VK_VERSION_1_2"
]
)
);
[Test]
public void DependsStringParsing2() =>
Assert.That(
MixKhronosData
.ParseDependencyOptions(
"((VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation),VK_VERSION_1_1)+VK_EXT_queue_family_foreign"
)
.Options,
Is.EquivalentTo(
(IEnumerable<string>)
[
"VK_EXT_queue_family_foreign+VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation",
"VK_EXT_queue_family_foreign+VK_VERSION_1_1"
]
)
);
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Двоичные данные
tests/SilkTouch/Khronos/testregression.2.21.cl.json.gz Normal file

Двоичный файл не отображается.

Двоичные данные
tests/SilkTouch/Khronos/testregression.2.21.gl.json.gz Normal file

Двоичный файл не отображается.

Двоичные данные
tests/SilkTouch/Khronos/testregression.2.21.glcore.json.gz Normal file

Двоичный файл не отображается.

Двоичные данные
tests/SilkTouch/Khronos/testregression.2.21.gles2.json.gz Normal file

Двоичный файл не отображается.

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -11,7 +11,8 @@ public class NameTests : NameTrimmer
[Test]
public void SimpleGlfwTestDetermination()
{
var test = new Dictionary<string, (string, List<string>?)> {
var test = new Dictionary<string, (string, List<string>?)>
{
{ "GLFWallocator", ("GLFWallocator", null) },
{ "GLFWgammaramp", ("GLFWgammaramp", null) },
{ "GLFWgamepadstate", ("GLFWgamepadstate", null) },
@ -22,10 +23,14 @@ public class NameTests : NameTrimmer
{ "GLFWmonitor", ("GLFWmonitor", null) },
{ "GLFWwindow", ("GLFWwindow", null) }
};
Assert.That(GetPrefix(null, null, test, null, false, true)?.Prefix, Is.EqualTo("GLFW"));
Assert.That(
GetPrefix(null, null, test, null, null, false, true)?.Prefix,
Is.EqualTo("GLFW")
);
string? identifiedPrefix = null;
Trim(null, null, "GLFW", test, null, ref identifiedPrefix);
var expected = new Dictionary<string, string> {
Trim(null, null, "GLFW", test, null, null, ref identifiedPrefix);
var expected = new Dictionary<string, string>
{
{ "GLFWallocator", "Allocator" },
{ "GLFWgammaramp", "Gammaramp" },
{ "GLFWgamepadstate", "Gamepadstate" },
@ -38,7 +43,10 @@ public class NameTests : NameTrimmer
};
foreach (var (key, (trimmed, _)) in test)
{
Assert.That(trimmed.Prettify(new NameUtils.NameTransformer(4)), Is.EqualTo(expected[key]));
Assert.That(
trimmed.Prettify(new NameUtils.NameTransformer(4)),
Is.EqualTo(expected[key])
);
}
}
}

Просмотреть файл

@ -3,10 +3,21 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<NoWarn>8012;$(NoWarn)</NoWarn>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\sources\SilkTouch\Silk.NET.SilkTouch.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Update="NUnit" Version="4.1.0" />
<PackageReference Include="Silk.NET.BuildTools" Version="2.20.0" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
<PackageReference Include="Verify.DiffPlex" Version="2.3.0" />
<PackageReference Include="Verify.NUnit" Version="23.6.0" />
<None Include="**/*.received.*" />
<None Include="**/*.verified.*" />
</ItemGroup>
</Project>