yayyy vulkan. stuff
This commit is contained in:
commit
7181c58033
29
.clang-format
Normal file
29
.clang-format
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
AlignAfterOpenBracket: BlockIndent
|
||||||
|
AlignArrayOfStructures: Right
|
||||||
|
AlignConsecutiveAssignments: true
|
||||||
|
AlignConsecutiveDeclarations: true
|
||||||
|
AllowShortBlocksOnASingleLine: Always
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
BasedOnStyle: Chromium
|
||||||
|
BinPackArguments: false
|
||||||
|
BinPackParameters: false
|
||||||
|
ColumnLimit: 100
|
||||||
|
ConstructorInitializerIndentWidth: 2
|
||||||
|
ContinuationIndentWidth: 2
|
||||||
|
Cpp11BracedListStyle: false
|
||||||
|
FixNamespaceComments: false
|
||||||
|
IndentAccessModifiers: false
|
||||||
|
IndentExternBlock: Indent
|
||||||
|
IndentWidth: 2
|
||||||
|
NamespaceIndentation: All
|
||||||
|
SpaceBeforeCpp11BracedList: true
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
|
||||||
|
IncludeBlocks: Regroup
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '".*"'
|
||||||
|
Priority: 1
|
||||||
|
- Regex: '<.*>'
|
||||||
|
Priority: -1
|
51
.clang-tidy
Normal file
51
.clang-tidy
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
# noinspection SpellCheckingInspection
|
||||||
|
Checks: >
|
||||||
|
*,
|
||||||
|
-ctad-maybe-unsupported,
|
||||||
|
-abseil-*,
|
||||||
|
-altera-*,
|
||||||
|
-bugprone-easily-swappable-parameters,
|
||||||
|
-bugprone-implicit-widening-of-multiplication-result,
|
||||||
|
-cert-env33-c,
|
||||||
|
-concurrency-mt-unsafe,
|
||||||
|
-cppcoreguidelines-avoid-magic-numbers,
|
||||||
|
-cppcoreguidelines-owning-memory,
|
||||||
|
-cppcoreguidelines-pro-type-member-init,
|
||||||
|
-cppcoreguidelines-pro-type-vararg,
|
||||||
|
-fuchsia-*,
|
||||||
|
-google-*,
|
||||||
|
-hicpp-*,
|
||||||
|
-llvm-include-order,
|
||||||
|
-llvm-include-order,
|
||||||
|
-llvm-namespace-comment,
|
||||||
|
-llvmlibc-*,
|
||||||
|
-misc-non-private-member-variables-in-classes,
|
||||||
|
-readability-braces-around-statements,
|
||||||
|
-readability-implicit-bool-conversion,
|
||||||
|
-readability-isolate-declaration,
|
||||||
|
-readability-magic-numbers
|
||||||
|
CheckOptions:
|
||||||
|
readability-identifier-naming.ClassCase: CamelCase
|
||||||
|
readability-identifier-naming.EnumCase: CamelCase
|
||||||
|
readability-identifier-naming.LocalConstantCase: camelBack
|
||||||
|
readability-identifier-naming.LocalVariableCase: camelBack
|
||||||
|
readability-identifier-naming.GlobalFunctionCase: CamelCase
|
||||||
|
readability-identifier-naming.MemberCase: lower_case
|
||||||
|
readability-identifier-naming.MethodCase: camelBack
|
||||||
|
readability-identifier-naming.MethodIgnoredRegexp: ((to|from)_class)
|
||||||
|
readability-identifier-naming.ParameterPackCase: lower_case
|
||||||
|
readability-identifier-naming.PrivateMemberCase: CamelCase
|
||||||
|
readability-identifier-naming.PrivateMemberPrefix: 'm'
|
||||||
|
readability-identifier-naming.PrivateMethodCase: camelBack
|
||||||
|
readability-identifier-naming.PrivateMethodPrefix: ''
|
||||||
|
readability-identifier-naming.ProtectedMemberPrefix: 'm'
|
||||||
|
readability-identifier-naming.ProtectedMethodPrefix: ''
|
||||||
|
readability-identifier-naming.PublicMemberCase: lower_case
|
||||||
|
readability-identifier-naming.StaticConstantCase: UPPER_CASE
|
||||||
|
readability-identifier-naming.StaticVariableCase: CamelCase
|
||||||
|
readability-identifier-naming.StructCase: CamelCase
|
||||||
|
readability-identifier-naming.TemplateParameterCase: lower_case
|
||||||
|
readability-identifier-naming.TemplateTemplateParameterCase: CamelCase
|
||||||
|
readability-identifier-naming.TypeTemplateParameterCase: CamelCase
|
||||||
|
readability-identifier-naming.TypedefCase: CamelCase
|
||||||
|
readability-identifier-naming.UnionCase: CamelCase
|
4
.clangd
Normal file
4
.clangd
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Diagnostics:
|
||||||
|
Suppress: >
|
||||||
|
-Wmissing-template-arg-list-after-template-kw,
|
||||||
|
-Wctad-maybe-unsupported
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
.cache/
|
||||||
|
.direnv/
|
||||||
|
.vscode/
|
||||||
|
build/
|
22
_sources/generated.json
Normal file
22
_sources/generated.json
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"fmt": {
|
||||||
|
"cargoLocks": null,
|
||||||
|
"date": null,
|
||||||
|
"extract": null,
|
||||||
|
"name": "fmt",
|
||||||
|
"passthru": null,
|
||||||
|
"pinned": false,
|
||||||
|
"src": {
|
||||||
|
"deepClone": false,
|
||||||
|
"fetchSubmodules": false,
|
||||||
|
"leaveDotGit": false,
|
||||||
|
"name": null,
|
||||||
|
"owner": "fmtlib",
|
||||||
|
"repo": "fmt",
|
||||||
|
"rev": "11.0.2",
|
||||||
|
"sha256": "sha256-IKNt4xUoVi750zBti5iJJcCk3zivTt7nU12RIf8pM+0=",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"version": "11.0.2"
|
||||||
|
}
|
||||||
|
}
|
15
_sources/generated.nix
Normal file
15
_sources/generated.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# This file was generated by nvfetcher, please do not modify it manually.
|
||||||
|
{ fetchgit, fetchurl, fetchFromGitHub, dockerTools }:
|
||||||
|
{
|
||||||
|
fmt = {
|
||||||
|
pname = "fmt";
|
||||||
|
version = "11.0.2";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "fmtlib";
|
||||||
|
repo = "fmt";
|
||||||
|
rev = "11.0.2";
|
||||||
|
fetchSubmodules = false;
|
||||||
|
sha256 = "sha256-IKNt4xUoVi750zBti5iJJcCk3zivTt7nU12RIf8pM+0=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
315
explicit_layer.d/VkLayer_api_dump.json
Normal file
315
explicit_layer.d/VkLayer_api_dump.json
Normal file
|
@ -0,0 +1,315 @@
|
||||||
|
{
|
||||||
|
"file_format_version": "1.2.0",
|
||||||
|
"layer": {
|
||||||
|
"name": "VK_LAYER_LUNARG_api_dump",
|
||||||
|
"type": "GLOBAL",
|
||||||
|
"library_path": "../../../lib/libVkLayer_api_dump.dylib",
|
||||||
|
"api_version": "1.3.290",
|
||||||
|
"implementation_version": "2",
|
||||||
|
"description": "LunarG API dump layer",
|
||||||
|
"introduction": "The API Dump utility layer prints API calls, parameters, and values to the identified output stream.",
|
||||||
|
"url": "https://vulkan.lunarg.com/doc/sdk/latest/windows/api_dump_layer.html",
|
||||||
|
"platforms": [
|
||||||
|
"WINDOWS",
|
||||||
|
"LINUX",
|
||||||
|
"MACOS",
|
||||||
|
"ANDROID"
|
||||||
|
],
|
||||||
|
"instance_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_EXT_layer_settings",
|
||||||
|
"spec_version": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"device_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_EXT_tooling_info",
|
||||||
|
"spec_version": "1",
|
||||||
|
"entrypoints": [
|
||||||
|
"vkGetPhysicalDeviceToolPropertiesEXT"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"features": {
|
||||||
|
"presets": [
|
||||||
|
{
|
||||||
|
"label": "Console Output",
|
||||||
|
"description": "Output API dump to stdout",
|
||||||
|
"platforms": [
|
||||||
|
"WINDOWS",
|
||||||
|
"LINUX",
|
||||||
|
"MACOS",
|
||||||
|
"ANDROID"
|
||||||
|
],
|
||||||
|
"status": "STABLE",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "output_format",
|
||||||
|
"value": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "log_filename",
|
||||||
|
"value": "stdout"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "file",
|
||||||
|
"value": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Text Output",
|
||||||
|
"description": "Output API dump to a text file",
|
||||||
|
"platforms": [
|
||||||
|
"WINDOWS",
|
||||||
|
"LINUX",
|
||||||
|
"MACOS",
|
||||||
|
"ANDROID"
|
||||||
|
],
|
||||||
|
"status": "STABLE",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "output_format",
|
||||||
|
"value": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "log_filename",
|
||||||
|
"value": "${VK_LOCAL}/vk_apidump.txt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "file",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "HTML Output",
|
||||||
|
"description": "Output API dump to a HTML file",
|
||||||
|
"platforms": [
|
||||||
|
"WINDOWS",
|
||||||
|
"LINUX",
|
||||||
|
"MACOS",
|
||||||
|
"ANDROID"
|
||||||
|
],
|
||||||
|
"status": "STABLE",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "output_format",
|
||||||
|
"value": "html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "log_filename",
|
||||||
|
"value": "${VK_LOCAL}/vk_apidump.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "file",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "JSON Output",
|
||||||
|
"description": "Output API dump to a JSON file",
|
||||||
|
"platforms": [
|
||||||
|
"WINDOWS",
|
||||||
|
"LINUX",
|
||||||
|
"MACOS",
|
||||||
|
"ANDROID"
|
||||||
|
],
|
||||||
|
"status": "STABLE",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "output_format",
|
||||||
|
"value": "json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "log_filename",
|
||||||
|
"value": "${VK_LOCAL}/vk_apidump.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "file",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "output_range",
|
||||||
|
"env": "VK_APIDUMP_OUTPUT_RANGE",
|
||||||
|
"label": "Output Range",
|
||||||
|
"description": "Comma separated list of frames to output or a range of frames with a start, count, and optional interval separated by a dash. A count of 0 will output every frame after the start of the range. Example: \"5-8-2\" will output frame 5, continue until frame 13, dumping every other frame. Example: \"3,8-2\" will output frames 3, 8, and 9.",
|
||||||
|
"type": "STRING",
|
||||||
|
"default": "0-0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "output_format",
|
||||||
|
"env": "VK_APIDUMP_OUTPUT_FORMAT",
|
||||||
|
"label": "Output Format",
|
||||||
|
"description": "Specifies the format used for output; can be HTML, JSON, or Text (default -- outputs plain text)",
|
||||||
|
"type": "ENUM",
|
||||||
|
"flags": [
|
||||||
|
{
|
||||||
|
"key": "text",
|
||||||
|
"label": "Text",
|
||||||
|
"description": "Plain text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "html",
|
||||||
|
"label": "HTML",
|
||||||
|
"description": "HTML"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "json",
|
||||||
|
"label": "JSON",
|
||||||
|
"description": "Json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "file",
|
||||||
|
"label": "Output to File",
|
||||||
|
"description": "Setting this to true indicates that output should be written to file instead of stdout",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": false,
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "log_filename",
|
||||||
|
"env": "VK_APIDUMP_LOG_FILENAME",
|
||||||
|
"label": "Log Filename",
|
||||||
|
"description": "Specifies the file to dump to when output files are enabled",
|
||||||
|
"type": "SAVE_FILE",
|
||||||
|
"filter": "*.txt,*.html,*.json",
|
||||||
|
"default": "stdout",
|
||||||
|
"dependence": {
|
||||||
|
"mode": "ALL",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "file",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "flush",
|
||||||
|
"env": "VK_APIDUMP_FLUSH",
|
||||||
|
"label": "Log Flush After Write",
|
||||||
|
"description": "Setting this to true causes IO to be flushed after each API call that is written",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "name_size",
|
||||||
|
"label": "Name Size",
|
||||||
|
"description": "The number of characters the name of a variable should consume, assuming more are not required",
|
||||||
|
"type": "INT",
|
||||||
|
"default": 32,
|
||||||
|
"range": {
|
||||||
|
"min": 1
|
||||||
|
},
|
||||||
|
"unit": "chars"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "show_types",
|
||||||
|
"label": "Show Types",
|
||||||
|
"description": "Dump types in addition to values",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": true,
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "type_size",
|
||||||
|
"label": "Type Size",
|
||||||
|
"description": "The number of characters the name of a type should consume, assuming more are not required",
|
||||||
|
"type": "INT",
|
||||||
|
"default": 0,
|
||||||
|
"range": {
|
||||||
|
"min": 0
|
||||||
|
},
|
||||||
|
"dependence": {
|
||||||
|
"mode": "ALL",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "show_types",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "timestamp",
|
||||||
|
"env": "VK_APIDUMP_TIMESTAMP",
|
||||||
|
"label": "Show Timestamp",
|
||||||
|
"description": "Show the timestamp of function calls since start in microseconds",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "show_shader",
|
||||||
|
"label": "Show Shader",
|
||||||
|
"description": "Dump the shader binary code in pCode",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "detailed",
|
||||||
|
"env": "VK_APIDUMP_DETAILED",
|
||||||
|
"label": "Show Parameter Details",
|
||||||
|
"description": "Dump parameter details in addition to API calls",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "no_addr",
|
||||||
|
"env": "VK_APIDUMP_NO_ADDR",
|
||||||
|
"label": "Hide Addresses",
|
||||||
|
"description": "Dump \"address\" in place of hex addresses",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "use_spaces",
|
||||||
|
"label": "Use Spaces",
|
||||||
|
"description": "Setting this to true causes all tab characters to be replaced with spaces",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": true,
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "indent_size",
|
||||||
|
"label": "Indent Size",
|
||||||
|
"description": "Specifies the number of spaces that a tab is equal to",
|
||||||
|
"type": "INT",
|
||||||
|
"default": 4,
|
||||||
|
"range": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 16
|
||||||
|
},
|
||||||
|
"unit": "chars",
|
||||||
|
"dependence": {
|
||||||
|
"mode": "ALL",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "use_spaces",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "show_thread_and_frame",
|
||||||
|
"label": "Show Thread and Frame",
|
||||||
|
"description": "Show the thread and frame of each function called",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1441
explicit_layer.d/VkLayer_khronos_profiles.json
Normal file
1441
explicit_layer.d/VkLayer_khronos_profiles.json
Normal file
File diff suppressed because it is too large
Load diff
90
explicit_layer.d/VkLayer_khronos_shader_object.json
Normal file
90
explicit_layer.d/VkLayer_khronos_shader_object.json
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
{
|
||||||
|
"file_format_version": "1.2.0",
|
||||||
|
"layer": {
|
||||||
|
"name": "VK_LAYER_KHRONOS_shader_object",
|
||||||
|
"type": "GLOBAL",
|
||||||
|
"library_path": "../../../lib/libVkLayer_khronos_shader_object.dylib",
|
||||||
|
"api_version": "1.3.290",
|
||||||
|
"implementation_version": "1",
|
||||||
|
"description": "Khronos Shader object layer",
|
||||||
|
"instance_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_EXT_layer_settings",
|
||||||
|
"spec_version": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"device_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_EXT_shader_object",
|
||||||
|
"spec_version": "1",
|
||||||
|
"entrypoints": [
|
||||||
|
"vkCmdBindShadersEXT",
|
||||||
|
"vkCmdBindVertexBuffers2EXT",
|
||||||
|
"vkCmdSetAlphaToCoverageEnableEXT",
|
||||||
|
"vkCmdSetAlphaToOneEnableEXT",
|
||||||
|
"vkCmdSetColorBlendAdvancedEXT",
|
||||||
|
"vkCmdSetColorBlendEnableEXT",
|
||||||
|
"vkCmdSetColorBlendEquationEXT",
|
||||||
|
"vkCmdSetColorWriteMaskEXT",
|
||||||
|
"vkCmdSetConservativeRasterizationModeEXT",
|
||||||
|
"vkCmdSetCoverageModulationModeNV",
|
||||||
|
"vkCmdSetCoverageModulationTableEnableNV",
|
||||||
|
"vkCmdSetCoverageModulationTableNV",
|
||||||
|
"vkCmdSetCoverageReductionModeNV",
|
||||||
|
"vkCmdSetCoverageToColorEnableNV",
|
||||||
|
"vkCmdSetCoverageToColorLocationNV",
|
||||||
|
"vkCmdSetCullModeEXT",
|
||||||
|
"vkCmdSetDepthBiasEnableEXT",
|
||||||
|
"vkCmdSetDepthBoundsTestEnableEXT",
|
||||||
|
"vkCmdSetDepthClampEnableEXT",
|
||||||
|
"vkCmdSetDepthClipEnableEXT",
|
||||||
|
"vkCmdSetDepthClipNegativeOneToOneEXT",
|
||||||
|
"vkCmdSetDepthCompareOpEXT",
|
||||||
|
"vkCmdSetDepthTestEnableEXT",
|
||||||
|
"vkCmdSetDepthWriteEnableEXT",
|
||||||
|
"vkCmdSetExtraPrimitiveOverestimationSizeEXT",
|
||||||
|
"vkCmdSetFrontFaceEXT",
|
||||||
|
"vkCmdSetLineRasterizationModeEXT",
|
||||||
|
"vkCmdSetLineStippleEnableEXT",
|
||||||
|
"vkCmdSetLogicOpEXT",
|
||||||
|
"vkCmdSetLogicOpEnableEXT",
|
||||||
|
"vkCmdSetPatchControlPointsEXT",
|
||||||
|
"vkCmdSetPolygonModeEXT",
|
||||||
|
"vkCmdSetPrimitiveRestartEnableEXT",
|
||||||
|
"vkCmdSetPrimitiveTopologyEXT",
|
||||||
|
"vkCmdSetProvokingVertexModeEXT",
|
||||||
|
"vkCmdSetRasterizationSamplesEXT",
|
||||||
|
"vkCmdSetRasterizationStreamEXT",
|
||||||
|
"vkCmdSetRasterizerDiscardEnableEXT",
|
||||||
|
"vkCmdSetRepresentativeFragmentTestEnableNV",
|
||||||
|
"vkCmdSetSampleLocationsEnableEXT",
|
||||||
|
"vkCmdSetSampleMaskEXT",
|
||||||
|
"vkCmdSetScissorWithCountEXT",
|
||||||
|
"vkCmdSetShadingRateImageEnableNV",
|
||||||
|
"vkCmdSetStencilOpEXT",
|
||||||
|
"vkCmdSetStencilTestEnableEXT",
|
||||||
|
"vkCmdSetTessellationDomainOriginEXT",
|
||||||
|
"vkCmdSetVertexInputEXT",
|
||||||
|
"vkCmdSetViewportSwizzleNV",
|
||||||
|
"vkCmdSetViewportWScalingEnableNV",
|
||||||
|
"vkCmdSetViewportWithCountEXT",
|
||||||
|
"vkCreateShadersEXT",
|
||||||
|
"vkDestroyShaderEXT",
|
||||||
|
"vkGetShaderBinaryDataEXT"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"features": {
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "force_enable",
|
||||||
|
"env": "VK_SHADER_OBJECT_FORCE_ENABLE",
|
||||||
|
"label": "Force Enable",
|
||||||
|
"description": "Force the layer to be active even if the underlying driver also implements the shader object extension.",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
54
explicit_layer.d/VkLayer_khronos_synchronization2.json
Normal file
54
explicit_layer.d/VkLayer_khronos_synchronization2.json
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
"file_format_version": "1.2.0",
|
||||||
|
"layer": {
|
||||||
|
"name": "VK_LAYER_KHRONOS_synchronization2",
|
||||||
|
"type": "GLOBAL",
|
||||||
|
"library_path": "../../../lib/libVkLayer_khronos_synchronization2.dylib",
|
||||||
|
"api_version": "1.3.290",
|
||||||
|
"implementation_version": "1",
|
||||||
|
"description": "Khronos Synchronization2 layer",
|
||||||
|
"introduction": "The VK_LAYER_KHRONOS_synchronization2 extension layer implements the VK_KHR_synchronization2 extension.",
|
||||||
|
"url": "https://vulkan.lunarg.com/doc/sdk/latest/windows/synchronization2_layer.html",
|
||||||
|
"status": "STABLE",
|
||||||
|
"platforms": [
|
||||||
|
"WINDOWS",
|
||||||
|
"LINUX",
|
||||||
|
"MACOS",
|
||||||
|
"ANDROID"
|
||||||
|
],
|
||||||
|
"instance_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_EXT_layer_settings",
|
||||||
|
"spec_version": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"device_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_KHR_synchronization2",
|
||||||
|
"spec_version": "1",
|
||||||
|
"entrypoints": [
|
||||||
|
"vkCmdSetEvent2KHR",
|
||||||
|
"vkCmdResetEvent2KHR",
|
||||||
|
"vkCmdWaitEvents2KHR",
|
||||||
|
"vkCmdPipelineBarrier2KHR",
|
||||||
|
"vkCmdWriteTimestamp2KHR",
|
||||||
|
"vkQueueSubmit2KHR",
|
||||||
|
"vkCmdWriteBufferMarker2AMD",
|
||||||
|
"vkGetQueueCheckpointData2NV"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"features": {
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "force_enable",
|
||||||
|
"env": "VK_SYNCHRONIZATION2_FORCE_ENABLE",
|
||||||
|
"label": "Force Enable",
|
||||||
|
"description": "Force the layer to be active even if the underlying driver also implements the synchonization2 extension.",
|
||||||
|
"type": "BOOL",
|
||||||
|
"default": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1759
explicit_layer.d/VkLayer_khronos_validation.json
Normal file
1759
explicit_layer.d/VkLayer_khronos_validation.json
Normal file
File diff suppressed because it is too large
Load diff
104
explicit_layer.d/VkLayer_screenshot.json
Normal file
104
explicit_layer.d/VkLayer_screenshot.json
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
{
|
||||||
|
"file_format_version": "1.2.0",
|
||||||
|
"layer": {
|
||||||
|
"name": "VK_LAYER_LUNARG_screenshot",
|
||||||
|
"type": "GLOBAL",
|
||||||
|
"library_path": "../../../lib/libVkLayer_screenshot.dylib",
|
||||||
|
"api_version": "1.3.290",
|
||||||
|
"implementation_version": "1",
|
||||||
|
"description": "LunarG image capture layer",
|
||||||
|
"introduction": "The screenshot layer records frames to image files.",
|
||||||
|
"url": "https://vulkan.lunarg.com/doc/sdk/latest/windows/screenshot_layer.html",
|
||||||
|
"platforms": [
|
||||||
|
"WINDOWS",
|
||||||
|
"LINUX",
|
||||||
|
"MACOS",
|
||||||
|
"ANDROID"
|
||||||
|
],
|
||||||
|
"instance_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_EXT_layer_settings",
|
||||||
|
"spec_version": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"device_extensions": [
|
||||||
|
{
|
||||||
|
"name": "VK_EXT_tooling_info",
|
||||||
|
"spec_version": "1",
|
||||||
|
"entrypoints": [
|
||||||
|
"vkGetPhysicalDeviceToolPropertiesEXT"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"features": {
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"key": "frames",
|
||||||
|
"env": "VK_SCREENSHOT_FRAMES",
|
||||||
|
"label": "Frames",
|
||||||
|
"description": "Specifies list of frames to output as screenshots. It is specified as a comma-separated list of frames or a range of frames with a start, count, and optional interval separated by a dash. Setting the variable to \"all\" will output every frame. Example: \"5-8-2\" will output frame 5, continue until frame 13, dumping every other frame. Example: \"3,8-2\" will output frames 3, 8, and 9. If it is not set or it set to an empty string, no screenshots are created.",
|
||||||
|
"type": "STRING",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dir",
|
||||||
|
"env": "VK_SCREENSHOT_DIR",
|
||||||
|
"label": "Directory",
|
||||||
|
"description": "Specifies the directory in which to create the screenshot files. If it is not set or is set to an empty string, the files will be created in the current working directory.",
|
||||||
|
"type": "SAVE_FOLDER",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "format",
|
||||||
|
"env": "VK_SCREENSHOT_FORMAT",
|
||||||
|
"label": "Format",
|
||||||
|
"description": "Specify a color space for the output. If it is not set, set to null, or set to USE_SWAPCHAIN_COLORSPACE the format will be set to use the same color space as the swapchain object.",
|
||||||
|
"type": "ENUM",
|
||||||
|
"flags": [
|
||||||
|
{
|
||||||
|
"key": "UNORM",
|
||||||
|
"label": "UNORM",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "SNORM",
|
||||||
|
"label": "SNORM",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "USCALED",
|
||||||
|
"label": "USCALED",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "SSCALED",
|
||||||
|
"label": "SSCALED",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "UINT",
|
||||||
|
"label": "UINT",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "SINT",
|
||||||
|
"label": "SINT",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "SRGB",
|
||||||
|
"label": "SRGB",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "USE_SWAPCHAIN_COLORSPACE",
|
||||||
|
"label": "USE_SWAPCHAIN_COLORSPACE",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default": "USE_SWAPCHAIN_COLORSPACE"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
95
flake.lock
Normal file
95
flake.lock
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1727065772,
|
||||||
|
"narHash": "sha256-U9baiEXL2YsS67QKlBAPIUq+OB+eUPKv8n1vGNdhiec=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "989dc4cbf6a95f2e5fefc8cd61d2198a8fb6834a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1726481836,
|
||||||
|
"narHash": "sha256-MWTBH4dd5zIz2iatDb8IkqSjIeFum9jAqkFxgHLdzO4=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "20f9370d5f588fb8c72e844c54511cab054b5f40",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"treefmt-nix": "treefmt-nix",
|
||||||
|
"utils": "utils"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1726734507,
|
||||||
|
"narHash": "sha256-VUH5O5AcOSxb0uL/m34dDkxFKP6WLQ6y4I1B4+N3L2w=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "ee41a466c2255a3abe6bc50fc6be927cdee57a9f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1726560853,
|
||||||
|
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
127
flake.nix
Normal file
127
flake.nix
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
{
|
||||||
|
description = "C/C++ environment";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs";
|
||||||
|
treefmt-nix.url = "github:numtide/treefmt-nix";
|
||||||
|
utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = {
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
treefmt-nix,
|
||||||
|
utils,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
utils.lib.eachDefaultSystem (
|
||||||
|
system: let
|
||||||
|
pkgs = import nixpkgs {inherit system;};
|
||||||
|
|
||||||
|
stdenv =
|
||||||
|
if pkgs.hostPlatform.isLinux
|
||||||
|
then pkgs.stdenvAdapters.useMoldLinker pkgs.llvmPackages_18.stdenv
|
||||||
|
else pkgs.llvmPackages_18.stdenv;
|
||||||
|
|
||||||
|
sources = import ./_sources/generated.nix {
|
||||||
|
inherit (pkgs) fetchFromGitHub fetchgit fetchurl dockerTools;
|
||||||
|
};
|
||||||
|
|
||||||
|
mkPkg = name:
|
||||||
|
pkgs.pkgsStatic.${name}.overrideAttrs {
|
||||||
|
inherit (sources.${name}) pname version src;
|
||||||
|
};
|
||||||
|
|
||||||
|
fmt = mkPkg "fmt";
|
||||||
|
|
||||||
|
deps = with pkgs;
|
||||||
|
[
|
||||||
|
fmt
|
||||||
|
glfw
|
||||||
|
glm
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.isDarwin [
|
||||||
|
darwin.apple_sdk.frameworks.AppKit
|
||||||
|
darwin.apple_sdk.frameworks.Cocoa
|
||||||
|
darwin.apple_sdk.frameworks.Metal
|
||||||
|
darwin.apple_sdk.frameworks.QuartzCore
|
||||||
|
];
|
||||||
|
in
|
||||||
|
with pkgs; {
|
||||||
|
packages = rec {
|
||||||
|
graphics-test = stdenv.mkDerivation {
|
||||||
|
name = "graphics-test";
|
||||||
|
version = "0.1.0";
|
||||||
|
src = self;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = deps;
|
||||||
|
|
||||||
|
configurePhase = ''
|
||||||
|
meson setup build
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
meson compile -C build
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
mv build/graphics-test $out/bin/graphics-test
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
default = graphics-test;
|
||||||
|
};
|
||||||
|
|
||||||
|
formatter = treefmt-nix.lib.mkWrapper pkgs {
|
||||||
|
projectRootFile = "flake.nix";
|
||||||
|
programs = {
|
||||||
|
alejandra.enable = true;
|
||||||
|
deadnix.enable = true;
|
||||||
|
|
||||||
|
clang-format = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.clang-tools_18;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
devShell = mkShell.override {inherit stdenv;} {
|
||||||
|
packages =
|
||||||
|
[
|
||||||
|
alejandra
|
||||||
|
bear
|
||||||
|
llvmPackages_18.clang-tools
|
||||||
|
lldb
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
nvfetcher
|
||||||
|
pkg-config
|
||||||
|
unzip
|
||||||
|
|
||||||
|
(writeScriptBin "build" "meson compile -C build")
|
||||||
|
(writeScriptBin "clean" "meson setup build --wipe")
|
||||||
|
(writeScriptBin "reconfigure" "meson setup build --reconfigure")
|
||||||
|
(writeScriptBin "run" "meson compile -C build && build/graphics-test")
|
||||||
|
]
|
||||||
|
++ deps;
|
||||||
|
|
||||||
|
shellHook = lib.optionals stdenv.isDarwin ''
|
||||||
|
export PATH="${llvmPackages_18.clang-tools}/bin:$PATH"
|
||||||
|
export MOLTENVK_LIBRARY_PATH="${darwin.moltenvk}/lib";
|
||||||
|
export VULKAN_INCLUDE_DIRS="${darwin.moltenvk.dev}/include:${vulkan-headers}/include";
|
||||||
|
export VK_ICD_FILENAMES="${darwin.moltenvk}/share/vulkan/icd.d/MoltenVK_icd.json"
|
||||||
|
export VK_LAYER_PATH="${./explicit_layer.d}";
|
||||||
|
'';
|
||||||
|
|
||||||
|
name = "C++";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
77
meson.build
Normal file
77
meson.build
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
project(
|
||||||
|
'graphics-test',
|
||||||
|
'cpp',
|
||||||
|
version: '0.1.0',
|
||||||
|
default_options: [
|
||||||
|
'cpp_std=c++20',
|
||||||
|
'warning_level=everything',
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
cpp = meson.get_compiler('cpp')
|
||||||
|
|
||||||
|
common_cpp_args = [
|
||||||
|
'-Wno-c++20-compat',
|
||||||
|
'-Wno-c++20-extensions',
|
||||||
|
'-Wno-c++98-compat',
|
||||||
|
'-Wno-c++98-compat-pedantic',
|
||||||
|
'-Wno-disabled-macro-expansion',
|
||||||
|
'-Wno-missing-prototypes',
|
||||||
|
'-Wno-padded',
|
||||||
|
'-Wno-pre-c++20-compat-pedantic',
|
||||||
|
'-Wno-switch-default',
|
||||||
|
'-Wno-unsafe-buffer-usage',
|
||||||
|
'-Wunused-function',
|
||||||
|
'-fvisibility=hidden',
|
||||||
|
]
|
||||||
|
|
||||||
|
add_project_arguments(cpp.get_supported_arguments(common_cpp_args), language: 'cpp')
|
||||||
|
|
||||||
|
source_file_names = [
|
||||||
|
'src/main.cpp',
|
||||||
|
]
|
||||||
|
|
||||||
|
sources = []
|
||||||
|
|
||||||
|
foreach file : source_file_names
|
||||||
|
sources += files(file)
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
deps = [
|
||||||
|
dependency('fmt', static: true),
|
||||||
|
dependency('glfw3'),
|
||||||
|
dependency('glm'),
|
||||||
|
]
|
||||||
|
|
||||||
|
if build_machine.system() == 'darwin'
|
||||||
|
molten_dirs = []
|
||||||
|
|
||||||
|
pymodule = import('python3')
|
||||||
|
|
||||||
|
python3 = pymodule.find_python()
|
||||||
|
|
||||||
|
res = run_command(python3, '-c', 'import os; print(os.environ["MOLTENVK_LIBRARY_PATH"])', check: false)
|
||||||
|
|
||||||
|
if res.returncode() == 0
|
||||||
|
molten_dirs += res.stdout().strip()
|
||||||
|
elif import('fs').exists('/opt/homebrew/lib/libMoltenVK.a')
|
||||||
|
molten_dirs += '/opt/homebrew/lib'
|
||||||
|
endif
|
||||||
|
|
||||||
|
deps += cpp.find_library('MoltenVK', required: true, dirs: molten_dirs)
|
||||||
|
|
||||||
|
res = run_command(python3, '-c', 'import os; print(os.environ["VULKAN_INCLUDE_DIRS"])', check: false)
|
||||||
|
|
||||||
|
if res.returncode() == 0
|
||||||
|
include_dirs = include_directories(res.stdout().strip().split(':'), is_system: true)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
deps += dependency('vulkan')
|
||||||
|
endif
|
||||||
|
|
||||||
|
executable(
|
||||||
|
'graphics-test',
|
||||||
|
sources,
|
||||||
|
include_directories: include_dirs,
|
||||||
|
dependencies: deps,
|
||||||
|
)
|
3
nvfetcher.toml
Normal file
3
nvfetcher.toml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[fmt]
|
||||||
|
src.github = "fmtlib/fmt"
|
||||||
|
fetch.github = "fmtlib/fmt"
|
147
src/main.cpp
Normal file
147
src/main.cpp
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <fmt/base.h>
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#define GLFW_INCLUDE_NONE
|
||||||
|
#define GLFW_INCLUDE_VULKAN
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
#include "util/types.h"
|
||||||
|
|
||||||
|
constexpr u32 WIDTH = 800;
|
||||||
|
constexpr u32 HEIGHT = 600;
|
||||||
|
|
||||||
|
constexpr std::array<const char*, 1> validationLayers = { "VK_LAYER_KHRONOS_validation" };
|
||||||
|
|
||||||
|
#if defined(NDEBUG) or defined(__APPLE__)
|
||||||
|
const bool enableValidationLayers = false;
|
||||||
|
#else
|
||||||
|
const bool enableValidationLayers = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class Application {
|
||||||
|
public:
|
||||||
|
fn run() -> void {
|
||||||
|
initWindow();
|
||||||
|
initVulkan();
|
||||||
|
mainLoop();
|
||||||
|
cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
VkInstance mInstance;
|
||||||
|
GLFWwindow* mWindow;
|
||||||
|
|
||||||
|
static fn checkValidationLayerSupport() -> bool {
|
||||||
|
u32 layerCount = 0;
|
||||||
|
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
|
||||||
|
|
||||||
|
std::vector<VkLayerProperties> availableLayers(layerCount);
|
||||||
|
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());
|
||||||
|
|
||||||
|
fmt::println("Available layers:");
|
||||||
|
|
||||||
|
for (const auto& layerProperties : availableLayers) {
|
||||||
|
fmt::println("\t{}", layerProperties.layerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const char* layerName : validationLayers) {
|
||||||
|
bool layerFound = false;
|
||||||
|
|
||||||
|
for (const auto& layerProperties : availableLayers) {
|
||||||
|
if (strcmp(
|
||||||
|
static_cast<const char*>(layerName),
|
||||||
|
static_cast<const char*>(layerProperties.layerName)
|
||||||
|
) == 0) {
|
||||||
|
layerFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!layerFound)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static fn getAvailableExtensions() -> std::vector<VkExtensionProperties> {
|
||||||
|
u32 extensionCount = 0;
|
||||||
|
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
|
||||||
|
|
||||||
|
std::vector<VkExtensionProperties> extensions(extensionCount);
|
||||||
|
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, extensions.data());
|
||||||
|
|
||||||
|
return extensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn createInstance() -> void {
|
||||||
|
fmt::println("Available extensions:");
|
||||||
|
|
||||||
|
for (const fn& extension : getAvailableExtensions())
|
||||||
|
fmt::println("\t{}", extension.extensionName);
|
||||||
|
|
||||||
|
if (enableValidationLayers && !checkValidationLayerSupport())
|
||||||
|
throw std::runtime_error("Validation layers requested, but not available!");
|
||||||
|
|
||||||
|
VkApplicationInfo appInfo {};
|
||||||
|
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; // Used for pNext
|
||||||
|
appInfo.pApplicationName = "Hello Triangle";
|
||||||
|
appInfo.pEngineName = "No Engine";
|
||||||
|
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
|
||||||
|
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
|
||||||
|
appInfo.apiVersion = VK_API_VERSION_1_0;
|
||||||
|
|
||||||
|
uint32_t glfwExtensionCount = 0;
|
||||||
|
const char** glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
|
||||||
|
|
||||||
|
VkInstanceCreateInfo createInfo {};
|
||||||
|
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||||
|
createInfo.pApplicationInfo = &appInfo;
|
||||||
|
createInfo.enabledExtensionCount = glfwExtensionCount;
|
||||||
|
createInfo.ppEnabledExtensionNames = glfwExtensions;
|
||||||
|
createInfo.enabledLayerCount = 0;
|
||||||
|
|
||||||
|
if (vkCreateInstance(&createInfo, nullptr, &mInstance) != VK_SUCCESS)
|
||||||
|
throw std::runtime_error("Failed to create Vulkan instance!");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn initWindow() -> void {
|
||||||
|
// Initialize GLFW
|
||||||
|
glfwInit();
|
||||||
|
|
||||||
|
// Don't create an OpenGL context
|
||||||
|
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
||||||
|
|
||||||
|
// Disable Resizing
|
||||||
|
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
|
||||||
|
|
||||||
|
mWindow = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn initVulkan() -> void { createInstance(); }
|
||||||
|
|
||||||
|
fn mainLoop() -> void {
|
||||||
|
while (!glfwWindowShouldClose(mWindow)) glfwPollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cleanup() -> void {
|
||||||
|
vkDestroyInstance(mInstance, nullptr);
|
||||||
|
glfwDestroyWindow(mWindow);
|
||||||
|
glfwTerminate();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() -> int {
|
||||||
|
Application app;
|
||||||
|
|
||||||
|
try {
|
||||||
|
app.run();
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
std::cerr << e.what() << std::endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
128
src/util/types.h
Normal file
128
src/util/types.h
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#define fn auto
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef u8
|
||||||
|
* @brief Represents an 8-bit unsigned integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 8-bit unsigned integers, ranging from 0 to 255.
|
||||||
|
* It is based on the std::uint8_t type.
|
||||||
|
*/
|
||||||
|
using u8 = std::uint8_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef u16
|
||||||
|
* @brief Represents a 16-bit unsigned integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 16-bit unsigned integers, ranging from 0 to 65,535.
|
||||||
|
* It is based on the std::uint16_t type.
|
||||||
|
*/
|
||||||
|
using u16 = std::uint16_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef u32
|
||||||
|
* @brief Represents a 32-bit unsigned integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 32-bit unsigned integers, ranging from 0 to 4,294,967,295.
|
||||||
|
* It is based on the std::uint32_t type.
|
||||||
|
*/
|
||||||
|
using u32 = std::uint32_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef u64
|
||||||
|
* @brief Represents a 64-bit unsigned integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 64-bit unsigned integers, ranging from 0 to
|
||||||
|
* 18,446,744,073,709,551,615. It is based on the std::uint64_t type.
|
||||||
|
*/
|
||||||
|
using u64 = std::uint64_t;
|
||||||
|
|
||||||
|
// Type Aliases for Signed Integers
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef i8
|
||||||
|
* @brief Represents an 8-bit signed integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 8-bit signed integers, ranging from -128 to 127.
|
||||||
|
* It is based on the std::int8_t type.
|
||||||
|
*/
|
||||||
|
using i8 = std::int8_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef i16
|
||||||
|
* @brief Represents a 16-bit signed integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 16-bit signed integers, ranging from -32,768 to 32,767.
|
||||||
|
* It is based on the std::int16_t type.
|
||||||
|
*/
|
||||||
|
using i16 = std::int16_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef i32
|
||||||
|
* @brief Represents a 32-bit signed integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 32-bit signed integers, ranging from -2,147,483,648 to 2,147,483,647.
|
||||||
|
* It is based on the std::int32_t type.
|
||||||
|
*/
|
||||||
|
using i32 = std::int32_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef i64
|
||||||
|
* @brief Represents a 64-bit signed integer.
|
||||||
|
*
|
||||||
|
* This type alias is used for 64-bit signed integers, ranging from -9,223,372,036,854,775,808 to
|
||||||
|
* 9,223,372,036,854,775,807. It is based on the std::int64_t type.
|
||||||
|
*/
|
||||||
|
using i64 = std::int64_t;
|
||||||
|
|
||||||
|
// Type Aliases for Floating-Point Numbers
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef f32
|
||||||
|
* @brief Represents a 32-bit floating-point number.
|
||||||
|
*
|
||||||
|
* This type alias is used for 32-bit floating-point numbers, which follow the IEEE 754 standard.
|
||||||
|
* It is based on the float type.
|
||||||
|
*/
|
||||||
|
using f32 = float;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef f64
|
||||||
|
* @brief Represents a 64-bit floating-point number.
|
||||||
|
*
|
||||||
|
* This type alias is used for 64-bit floating-point numbers, which follow the IEEE 754 standard.
|
||||||
|
* It is based on the double type.
|
||||||
|
*/
|
||||||
|
using f64 = double;
|
||||||
|
|
||||||
|
// Type Aliases for Size Types
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef usize
|
||||||
|
* @brief Represents an unsigned size type.
|
||||||
|
*
|
||||||
|
* This type alias is used for representing the size of objects in bytes.
|
||||||
|
* It is based on the std::size_t type, which is the result type of the sizeof operator.
|
||||||
|
*/
|
||||||
|
using usize = std::size_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef isize
|
||||||
|
* @brief Represents a signed size type.
|
||||||
|
*
|
||||||
|
* This type alias is used for representing pointer differences.
|
||||||
|
* It is based on the std::ptrdiff_t type, which is the signed integer type returned when
|
||||||
|
* subtracting two pointers.
|
||||||
|
*/
|
||||||
|
using isize = std::ptrdiff_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef string
|
||||||
|
* @brief Represents a string.
|
||||||
|
*/
|
||||||
|
using string = std::string;
|
Loading…
Reference in a new issue