Mercurial > games > semicongine
comparison src/vulkan_api/vulkan_api_generator.nim @ 81:fa1b6107deae
did: final cleanup for now
| author | Sam <sam@basx.dev> |
|---|---|
| date | Wed, 22 Feb 2023 18:36:01 +0700 |
| parents | 637da715b604 |
| children | 5e19aead2b61 |
comparison
equal
deleted
inserted
replaced
| 80:637da715b604 | 81:fa1b6107deae |
|---|---|
| 7 import std/streams | 7 import std/streams |
| 8 import std/tables | 8 import std/tables |
| 9 import httpClient | 9 import httpClient |
| 10 import std/xmlparser | 10 import std/xmlparser |
| 11 import std/xmltree | 11 import std/xmltree |
| 12 | |
| 13 type | |
| 14 FileContent = seq[string] | |
| 15 | 12 |
| 16 const | 13 const |
| 17 TYPEMAP = { | 14 TYPEMAP = { |
| 18 "void": "void", | 15 "void": "void", |
| 19 "char": "char", | 16 "char": "char", |
| 309 a[k] = @[] | 306 a[k] = @[] |
| 310 a[k].add v | 307 a[k].add v |
| 311 | 308 |
| 312 | 309 |
| 313 proc main() = | 310 proc main() = |
| 314 if not os.fileExists("vk.xml"): | 311 let file = getTempDir() / "vk.xml" |
| 312 if not os.fileExists(file): | |
| 315 let client = newHttpClient() | 313 let client = newHttpClient() |
| 316 let glUrl = "https://raw.githubusercontent.com/KhronosGroup/Vulkan-Docs/main/xml/vk.xml" | 314 let glUrl = "https://raw.githubusercontent.com/KhronosGroup/Vulkan-Docs/main/xml/vk.xml" |
| 317 client.downloadFile(glUrl, "vk.xml") | 315 client.downloadFile(glUrl, file) |
| 318 | 316 |
| 319 let api = loadXml("vk.xml") | 317 let api = loadXml(file) |
| 320 | 318 |
| 321 const outdir = "src/vulkan_api/output" | 319 const outdir = "src/vulkan_api/output" |
| 322 removeDir outdir | 320 removeDir outdir |
| 323 createDir outdir | 321 createDir outdir |
| 324 createDir outdir / "platform" | 322 createDir outdir / "platform" |
| 350 "if vulkanLib == nil:", | 348 "if vulkanLib == nil:", |
| 351 " raise newException(Exception, \"Unable to load vulkan library\")", | 349 " raise newException(Exception, \"Unable to load vulkan library\")", |
| 352 "func VK_MAKE_API_VERSION*(variant: uint32, major: uint32, minor: uint32, patch: uint32): uint32 {.compileTime.} =", | 350 "func VK_MAKE_API_VERSION*(variant: uint32, major: uint32, minor: uint32, patch: uint32): uint32 {.compileTime.} =", |
| 353 " (variant shl 29) or (major shl 22) or (minor shl 12) or patch", | 351 " (variant shl 29) or (major shl 22) or (minor shl 12) or patch", |
| 354 "", | 352 "", |
| 353 """template checkVkResult*(call: untyped) = | |
| 354 when defined(release): | |
| 355 discard call | |
| 356 else: | |
| 357 # yes, a bit cheap, but this is only for nice debug output | |
| 358 var callstr = astToStr(call).replace("\n", "") | |
| 359 while callstr.find(" ") >= 0: | |
| 360 callstr = callstr.replace(" ", " ") | |
| 361 debug "CALLING vulkan: ", callstr | |
| 362 let value = call | |
| 363 if value != VK_SUCCESS: | |
| 364 error "Vulkan error: ", astToStr(call), " returned ", $value | |
| 365 raise newException(Exception, "Vulkan error: " & astToStr(call) & | |
| 366 " returned " & $value)""", | |
| 355 "type", | 367 "type", |
| 356 ], | 368 ], |
| 357 "structs": @["type"], | 369 "structs": @["type"], |
| 358 "enums": @["type"], | 370 "enums": @["type"], |
| 359 "commands": @[], | 371 "commands": @[], |
| 503 for section in ["basetypes", "enums", "structs", "commands"]: | 515 for section in ["basetypes", "enums", "structs", "commands"]: |
| 504 mainout.add outputFiles[section] | 516 mainout.add outputFiles[section] |
| 505 for platform in api.findAll("platform"): | 517 for platform in api.findAll("platform"): |
| 506 mainout.add &"when defined({platform.attr(\"protect\")}):" | 518 mainout.add &"when defined({platform.attr(\"protect\")}):" |
| 507 mainout.add &" include platform/{platform.attr(\"name\")}" | 519 mainout.add &" include platform/{platform.attr(\"name\")}" |
| 508 writeFile outdir / &"types.nim", mainout.join("\n") | 520 writeFile outdir / &"api.nim", mainout.join("\n") |
| 509 | 521 |
| 510 for filename, filecontent in outputFiles.pairs: | 522 for filename, filecontent in outputFiles.pairs: |
| 511 if filename.startsWith("platform/"): | 523 if filename.startsWith("platform/"): |
| 512 writeFile outdir / &"{filename}.nim", (@[ | 524 writeFile outdir / &"{filename}.nim", (@[ |
| 513 "type" | 525 "type" |
