mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-06-03 07:08:15 +02:00
Compare commits
523 Commits
b090a070c8
..
v2.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
| f8dc9613d6 | |||
| 07f521d3d5 | |||
| d2a8ac46f6 | |||
| f73fa1b02d | |||
| 2030534cf2 | |||
| 712ac4be64 | |||
| 809bea2fca | |||
| 285bcda21f | |||
| c9870faaf1 | |||
| c6490c979c | |||
| 427e5aa099 | |||
| 55f1df2ec7 | |||
| 273255ecfe | |||
| f9ef8fc790 | |||
| 54b45824b3 | |||
| aa345c7e38 | |||
| 9874c1fd5b | |||
| 1da9fd767d | |||
| c6fefe2ffa | |||
| c60c176a54 | |||
| cd906ca117 | |||
| f6708058b3 | |||
| f07131686f | |||
| 036fa0e7b6 | |||
| b6edf442a2 | |||
| b6660b99d6 | |||
| ffff4722b7 | |||
| 8f4dc6e3b5 | |||
| 6de8d3a4fd | |||
| 24d9b4b6c9 | |||
| 905859acba | |||
| 213a8f6a6d | |||
| 42e62ac3eb | |||
| 30328b1732 | |||
| 335c797c12 | |||
| d3808cde1a | |||
| 9183e7c1e8 | |||
| 17ae77d11a | |||
| d379e5a9fe | |||
| 7d407fc6d1 | |||
| 47f6bc73e9 | |||
| 4987a8ca6e | |||
| ab4d67d764 | |||
| 11ccc041d2 | |||
| 323b16f107 | |||
| 0622684e40 | |||
| f5333882c6 | |||
| 5d4d97e05d | |||
| 5a04ad7781 | |||
| e1add20315 | |||
| 9bb95be679 | |||
| 97ea5e3acf | |||
| 841d140c69 | |||
| fc74873bc6 | |||
| 37ea1b1cd4 | |||
| 1bf92b3b26 | |||
| cda4faa103 | |||
| 5529bbd2e1 | |||
| ec2c444051 | |||
| 56fec8d1ff | |||
| e29f5e7edd | |||
| 17fcb85adc | |||
| b8966d5907 | |||
| 50edf78e7d | |||
| 89b1ae475f | |||
| 44484798e8 | |||
| 8cf08d3490 | |||
| c85a30e669 | |||
| f401b3694a | |||
| f27e5ef043 | |||
| 35b7408eab | |||
| 71d1c20a27 | |||
| 8d879fb5bc | |||
| d1a5bceb03 | |||
| 5bd66fd362 | |||
| 142ea2d39f | |||
| 21964fc628 | |||
| af70e2e354 | |||
| 77f1a2d8f8 | |||
| fc404a4d22 | |||
| 601c2435f1 | |||
| ea950a1901 | |||
| 524da32c65 | |||
| 3153941573 | |||
| 51427dce86 | |||
| 245d556105 | |||
| df05148d22 | |||
| f7ddf3cccb | |||
| 77240013a4 | |||
| 1721632a75 | |||
| d3bf2505f6 | |||
| c6d6c821a9 | |||
| d4bd8b62c5 | |||
| fc6aeab678 | |||
| 53bb936453 | |||
| a7fdb5838d | |||
| ef61b7943e | |||
| 185a2b700c | |||
| da85343e32 | |||
| d8a6676063 | |||
| 47d0cfb20b | |||
| 92c8014af1 | |||
| 101b8dac7b | |||
| cfb41b7b27 | |||
| aa26e528c4 | |||
| e7cb78557f | |||
| 05d07e5b72 | |||
| 8f757cab08 | |||
| c7484b771f | |||
| 418feba7d3 | |||
| 0c35f2702e | |||
| 226430f01e | |||
| ae3be69081 | |||
| 307270532f | |||
| 04f9cb1d95 | |||
| 59455495b6 | |||
| c45a76a5bf | |||
| 632117a3a3 | |||
| 0ea0cde668 | |||
| 74dd8a01e2 | |||
| 09561328ed | |||
| baa0ab0a2c | |||
| fd56e83c7b | |||
| ea2ee83a3e | |||
| 5be3c86de4 | |||
| ae02055e18 | |||
| 74e2d04b7b | |||
| 6ad95ca4c4 | |||
| f08b1f6c8a | |||
| 4d640ed70c | |||
| 85ada83d57 | |||
| c9ca2187b3 | |||
| 6a0f4fd8dc | |||
| cf773b586e | |||
| c718915927 | |||
| 0b3ca8ec0c | |||
| 3f065bc77e | |||
| 8dd6def84d | |||
| 4e1ae347a8 | |||
| 4ed84d43c1 | |||
| 48801d1070 | |||
| e9a8a0cb84 | |||
| 83432cb356 | |||
| 527a88ebaa | |||
| 7079e1e42d | |||
| 7243c67c3e | |||
| 94873df8fe | |||
| 25b605d7d9 | |||
| f743fc717f | |||
| 8191191fff | |||
| 9631305e35 | |||
| 14b42a7c9e | |||
| f50dd2d946 | |||
| 3dd68f9942 | |||
| ffe5704673 | |||
| 20ec13d2b9 | |||
| 77bfe4ff11 | |||
| 33d2b98c55 | |||
| 1adce43d9f | |||
| 466050ee7a | |||
| 6bc505de13 | |||
| d70d748877 | |||
| 6eaf871d45 | |||
| 0a84ea6a18 | |||
| 1b996af83f | |||
| b7d554553b | |||
| d5eeef9559 | |||
| 5cda85d16c | |||
| 9318456afb | |||
| 40fe100ecc | |||
| c1bfc0f27d | |||
| 5a09ebb179 | |||
| 8370ae8324 | |||
| a4fcbf187b | |||
| b15aa648e2 | |||
| 9a88a8502e | |||
| 34a46d643a | |||
| 7ecee717f8 | |||
| 359be83f49 | |||
| 8c8c96bf30 | |||
| e30a243452 | |||
| f8e1cd4a66 | |||
| d5512b72fa | |||
| 86f3d545ee | |||
| 9149f42b95 | |||
| 7aea6682f2 | |||
| d0ca0e4ab7 | |||
| f6dfed48dd | |||
| 5a69dff9d7 | |||
| b7e2164f91 | |||
| 37e9410d12 | |||
| 273858ec8f | |||
| 8f088eb76d | |||
| a7433a6570 | |||
| 3ab445e780 | |||
| dd554cce2a | |||
| a182b53d7f | |||
| a5f85a8a4c | |||
| edb44070a9 | |||
| be19b71c55 | |||
| ae6a86800e | |||
| b85e0444cb | |||
| f8a856db1c | |||
| fc33d33508 | |||
| 14698594d8 | |||
| 024f3fefc3 | |||
| 33872806a1 | |||
| 3b4a1de9f3 | |||
| 5af4c82c1b | |||
| e26af9ae1b | |||
| 8c41eefadb | |||
| 25d86eccee | |||
| 2393261cb0 | |||
| d9d165f17e | |||
| f446c82780 | |||
| 810417a251 | |||
| cc507ea4cf | |||
| 0e04356ea7 | |||
| b5983ac24b | |||
| abc213c808 | |||
| 86671b8919 | |||
| 982e3e6827 | |||
| e2ea602372 | |||
| 7f80671be8 | |||
| 42fc7d9a86 | |||
| 60d3df7969 | |||
| be52578d37 | |||
| 57c5ae5415 | |||
| c6d6e409f1 | |||
| c0dfcd9244 | |||
| 689608b3fe | |||
| 04330a10ac | |||
| a456ad15ce | |||
| e621bb53d4 | |||
| 420ba21b4d | |||
| f3de55d6e9 | |||
| bc1e0fbba9 | |||
| 80c0146ecd | |||
| dbe3bb3cb3 | |||
| 83ecc6e498 | |||
| 8b2965f6dd | |||
| 6c31d3347a | |||
| 7f8ec481f1 | |||
| 25bb57a973 | |||
| 39365f52a2 | |||
| fafc94248d | |||
| edeaff793a | |||
| 2d5758419f | |||
| ba063dae3b | |||
| e018cad851 | |||
| 9ee8041710 | |||
| 1b50e123c5 | |||
| 77563b8449 | |||
| d0923320a3 | |||
| d8cab7aa47 | |||
| fcf4d3d030 | |||
| 05362905f7 | |||
| 6866f2240e | |||
| 1903104247 | |||
| 04db0a7441 | |||
| 91cbb15b66 | |||
| eeded8c8bc | |||
| 58e687c952 | |||
| a0b536483a | |||
| de1e8ed563 | |||
| a832c3ca40 | |||
| 575ee21c7a | |||
| 071bc4596b | |||
| 178690cff3 | |||
| 1d566f74e3 | |||
| eaa1b9afd0 | |||
| a2d40ce844 | |||
| 4dcdcde7d5 | |||
| 8805f91bfd | |||
| b5ca757189 | |||
| c2d27c8434 | |||
| 5f55dd9b9a | |||
| f044b9ab45 | |||
| 8c6ad92f37 | |||
| 34bdb740c2 | |||
| c485f039fb | |||
| 3c60e76094 | |||
| 39650b5c96 | |||
| 0f16255240 | |||
| 91661fd206 | |||
| 6648bd427f | |||
| aa2d0be63f | |||
| 2b557d5be7 | |||
| 36fae5c7d1 | |||
| 68570910e3 | |||
| 697a5e7147 | |||
| 31073c116c | |||
| c6a024d911 | |||
| 66a1b44224 | |||
| f5c581d89c | |||
| 765a04d9b5 | |||
| ac054830b9 | |||
| ccbd7561f4 | |||
| 2859725257 | |||
| f18cce29b3 | |||
| d9a7f337ba | |||
| f8e619ad94 | |||
| ea6450b308 | |||
| 6df9c284b8 | |||
| d6b3f5dcc2 | |||
| 826740906f | |||
| 2c1f5181bf | |||
| e728926521 | |||
| 04af533469 | |||
| 53048bd82a | |||
| d0a19c5312 | |||
| 6e284fb9bc | |||
| ea87c32051 | |||
| d73ade4a85 | |||
| 67bfc73066 | |||
| 8b44a3aa6e | |||
| 36f9fdd53b | |||
| 9c43069e5f | |||
| 0b6e1717d9 | |||
| 41f7b4ef4c | |||
| 418791930c | |||
| 0690ecacd8 | |||
| 36f7efb679 | |||
| a52e33e697 | |||
| 086c5402f5 | |||
| dd1bd43360 | |||
| d515ca5333 | |||
| eeb4695d6c | |||
| e94d3fd70f | |||
| e76f084625 | |||
| 6e1fcb381a | |||
| 52c309a288 | |||
| 9ad28d7cf2 | |||
| 5f21f0bcf9 | |||
| 066eec2cf3 | |||
| 03e21227fa | |||
| 6f05728906 | |||
| 5edc36393a | |||
| af29fc7b39 | |||
| 9795988e14 | |||
| 4087fca980 | |||
| f3efb72a21 | |||
| fc97445875 | |||
| 5babfde870 | |||
| 04ffce60cd | |||
| 9aaa26ddf5 | |||
| df12d08ad3 | |||
| 064f660852 | |||
| bf6389f9a7 | |||
| cae3db0ebf | |||
| 79b01a5007 | |||
| 91927126f2 | |||
| 6fb8932ba9 | |||
| 536cf4c420 | |||
| 1b49794be6 | |||
| 25f73a6967 | |||
| b7424e7f92 | |||
| 0b4b32b5ac | |||
| 1922b409dd | |||
| 80e938c019 | |||
| 68d2c63694 | |||
| 1386fe64cb | |||
| 7fd0ccff94 | |||
| b28b144edb | |||
| 8e33b2fa30 | |||
| cebadef063 | |||
| 57b27adf1a | |||
| d08a97f55c | |||
| c7ad6650d9 | |||
| ac91253f51 | |||
| 3d939675e4 | |||
| 11b1bd147d | |||
| c013237219 | |||
| 8039638885 | |||
| d56b224d42 | |||
| 6ccf2a10d7 | |||
| cfd1aab9e3 | |||
| c5752f773e | |||
| f398126e08 | |||
| 6c0d8829a5 | |||
| cf3f16d832 | |||
| b60ae54e34 | |||
| 7786b07eb8 | |||
| 90b1dac0f5 | |||
| 3c52fd05f3 | |||
| 843d7f0fe2 | |||
| ea2014819d | |||
| e458ef6401 | |||
| 0494ff14da | |||
| c2c2dece61 | |||
| 401e6d13f3 | |||
| 2e5346a0ff | |||
| ce5157a299 | |||
| b5ce2347f6 | |||
| 9e0a0df5ca | |||
| 8f6f50c37f | |||
| c36de40f4a | |||
| 52ca0c0d1b | |||
| 651a05c4bc | |||
| 1cfb8745e2 | |||
| b3f3a01ee6 | |||
| 4acd240737 | |||
| b79b8da031 | |||
| bc7ef4484f | |||
| 9db5515fb5 | |||
| 387a1f5632 | |||
| 0babc2235f | |||
| 1a9a6ec6f8 | |||
| d59d9f285a | |||
| d16af1c4a8 | |||
| 5dcc2045d6 | |||
| 19ce912afe | |||
| 890e301b78 | |||
| 218a97e4ec | |||
| 74e5e35f5a | |||
| e6298b1dc3 | |||
| df860a5a64 | |||
| b22064035a | |||
| 197c71021b | |||
| d5fa70d7ab | |||
| fd8e98f1ce | |||
| 0e10e5f8e1 | |||
| 689c9b3ed4 | |||
| ecd43dedc5 | |||
| dea507ec0e | |||
| 39501f2940 | |||
| 372f818da4 | |||
| 1651f9ba97 | |||
| c7e09f1d8c | |||
| 82529d6dc9 | |||
| 4e30bd02bf | |||
| f8c2abb20b | |||
| 880ac98ca9 | |||
| 49c211cebc | |||
| 38768c85c9 | |||
| c7433ec419 | |||
| d6b6dd955c | |||
| c125dde951 | |||
| 9934b34bba | |||
| 3e3f20513f | |||
| c93d7854d0 | |||
| 9fdb514541 | |||
| 35f5f41258 | |||
| f6201014aa | |||
| c583f1abc8 | |||
| f7cf64cbb9 | |||
| b882771a18 | |||
| 39aa8009a4 | |||
| 5dce6a2c8e | |||
| 52929e215c | |||
| ad60a17da9 | |||
| d29cd56044 | |||
| d6795f97ef | |||
| 2fa7e2d4a9 | |||
| 85c43dabf4 | |||
| e6ed390e84 | |||
| 6cd3422337 | |||
| c0f539b57f | |||
| 497879a0bc | |||
| 5b43b47f90 | |||
| ab4ebc34d5 | |||
| 587e71b940 | |||
| 11073a2cbc | |||
| c1898fb8dd | |||
| 453ee0850b | |||
| 3dd055b406 | |||
| 08cbbfa836 | |||
| ce7e3ac88d | |||
| cc810368aa | |||
| ec757ab292 | |||
| fc9fa1a980 | |||
| 469716e72b | |||
| 254f80b442 | |||
| 4d19598ac2 | |||
| 774f7c41b0 | |||
| 4f8dbc794c | |||
| 281bf2dcd2 | |||
| a7ac7b2318 | |||
| 3b0442df7e | |||
| 6e92a3c32b | |||
| aadfb7449c | |||
| c1f3e49975 | |||
| e39dc7ee7e | |||
| a6b72fbc6f | |||
| 5847172049 | |||
| e98bd490b2 | |||
| 31e08416e0 | |||
| 4edd619841 | |||
| 77f707ca7a | |||
| 5f1298f9ce | |||
| b71c0eafb8 | |||
| 39c7857ccc | |||
| ff6fb56042 | |||
| 0c79a0d01c | |||
| 34cc9d63da | |||
| 3863bd3378 | |||
| 026f83ca81 | |||
| 77d71adc1f | |||
| b4b3bbda54 | |||
| 5f16a98d08 | |||
| f6c6b5e018 | |||
| 8ae152e67a | |||
| 66022c08fb | |||
| 0466c40242 | |||
| 83e6ebb430 | |||
| f4bf7ea6b7 | |||
| d360c8fb6a | |||
| e444856964 | |||
| 7a5e280322 | |||
| 534bea942c | |||
| 3a93881392 | |||
| e9c3fb8046 | |||
| 90c1aaad4b | |||
| 0aae9015a9 | |||
| b170354e7f | |||
| 659f6cc14e | |||
| 72d6802230 | |||
| 4c1043ee17 | |||
| 54fc452aa2 | |||
| f1e0499564 | |||
| 4a67aab716 | |||
| f52c4e51c9 | |||
| 5df9b4d39f |
@@ -7,6 +7,5 @@ version: 2
|
|||||||
updates:
|
updates:
|
||||||
- package-ecosystem: "github-actions" # See documentation for possible values
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
directory: "/" # Location of package manifests
|
directory: "/" # Location of package manifests
|
||||||
target-branch: "indev"
|
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
name: Fetch Dependencies
|
name: Fetch Dependencies
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * 0' # Runs weekly
|
- cron: '0 0 * * 0' # Runs weekly
|
||||||
|
|
||||||
@@ -11,24 +10,20 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Run Fetch Dependencies Script
|
- name: Run Fetch Dependencies Script
|
||||||
run: cd scripts && bash ./fetch_dependencies.sh
|
run: cd scripts && bash ./fetch_dependencies.sh
|
||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
uses: peter-evans/create-pull-request@v8
|
uses: peter-evans/create-pull-request@v6
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
|
||||||
delete-branch: true
|
|
||||||
title: update dependencies
|
title: update dependencies
|
||||||
commit-message: "[BOT] update dependencies"
|
commit-message: "[BOT] update dependencies"
|
||||||
committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
committer: GitHub <noreply@github.com>
|
||||||
author: kbJeff-8 <kbJeff-8@users.noreply.github.com>
|
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
|
||||||
signoff: false
|
signoff: false
|
||||||
base: indev
|
base: indev
|
||||||
assignees: Kbz-8
|
|
||||||
reviewers: Kbz-8
|
|
||||||
branch: auto_deps_updates
|
branch: auto_deps_updates
|
||||||
labels: |
|
labels: |
|
||||||
automated
|
automated
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/first-interaction@v2
|
- uses: actions/first-interaction@v1
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
issue-message: |
|
issue-message: |
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
name: Linux (clang)
|
name: Linux (clang)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
@@ -17,13 +15,14 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-24.04]
|
os: [ubuntu-24.04]
|
||||||
arch: [x86_64]
|
arch: [x86_64]
|
||||||
|
mode: [release]
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
name: Linux (gcc)
|
name: Linux (gcc)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
@@ -17,13 +15,14 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-24.04]
|
os: [ubuntu-24.04]
|
||||||
arch: [x86_64]
|
arch: [x86_64]
|
||||||
|
mode: [release]
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
name: Linux (meson)
|
|
||||||
|
|
||||||
on:
|
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- '.gitignore'
|
|
||||||
- 'LICENSE'
|
|
||||||
- 'README.md'
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-24.04]
|
|
||||||
arch: [x86_64]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get -y install mesa-common-dev clang libsdl2-2.0-0 libsdl2-dev build-essential libvulkan-dev
|
|
||||||
|
|
||||||
- name: Python
|
|
||||||
uses: actions/setup-python@v6
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
|
|
||||||
- name: Install Meson with pip
|
|
||||||
run: sudo pip3 install meson
|
|
||||||
|
|
||||||
- name: Build with meson
|
|
||||||
run: |
|
|
||||||
meson build --prefix=$PWD/ --bindir='' --libdir=''
|
|
||||||
ninja install -C build
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
name: macOS (meson)
|
|
||||||
|
|
||||||
on:
|
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- '.gitignore'
|
|
||||||
- 'LICENSE'
|
|
||||||
- 'README.md'
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [macOS-latest]
|
|
||||||
arch: [x86_64, arm]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: |
|
|
||||||
brew install SDL2
|
|
||||||
|
|
||||||
- name: Python
|
|
||||||
uses: actions/setup-python@v6
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
|
|
||||||
- name: Install Meson with pip
|
|
||||||
run: sudo pip3 install meson
|
|
||||||
|
|
||||||
- name: Build with meson
|
|
||||||
run: |
|
|
||||||
meson build --prefix=$PWD/ --bindir='' --libdir=''
|
|
||||||
ninja install -C build
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
name: macOS
|
name: macOS
|
||||||
|
|
||||||
on:
|
on:
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
@@ -16,14 +14,15 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macOS-latest]
|
os: [macOS-latest]
|
||||||
arch: [x86_64, arm]
|
arch: [x86_64]
|
||||||
|
mode: [release]
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# Install system dependencies
|
# Install system dependencies
|
||||||
- name: Install Dependancies
|
- name: Install Dependancies
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
name: Unit tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- '.gitignore'
|
|
||||||
- 'LICENSE'
|
|
||||||
- 'README.md'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-24.04]
|
|
||||||
arch: [x86_64]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- uses: NcStudios/VulkanCI@v1.2
|
|
||||||
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get -y install mesa-common-dev clang libsdl2-2.0-0 libsdl2-dev build-essential libvulkan-dev
|
|
||||||
|
|
||||||
# Build the lib
|
|
||||||
- name: Build MacroLibX
|
|
||||||
run: make -j DEBUG=true
|
|
||||||
|
|
||||||
# Force xmake to a specific folder (for cache)
|
|
||||||
- name: Set xmake env
|
|
||||||
run: echo "XMAKE_GLOBALDIR=${{ runner.workspace }}/xmake-global" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# Install xmake
|
|
||||||
- name: Setup xmake
|
|
||||||
if: ${{ matrix.confs.plat != 'mingw' }}
|
|
||||||
uses: xmake-io/github-action-setup-xmake@v1
|
|
||||||
with:
|
|
||||||
xmake-version: latest
|
|
||||||
actions-cache-folder: .xmake-cache-W${{ steps.cache_key.outputs.key }}
|
|
||||||
|
|
||||||
# Update xmake repository (in order to have the file that will be cached)
|
|
||||||
- name: Update xmake repository
|
|
||||||
run: xmake repo --update
|
|
||||||
|
|
||||||
# Fetch xmake dephash
|
|
||||||
- name: Retrieve dependencies hash
|
|
||||||
id: dep_hash
|
|
||||||
run: echo "hash=$(xmake l utils.ci.packageskey)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Install unit tester
|
|
||||||
run: git clone https://github.com/seekrs/MacroUnitTest.git ../MacroUnitTest
|
|
||||||
|
|
||||||
# Setup compilation mode and install project dependencies
|
|
||||||
- name: Configure xmake and install dependencies
|
|
||||||
run: |
|
|
||||||
cd ../MacroUnitTest
|
|
||||||
xmake config --toolchain=clang --ccache=n --yes
|
|
||||||
|
|
||||||
# Save dependencies
|
|
||||||
- name: Save cached xmake dependencies
|
|
||||||
if: ${{ !steps.restore-depcache.outputs.cache-hit }}
|
|
||||||
uses: actions/cache/save@v5
|
|
||||||
with:
|
|
||||||
path: ${{ env.XMAKE_GLOBALDIR }}/.xmake/packages
|
|
||||||
key: ${{ steps.restore-depcache.outputs.cache-primary-key }}
|
|
||||||
|
|
||||||
- name: Build and run unit tester
|
|
||||||
run: |
|
|
||||||
cd ../MacroUnitTest
|
|
||||||
xmake run MacroUnitTest --headless --path="${{ runner.workspace }}/MacroLibX/libmlx.so"
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
name: Windows (xmake)
|
name: Windows (xmake)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
@@ -16,7 +14,7 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [windows-latest]
|
os: [windows-latest]
|
||||||
arch: [x64, x86]
|
arch: [x64]
|
||||||
mode: [release]
|
mode: [release]
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
@@ -28,7 +26,7 @@ jobs:
|
|||||||
run: echo "key=$(date +'%W')" >> $GITHUB_OUTPUT
|
run: echo "key=$(date +'%W')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# Force xmake to a specific folder (for cache)
|
# Force xmake to a specific folder (for cache)
|
||||||
- name: Set xmake env
|
- name: Set xmake env
|
||||||
|
|||||||
@@ -1,109 +0,0 @@
|
|||||||
name : Windows (Meson)
|
|
||||||
|
|
||||||
on:
|
|
||||||
repository_dispatch:
|
|
||||||
types: [create-pull-request]
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- '.gitignore'
|
|
||||||
- 'LICENSE'
|
|
||||||
- 'README.md'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
VisualStudio:
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
|
||||||
runs-on: windows-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform: ['x64', 'x86']
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# Install a 32-bit Python so building related stuff work.
|
|
||||||
- name: Setup x86 Python
|
|
||||||
if: matrix.platform == 'x86'
|
|
||||||
uses: actions/setup-python@v6
|
|
||||||
with:
|
|
||||||
architecture: 'x86'
|
|
||||||
python-version: '3.12'
|
|
||||||
|
|
||||||
- name: Install Meson & Ninja
|
|
||||||
run: |
|
|
||||||
python -m pip install meson ninja
|
|
||||||
- uses: ilammy/msvc-dev-cmd@v1
|
|
||||||
with:
|
|
||||||
arch: ${{matrix.platform}}
|
|
||||||
|
|
||||||
- name: Compile mlx
|
|
||||||
run: |
|
|
||||||
meson setup builddir
|
|
||||||
meson compile -C builddir
|
|
||||||
|
|
||||||
VisualStudio-clang-cl:
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
|
||||||
runs-on: windows-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
env:
|
|
||||||
CC: clang-cl
|
|
||||||
CXX: clang-cl
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Install Meson & Ninja
|
|
||||||
run: |
|
|
||||||
python -m pip install meson ninja
|
|
||||||
|
|
||||||
- uses: ilammy/msvc-dev-cmd@v1
|
|
||||||
|
|
||||||
- name: Compile mlx
|
|
||||||
run: |
|
|
||||||
meson setup builddir
|
|
||||||
meson compile -C builddir
|
|
||||||
|
|
||||||
MSYS2:
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
|
||||||
runs-on: windows-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform: ['UCRT64', 'CLANG64']
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- uses: msys2/setup-msys2@v2
|
|
||||||
with:
|
|
||||||
msystem: ${{matrix.platform}}
|
|
||||||
install: >-
|
|
||||||
bison
|
|
||||||
dos2unix
|
|
||||||
flex
|
|
||||||
git
|
|
||||||
pacboy: >-
|
|
||||||
cc:p
|
|
||||||
cmake:p
|
|
||||||
ninja:p
|
|
||||||
pkgconf:p
|
|
||||||
python-certifi:p
|
|
||||||
python-pip:p
|
|
||||||
# Make sure Python is updated to >=3.11 (fix https://github.com/msys2/MINGW-packages/issues/17415).
|
|
||||||
update: true
|
|
||||||
|
|
||||||
- name: Install Meson
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
python -m pip install meson
|
|
||||||
|
|
||||||
- name: Compile mlx
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
meson setup builddir
|
|
||||||
meson compile -C builddir
|
|
||||||
@@ -23,5 +23,3 @@
|
|||||||
objs/
|
objs/
|
||||||
build/
|
build/
|
||||||
example/Test
|
example/Test
|
||||||
subprojects/*/
|
|
||||||
subprojects/.wraplock
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
MIT License
|
MIT License
|
||||||
Copyright (c) 2022-2026 kbz_8
|
Copyright (c) 2022-2024 kbz_8
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ MAKE = make --no-print-directory
|
|||||||
OS ?= $(shell uname -s)
|
OS ?= $(shell uname -s)
|
||||||
DEBUG ?= false
|
DEBUG ?= false
|
||||||
TOOLCHAIN ?= clang
|
TOOLCHAIN ?= clang
|
||||||
|
IMAGES_OPTIMIZED ?= true
|
||||||
|
FORCE_INTEGRATED_GPU ?= false
|
||||||
GRAPHICS_MEMORY_DUMP ?= false
|
GRAPHICS_MEMORY_DUMP ?= false
|
||||||
PROFILER ?= false
|
PROFILER ?= false
|
||||||
FORCE_WAYLAND ?= false
|
FORCE_WAYLAND ?= false
|
||||||
@@ -36,9 +38,6 @@ GCH = runtime/Includes/PreCompiled.h.gch
|
|||||||
CCH = runtime/Includes/PreCompiled.h.pch
|
CCH = runtime/Includes/PreCompiled.h.pch
|
||||||
PCH =
|
PCH =
|
||||||
|
|
||||||
# Personal path, should be overriden with env var
|
|
||||||
UNIT_TESTS_PATH = ../UnitTester/build/Bin/linux_x86_64/MacroUnitTest
|
|
||||||
|
|
||||||
NZSLC ?= nzslc
|
NZSLC ?= nzslc
|
||||||
|
|
||||||
ifeq ($(TOOLCHAIN), gcc)
|
ifeq ($(TOOLCHAIN), gcc)
|
||||||
@@ -63,6 +62,14 @@ else
|
|||||||
CXXFLAGS += -O3
|
CXXFLAGS += -O3
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(FORCE_INTEGRATED_GPU), true)
|
||||||
|
_ENABLEDFLAGS += FORCE_INTEGRATED_GPU
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(IMAGES_OPTIMIZED), true)
|
||||||
|
_ENABLEDFLAGS += IMAGE_OPTIMIZED
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(GRAPHICS_MEMORY_DUMP), true)
|
ifeq ($(GRAPHICS_MEMORY_DUMP), true)
|
||||||
_ENABLEDFLAGS += GRAPHICS_MEMORY_DUMP
|
_ENABLEDFLAGS += GRAPHICS_MEMORY_DUMP
|
||||||
endif
|
endif
|
||||||
@@ -154,9 +161,6 @@ clean-shaders:
|
|||||||
|
|
||||||
shaders: clean-shaders $(SPVS)
|
shaders: clean-shaders $(SPVS)
|
||||||
|
|
||||||
tests: debug
|
|
||||||
@$(UNIT_TESTS_PATH) --headless --path="./$(NAME)"
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@$(RM) $(OBJ_DIR)
|
@$(RM) $(OBJ_DIR)
|
||||||
@printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n"
|
@printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n"
|
||||||
|
|||||||
@@ -3,18 +3,15 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/linux_clang.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/linux_clang.yml/badge.svg"></a>
|
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/linux_clang.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/linux_clang.yml/badge.svg"></a>
|
||||||
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/linux_gcc.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/linux_gcc.yml/badge.svg"></a>
|
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/linux_gcc.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/linux_gcc.yml/badge.svg"></a>
|
||||||
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/macos.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/macos.yml/badge.svg"></a>
|
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/macos_x86.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/macos_x86.yml/badge.svg"></a>
|
||||||
</div>
|
</div>
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml/badge.svg"></a>
|
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml/badge.svg"></a>
|
||||||
</div>
|
</div>
|
||||||
<div align="center">
|
|
||||||
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/tests.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/tests.yml/badge.svg"></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
###### MacroLibX, a rewrite of 42 School's MiniLibX using SDL2 and Vulkan.
|
###### MacroLibX, a rewrite of 42 School's MiniLibX using SDL2 and Vulkan.
|
||||||
The goal of this version is to provide a light, fast, and modern graphical tool.
|
The goal of this version is to provide a light, fast, and modern graphical tool while keeping the same API.
|
||||||
|
|
||||||
## 🌟 Features
|
## 🌟 Features
|
||||||
|
|
||||||
@@ -24,6 +21,9 @@ Built on top of Vulkan, the MacroLibX takes advantage of its very low-level natu
|
|||||||
### 💻 Cross-Platform
|
### 💻 Cross-Platform
|
||||||
Designed to be totally cross-platform, it can run on any SDL2-supported platform that supports Vulkan (even the Nintendo Switch ! theoretically... ).
|
Designed to be totally cross-platform, it can run on any SDL2-supported platform that supports Vulkan (even the Nintendo Switch ! theoretically... ).
|
||||||
|
|
||||||
|
### 🗿 Close to the old minilibx
|
||||||
|
One of the guidelines of this lib was to get as close as possible to the old minilibx API, and therefore to the educational choices of the old minilibx.
|
||||||
|
|
||||||
### 📖 It's all FOSS
|
### 📖 It's all FOSS
|
||||||
Everything in this repo is entirely free and open source, all available under the MIT license (even the third-party libraries used).
|
Everything in this repo is entirely free and open source, all available under the MIT license (even the third-party libraries used).
|
||||||
|
|
||||||
@@ -103,6 +103,12 @@ MacroLibX has a strong safety support, mainly by checking every pointer that you
|
|||||||
### 🛠️ Set the toolchain
|
### 🛠️ Set the toolchain
|
||||||
If you want to use `GCC` to build the mlx you can use `make TOOLCHAIN=gcc`
|
If you want to use `GCC` to build the mlx you can use `make TOOLCHAIN=gcc`
|
||||||
|
|
||||||
|
### ⚠️⚠️⚠️ 🖼️ Image optimisations ⚠️⚠️⚠️
|
||||||
|
If you run into glitches when writing or reading pixels from images you can turn off images optimisations by using `make IMAGES_OPTIMIZED=false`.
|
||||||
|
|
||||||
|
### 🖥️ Force the integrated GPU (not recommended)
|
||||||
|
You can force the mlx to use your integrated GPU by using `make FORCE_INTEGRATED_GPU=true`. Note that there are a lot of chances that your application crashes by using that.
|
||||||
|
|
||||||
### 💽 Dump the graphics memory
|
### 💽 Dump the graphics memory
|
||||||
The mlx can dump it's graphics memory use to json files every two seconds by enabling this option `make GRAPHICS_MEMORY_DUMP=true`.
|
The mlx can dump it's graphics memory use to json files every two seconds by enabling this option `make GRAPHICS_MEMORY_DUMP=true`.
|
||||||
|
|
||||||
|
|||||||
+7
-1
@@ -16,11 +16,17 @@ MacroLibX has a strong safety support, mainly by checking every pointer that you
|
|||||||
### 🛠️ Set the toolchain
|
### 🛠️ Set the toolchain
|
||||||
To change the compilation toolchain you can use `xmake config --toolchain=[gcc|clang|...]`
|
To change the compilation toolchain you can use `xmake config --toolchain=[gcc|clang|...]`
|
||||||
|
|
||||||
|
### ⚠️⚠️⚠️ 🖼️ Image optimisations ⚠️⚠️⚠️
|
||||||
|
If you run into glitches when writing or reading pixels from images you can turn off images optimisations by using `xmake config --images_optimized=n`.
|
||||||
|
|
||||||
|
### 🖥️ Force the integrated GPU (not recommended)
|
||||||
|
You can force the mlx to use your integrated GPU using `xmake config --force_integrated_gpu=y`. Note that there are a lot of chances that your application crashes by using that.
|
||||||
|
|
||||||
### 💽 Dump the graphics memory
|
### 💽 Dump the graphics memory
|
||||||
The mlx can dump it's graphics memory use to json files every two seconds by enabling this option `xmake config --graphics_memory_dump=y`.
|
The mlx can dump it's graphics memory use to json files every two seconds by enabling this option `xmake config --graphics_memory_dump=y`.
|
||||||
|
|
||||||
### 🪛 A possible build configuration
|
### 🪛 A possible build configuration
|
||||||
As a configuration example here's how the command can look like `xmake config --mode=debug --toolchain=clang --graphics_memory_dump=y`
|
As a configuration example here's how the command can look like `xmake config --mode=debug --toolchain=clang --graphics_memory_dump=y --images_optimized=n`
|
||||||
|
|
||||||
## 🚧 Build the lib
|
## 🚧 Build the lib
|
||||||
|
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
-DMLX_BUILD
|
-DMLX_BUILD
|
||||||
-DSDL_MAIN_HANDLED
|
-DSDL_MAIN_HANDLED
|
||||||
-DDEBUG
|
-DDEBUG
|
||||||
|
-DIMAGE_OPTIMIZED
|
||||||
-D_REENTRANT
|
-D_REENTRANT
|
||||||
-isystem/usr/include/SDL2
|
-isystem/usr/include/SDL2
|
||||||
|
|||||||
+2
-7
@@ -44,16 +44,11 @@ void update(void* param)
|
|||||||
mlx_set_font(mlx->mlx, "default");
|
mlx_set_font(mlx->mlx, "default");
|
||||||
mlx_string_put(mlx->mlx, mlx->win, 20, 50, (mlx_color){ .rgba = 0xFFFFFFFF }, "that's a text");
|
mlx_string_put(mlx->mlx, mlx->win, 20, 50, (mlx_color){ .rgba = 0xFFFFFFFF }, "that's a text");
|
||||||
|
|
||||||
int win_width;
|
|
||||||
int win_height;
|
|
||||||
|
|
||||||
mlx_get_window_size(mlx->mlx, mlx->win, &win_width, &win_height);
|
|
||||||
|
|
||||||
uint32_t color = 0;
|
uint32_t color = 0;
|
||||||
for(int j = 0; j < win_height; j++)
|
for(int j = 0; j < 400; j++)
|
||||||
{
|
{
|
||||||
mlx_pixel_put(mlx->mlx, mlx->win, j, j, (mlx_color){ .rgba = 0x0000FFFF + (color << 24) });
|
mlx_pixel_put(mlx->mlx, mlx->win, j, j, (mlx_color){ .rgba = 0x0000FFFF + (color << 24) });
|
||||||
mlx_pixel_put(mlx->mlx, mlx->win, win_width - j, j, (mlx_color){ .rgba = 0x0000FFFF });
|
mlx_pixel_put(mlx->mlx, mlx->win, 399 - j, j, (mlx_color){ .rgba = 0x0000FFFF });
|
||||||
color += (color < 255);
|
color += (color < 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include "../../includes/mlx.h"
|
|
||||||
#include "../../includes/mlx_extended.h"
|
|
||||||
|
|
||||||
#include <vulkan/vulkan_core.h>
|
|
||||||
|
|
||||||
typedef VkInstance (*PFN_mlx_get_vk_instance)(mlx_context mlx);
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
mlx_context mlx = mlx_init();
|
|
||||||
|
|
||||||
mlx_window_create_info info = { 0 };
|
|
||||||
info.title = "My window";
|
|
||||||
info.width = 400;
|
|
||||||
info.height = 400;
|
|
||||||
info.is_resizable = true;
|
|
||||||
mlx_window win = mlx_new_window(mlx, &info);
|
|
||||||
|
|
||||||
PFN_mlx_get_vk_instance mlx_get_vk_instance = (PFN_mlx_get_vk_instance)mlx_get_proc_addr(mlx, "mlx_get_vk_instance");
|
|
||||||
printf("%p\n", mlx_get_vk_instance(mlx));
|
|
||||||
|
|
||||||
mlx_destroy_window(mlx, win);
|
|
||||||
mlx_destroy_context(mlx);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [ -e a.out ]; then
|
|
||||||
rm a.out
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $(uname -s) = 'Darwin' ]; then
|
|
||||||
clang main.c ../../libmlx.dylib -L /opt/homebrew/lib -lSDL2 -lm -g;
|
|
||||||
else
|
|
||||||
clang main.c ../../libmlx.so -lSDL2 -g -Wall -Wextra -Werror -lm;
|
|
||||||
fi
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
bash ./build.sh
|
|
||||||
./a.out
|
|
||||||
Regular → Executable
+24
-6
@@ -6,7 +6,7 @@
|
|||||||
/* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */
|
/* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */
|
/* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */
|
||||||
/* Updated: 2025/10/22 16:59:21 by maldavid ### ########.fr */
|
/* Updated: 2025/01/05 22:44:22 by maldavid ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ typedef union mlx_color
|
|||||||
/**
|
/**
|
||||||
* @brief Initializes the MLX internal application
|
* @brief Initializes the MLX internal application
|
||||||
*
|
*
|
||||||
* @return (mlx_context) An opaque handler to the internal MLX application or MLX_NULL_HANDLE (0x0) in case of error
|
* @return (mlx_context) An opaque handler to the internal MLX application or NULL (0x0) in case of error
|
||||||
*/
|
*/
|
||||||
MLX_API mlx_context mlx_init();
|
MLX_API mlx_context mlx_init();
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ typedef struct mlx_window_create_info
|
|||||||
* @param mlx Internal MLX application
|
* @param mlx Internal MLX application
|
||||||
* @param info Pointer to a descriptor structure
|
* @param info Pointer to a descriptor structure
|
||||||
*
|
*
|
||||||
* @return (mlx_window) An opaque handler to the internal MLX window or MLX_NULL_HANDLE (0x0) in case of error
|
* @return (mlx_widnow) An opaque handler to the internal MLX window or NULL (0x0) in case of error
|
||||||
*/
|
*/
|
||||||
MLX_API mlx_window mlx_new_window(mlx_context mlx, const mlx_window_create_info* info);
|
MLX_API mlx_window mlx_new_window(mlx_context mlx, const mlx_window_create_info* info);
|
||||||
|
|
||||||
@@ -328,7 +328,7 @@ MLX_API void mlx_pixel_put(mlx_context mlx, mlx_window win, int x, int y, mlx_co
|
|||||||
* @param width Width of the image
|
* @param width Width of the image
|
||||||
* @param height Height of the image
|
* @param height Height of the image
|
||||||
*
|
*
|
||||||
* @return (mlx_image) An opaque handler to the internal image or MLX_NULL_HANDLE (0x0) in case of error
|
* @return (mlx_image) An opaque handler to the internal image or NULL (0x0) in case of error
|
||||||
*/
|
*/
|
||||||
MLX_API mlx_image mlx_new_image(mlx_context mlx, int width, int height);
|
MLX_API mlx_image mlx_new_image(mlx_context mlx, int width, int height);
|
||||||
|
|
||||||
@@ -338,9 +338,9 @@ MLX_API mlx_image mlx_new_image(mlx_context mlx, int width, int height);
|
|||||||
* @param mlx Internal MLX application
|
* @param mlx Internal MLX application
|
||||||
* @param filename Path to the png file
|
* @param filename Path to the png file
|
||||||
* @param width Get the width of the image
|
* @param width Get the width of the image
|
||||||
* @param height Get the height of the image
|
* @param heigth Get the height of the image
|
||||||
*
|
*
|
||||||
* @return (mlx_image) An opaque handler to the internal image or MLX_NULL_HANDLE (0x0) in case of error
|
* @return (mlx_image) An opaque handler to the internal image or NULL (0x0) in case of error
|
||||||
*/
|
*/
|
||||||
MLX_API mlx_image mlx_new_image_from_file(mlx_context mlx, char* filename, int* width, int* height);
|
MLX_API mlx_image mlx_new_image_from_file(mlx_context mlx, char* filename, int* width, int* height);
|
||||||
|
|
||||||
@@ -361,6 +361,14 @@ MLX_API void mlx_destroy_image(mlx_context mlx, mlx_image image);
|
|||||||
* @param y Y coordinate in the image
|
* @param y Y coordinate in the image
|
||||||
*
|
*
|
||||||
* @return (int) Return the pixel data
|
* @return (int) Return the pixel data
|
||||||
|
*
|
||||||
|
* /!\ If you run into glitches when writing or reading pixels from images /!\
|
||||||
|
* You need to add IMAGES_OPTIMIZED=false to your make mlx command
|
||||||
|
* ```
|
||||||
|
* ~ git clone https://github.com/seekrs/MacroLibX.git
|
||||||
|
* ~ cd MacroLibX
|
||||||
|
* ~ make IMAGES_OPTIMIZED=false
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
MLX_API mlx_color mlx_get_image_pixel(mlx_context mlx, mlx_image image, int x, int y);
|
MLX_API mlx_color mlx_get_image_pixel(mlx_context mlx, mlx_image image, int x, int y);
|
||||||
|
|
||||||
@@ -372,6 +380,14 @@ MLX_API mlx_color mlx_get_image_pixel(mlx_context mlx, mlx_image image, int x, i
|
|||||||
* @param x X coordinate in the image
|
* @param x X coordinate in the image
|
||||||
* @param y Y coordinate in the image
|
* @param y Y coordinate in the image
|
||||||
* @param color Color of the pixel to set
|
* @param color Color of the pixel to set
|
||||||
|
*
|
||||||
|
* /!\ If you run into glitches when writing or reading pixels from images /!\
|
||||||
|
* You need to add IMAGES_OPTIMIZED=false to your make mlx command
|
||||||
|
* ```
|
||||||
|
* ~ git clone https://github.com/seekrs/MacroLibX.git
|
||||||
|
* ~ cd MacroLibX
|
||||||
|
* ~ make IMAGES_OPTIMIZED=false
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
MLX_API void mlx_set_image_pixel(mlx_context mlx, mlx_image image, int x, int y, mlx_color color);
|
MLX_API void mlx_set_image_pixel(mlx_context mlx, mlx_image image, int x, int y, mlx_color color);
|
||||||
|
|
||||||
@@ -407,6 +423,7 @@ MLX_API void mlx_string_put(mlx_context mlx, mlx_window win, int x, int y, mlx_c
|
|||||||
* @brief Loads a font to be used by `mlx_string_put`
|
* @brief Loads a font to be used by `mlx_string_put`
|
||||||
*
|
*
|
||||||
* @param mlx Internal MLX application
|
* @param mlx Internal MLX application
|
||||||
|
* @param win Internal window
|
||||||
* @param filepath Filepath to the font or "default" to reset to the embedded font
|
* @param filepath Filepath to the font or "default" to reset to the embedded font
|
||||||
*/
|
*/
|
||||||
MLX_API void mlx_set_font(mlx_context mlx, char* filepath);
|
MLX_API void mlx_set_font(mlx_context mlx, char* filepath);
|
||||||
@@ -415,6 +432,7 @@ MLX_API void mlx_set_font(mlx_context mlx, char* filepath);
|
|||||||
* @brief Loads a font to be used by `mlx_string_put` and scales it
|
* @brief Loads a font to be used by `mlx_string_put` and scales it
|
||||||
*
|
*
|
||||||
* @param mlx Internal MLX application
|
* @param mlx Internal MLX application
|
||||||
|
* @param win Internal window
|
||||||
* @param filepath Filepath to the font or "default" to reset to the embedded font
|
* @param filepath Filepath to the font or "default" to reset to the embedded font
|
||||||
* @param scale Scale to apply to the font
|
* @param scale Scale to apply to the font
|
||||||
*/
|
*/
|
||||||
|
|||||||
+17
-10
@@ -6,7 +6,7 @@
|
|||||||
/* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */
|
/* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/12/14 16:17:10 by maldavid #+# #+# */
|
/* Created: 2024/12/14 16:17:10 by maldavid #+# #+# */
|
||||||
/* Updated: 2025/10/22 16:59:38 by maldavid ### ########.fr */
|
/* Updated: 2025/01/08 12:37:15 by maldavid ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@@ -122,6 +122,14 @@ MLX_API void mlx_pixel_put_region(mlx_context mlx, mlx_window win, int x, int y,
|
|||||||
*
|
*
|
||||||
* Note: it is responsability of the user to make sure the size of `dst` is
|
* Note: it is responsability of the user to make sure the size of `dst` is
|
||||||
* big enough for the given region.
|
* big enough for the given region.
|
||||||
|
*
|
||||||
|
* /!\ If you run into glitches when writing or reading pixels from images /!\
|
||||||
|
* You need to add IMAGES_OPTIMIZED=false to your make mlx command
|
||||||
|
* ```
|
||||||
|
* ~ git clone https://github.com/seekrs/MacroLibX.git
|
||||||
|
* ~ cd MacroLibX
|
||||||
|
* ~ make IMAGES_OPTIMIZED=false
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
MLX_API void mlx_get_image_region(mlx_context mlx, mlx_image image, int x, int y, int w, int h, mlx_color* dst);
|
MLX_API void mlx_get_image_region(mlx_context mlx, mlx_image image, int x, int y, int w, int h, mlx_color* dst);
|
||||||
|
|
||||||
@@ -138,6 +146,14 @@ MLX_API void mlx_get_image_region(mlx_context mlx, mlx_image image, int x, int y
|
|||||||
*
|
*
|
||||||
* Note: it is responsability of the user to make sure the size of `pixels` is
|
* Note: it is responsability of the user to make sure the size of `pixels` is
|
||||||
* big enough for the given region.
|
* big enough for the given region.
|
||||||
|
*
|
||||||
|
* /!\ If you run into glitches when writing or reading pixels from images /!\
|
||||||
|
* You need to add IMAGES_OPTIMIZED=false to your make mlx command
|
||||||
|
* ```
|
||||||
|
* ~ git clone https://github.com/seekrs/MacroLibX.git
|
||||||
|
* ~ cd MacroLibX
|
||||||
|
* ~ make IMAGES_OPTIMIZED=false
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
MLX_API void mlx_set_image_region(mlx_context mlx, mlx_image image, int x, int y, int w, int h, mlx_color* pixels);
|
MLX_API void mlx_set_image_region(mlx_context mlx, mlx_image image, int x, int y, int w, int h, mlx_color* pixels);
|
||||||
|
|
||||||
@@ -155,15 +171,6 @@ MLX_API void mlx_set_image_region(mlx_context mlx, mlx_image image, int x, int y
|
|||||||
*/
|
*/
|
||||||
MLX_API void mlx_put_transformed_image_to_window(mlx_context mlx, mlx_window win, mlx_image image, int x, int y, float scale_x, float scale_y, float angle);
|
MLX_API void mlx_put_transformed_image_to_window(mlx_context mlx, mlx_window win, mlx_image image, int x, int y, float scale_x, float scale_y, float angle);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Get direct pointers to hidden functions
|
|
||||||
*
|
|
||||||
* @param mlx Internal MLX application
|
|
||||||
*
|
|
||||||
* @return (mlx_function) A function pointer or NULL (0x0) in case of error
|
|
||||||
*/
|
|
||||||
MLX_API mlx_function mlx_get_proc_addr(mlx_context mlx, const char* name);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
|
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/11/10 08:49:17 by maldavid #+# #+# */
|
/* Created: 2023/11/10 08:49:17 by maldavid #+# #+# */
|
||||||
/* Updated: 2025/10/22 13:38:43 by maldavid ### ########.fr */
|
/* Updated: 2025/01/07 00:17:45 by maldavid ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@@ -202,11 +202,8 @@
|
|||||||
#define MLX_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
|
#define MLX_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
|
||||||
|
|
||||||
#define MLX_DEFINE_HANDLE(object) typedef struct object##_handler* object
|
#define MLX_DEFINE_HANDLE(object) typedef struct object##_handler* object
|
||||||
#define MLX_NULL_HANDLE NULL
|
|
||||||
|
|
||||||
typedef void (*mlx_function)(void);
|
#define MLX_VERSION MLX_MAKE_VERSION(2, 0, 0)
|
||||||
|
|
||||||
#define MLX_VERSION MLX_MAKE_VERSION(2, 2, 4)
|
|
||||||
#define MLX_TARGET_VULKAN_API_VERSION MLX_MAKE_VERSION(1, 0, 0)
|
#define MLX_TARGET_VULKAN_API_VERSION MLX_MAKE_VERSION(1, 0, 0)
|
||||||
|
|
||||||
// Checking common assumptions
|
// Checking common assumptions
|
||||||
|
|||||||
-106
@@ -1,106 +0,0 @@
|
|||||||
project('MacroLibX',
|
|
||||||
['c', 'cpp'],
|
|
||||||
version : '2.3.0',
|
|
||||||
license : 'MIT',
|
|
||||||
meson_version : '>= 0.63.0',
|
|
||||||
default_options : [
|
|
||||||
'warning_level=2',
|
|
||||||
'optimization=3',
|
|
||||||
'cpp_std=c++20',
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
add_project_arguments('-DSDL_MAIN_HANDLED', language : 'c')
|
|
||||||
|
|
||||||
if get_option('graphics_memory_dump')
|
|
||||||
add_project_arguments('-DGRAPHICS_MEMORY_DUMP', language : 'c')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if get_option('profiler')
|
|
||||||
add_project_arguments('-DPROFILER_ENABLED', language : 'c')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if get_option('force_wayland')
|
|
||||||
add_project_arguments('-DFORCE_WAYLAND', language : 'c')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if get_option('disable_all_safeties')
|
|
||||||
add_project_arguments('-DDISABLE_ALL_SAFETIES', language : 'c')
|
|
||||||
endif
|
|
||||||
|
|
||||||
includes_directories = include_directories(
|
|
||||||
'includes',
|
|
||||||
'runtime/Includes',
|
|
||||||
'runtime/Sources',
|
|
||||||
'third_party',
|
|
||||||
)
|
|
||||||
|
|
||||||
sources = files(
|
|
||||||
'runtime/Sources/Core/Application.cpp',
|
|
||||||
'runtime/Sources/Core/Bridge.cpp',
|
|
||||||
'runtime/Sources/Core/EventBus.cpp',
|
|
||||||
'runtime/Sources/Core/EventListener.cpp',
|
|
||||||
'runtime/Sources/Core/Fps.cpp',
|
|
||||||
'runtime/Sources/Core/Graphics.cpp',
|
|
||||||
'runtime/Sources/Core/Logs.cpp',
|
|
||||||
'runtime/Sources/Core/Memory.cpp',
|
|
||||||
'runtime/Sources/Core/Profiler.cpp',
|
|
||||||
'runtime/Sources/Core/SDLManager.cpp',
|
|
||||||
'runtime/Sources/Core/UUID.cpp',
|
|
||||||
'runtime/Sources/Graphics/Font.cpp',
|
|
||||||
'runtime/Sources/Graphics/Mesh.cpp',
|
|
||||||
'runtime/Sources/Graphics/PutPixelManager.cpp',
|
|
||||||
'runtime/Sources/Graphics/Scene.cpp',
|
|
||||||
'runtime/Sources/Graphics/Sprite.cpp',
|
|
||||||
'runtime/Sources/Graphics/Text.cpp',
|
|
||||||
'runtime/Sources/Platform/Inputs.cpp',
|
|
||||||
'runtime/Sources/Platform/Window.cpp',
|
|
||||||
'runtime/Sources/Renderer/Pipelines/Graphics.cpp',
|
|
||||||
'runtime/Sources/Renderer/Pipelines/Shader.cpp',
|
|
||||||
'runtime/Sources/Renderer/RenderPasses/2DPass.cpp',
|
|
||||||
'runtime/Sources/Renderer/RenderPasses/FinalPass.cpp',
|
|
||||||
'runtime/Sources/Renderer/RenderPasses/Passes.cpp',
|
|
||||||
'runtime/Sources/Renderer/Vulkan/VulkanLoader.cpp',
|
|
||||||
'runtime/Sources/Renderer/Buffer.cpp',
|
|
||||||
'runtime/Sources/Renderer/Descriptor.cpp',
|
|
||||||
'runtime/Sources/Renderer/Image.cpp',
|
|
||||||
'runtime/Sources/Renderer/Memory.cpp',
|
|
||||||
'runtime/Sources/Renderer/RenderCore.cpp',
|
|
||||||
'runtime/Sources/Renderer/Renderer.cpp',
|
|
||||||
'runtime/Sources/Renderer/SceneRenderer.cpp',
|
|
||||||
'runtime/Sources/Renderer/Swapchain.cpp',
|
|
||||||
)
|
|
||||||
|
|
||||||
mlx_headers = [
|
|
||||||
'includes/mlx.h',
|
|
||||||
'includes/mlx_extended.h',
|
|
||||||
'includes/mlx_profile.h'
|
|
||||||
]
|
|
||||||
|
|
||||||
install_headers(mlx_headers)
|
|
||||||
|
|
||||||
deps = dependency('sdl2')
|
|
||||||
|
|
||||||
libmlx = library('mlx',
|
|
||||||
sources,
|
|
||||||
include_directories : includes_directories,
|
|
||||||
dependencies : deps,
|
|
||||||
install : true)
|
|
||||||
|
|
||||||
libmlx_dep = declare_dependency(
|
|
||||||
include_directories: includes_directories,
|
|
||||||
dependencies : deps,
|
|
||||||
link_with : libmlx)
|
|
||||||
|
|
||||||
meson.override_dependency('mlx', libmlx_dep)
|
|
||||||
|
|
||||||
# PKG CONFIG GENERATION
|
|
||||||
pkg_mod = import('pkgconfig')
|
|
||||||
|
|
||||||
pkg_mod.generate(
|
|
||||||
libmlx,
|
|
||||||
name : 'mlx',
|
|
||||||
description : 'MacroLibX Library',
|
|
||||||
version : meson.project_version(),
|
|
||||||
subdirs : ['.'],
|
|
||||||
)
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
option('graphics_memory_dump',
|
|
||||||
type : 'boolean',
|
|
||||||
value : false,
|
|
||||||
description : 'Enable graphics memory dump for debugging purposes.'
|
|
||||||
)
|
|
||||||
|
|
||||||
option('profiler',
|
|
||||||
type : 'boolean',
|
|
||||||
value : false,
|
|
||||||
description : 'Enable profiler for performance analysis.'
|
|
||||||
)
|
|
||||||
|
|
||||||
option('force_wayland',
|
|
||||||
type : 'boolean',
|
|
||||||
value : false,
|
|
||||||
description : 'Force the application to use Wayland display server.'
|
|
||||||
)
|
|
||||||
|
|
||||||
option('disable_all_safeties',
|
|
||||||
type : 'boolean',
|
|
||||||
value : false,
|
|
||||||
description : 'Disable all safety checks in the application.'
|
|
||||||
)
|
|
||||||
@@ -32,29 +32,16 @@ namespace mlx
|
|||||||
|
|
||||||
inline void TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept;
|
inline void TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept;
|
||||||
|
|
||||||
inline void AddPreRenderHook(void(*f)(VkCommandBuffer, void*), void* param);
|
|
||||||
|
|
||||||
[[nodiscard]] MLX_FORCEINLINE bool HasWindow() const noexcept { return m_has_window; }
|
[[nodiscard]] MLX_FORCEINLINE bool HasWindow() const noexcept { return m_has_window; }
|
||||||
[[nodiscard]] MLX_FORCEINLINE Renderer& GetRenderer() { return m_renderer; }
|
[[nodiscard]] MLX_FORCEINLINE Renderer& GetRenderer() { return m_renderer; }
|
||||||
[[nodiscard]] MLX_FORCEINLINE Scene& GetScene() { return *p_scene; }
|
[[nodiscard]] MLX_FORCEINLINE Scene& GetScene() { return *p_scene; }
|
||||||
|
|
||||||
~GraphicsSupport();
|
~GraphicsSupport();
|
||||||
|
|
||||||
private:
|
|
||||||
struct Hook
|
|
||||||
{
|
|
||||||
std::function<void(VkCommandBuffer, void*)> fn;
|
|
||||||
void* param;
|
|
||||||
|
|
||||||
Hook(std::function<void(VkCommandBuffer, void*)> fn, void* param) : fn(fn), param(param) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Renderer m_renderer;
|
Renderer m_renderer;
|
||||||
SceneRenderer m_scene_renderer;
|
SceneRenderer m_scene_renderer;
|
||||||
PutPixelManager m_put_pixel_manager;
|
PutPixelManager m_put_pixel_manager;
|
||||||
std::vector<Hook> m_hooks;
|
|
||||||
std::shared_ptr<Window> p_window;
|
std::shared_ptr<Window> p_window;
|
||||||
std::unique_ptr<Scene> p_scene;
|
std::unique_ptr<Scene> p_scene;
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,4 @@ namespace mlx
|
|||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
p_scene->TryEraseSpriteFromTexture(texture);
|
p_scene->TryEraseSpriteFromTexture(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsSupport::AddPreRenderHook(void(*f)(VkCommandBuffer, void*), void* param)
|
|
||||||
{
|
|
||||||
m_hooks.emplace_back(f, param);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ namespace mlx
|
|||||||
|
|
||||||
std::unordered_map<std::string, std::pair<std::size_t, ProfileResult>> m_profile_data;
|
std::unordered_map<std::string, std::pair<std::size_t, ProfileResult>> m_profile_data;
|
||||||
std::ofstream m_output_stream;
|
std::ofstream m_output_stream;
|
||||||
|
std::mutex m_mutex;
|
||||||
bool m_runtime_session_began = false;
|
bool m_runtime_session_began = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,10 @@ namespace mlx
|
|||||||
Handle CreateWindow(const mlx_window_create_info* info, std::int32_t& id, bool hidden);
|
Handle CreateWindow(const mlx_window_create_info* info, std::int32_t& id, bool hidden);
|
||||||
void DestroyWindow(Handle window) noexcept;
|
void DestroyWindow(Handle window) noexcept;
|
||||||
|
|
||||||
SDL_Window* GetRawWindow(Handle window) noexcept;
|
|
||||||
|
|
||||||
void InputsFetcher(std::function<void(mlx_event_type, int, int)> functor);
|
void InputsFetcher(std::function<void(mlx_event_type, int, int)> functor);
|
||||||
void SetInputBinding(std::function<void(SDL_Event*)> functor);
|
|
||||||
|
|
||||||
VkSurfaceKHR CreateVulkanSurface(Handle window, VkInstance instance) const noexcept;
|
VkSurfaceKHR CreateVulkanSurface(Handle window, VkInstance instance) const noexcept;
|
||||||
|
std::vector<const char*> GetRequiredVulkanInstanceExtentions(Handle window) const noexcept;
|
||||||
Vec2ui GetVulkanDrawableSize(Handle window) const noexcept;
|
Vec2ui GetVulkanDrawableSize(Handle window) const noexcept;
|
||||||
void MoveMouseOnWindow(Handle window, int x, int y) const noexcept;
|
void MoveMouseOnWindow(Handle window, int x, int y) const noexcept;
|
||||||
void GetScreenSizeWindowIsOn(Handle window, int* x, int* y) const noexcept;
|
void GetScreenSizeWindowIsOn(Handle window, int* x, int* y) const noexcept;
|
||||||
@@ -52,7 +50,6 @@ namespace mlx
|
|||||||
private:
|
private:
|
||||||
static SDLManager* s_instance;
|
static SDLManager* s_instance;
|
||||||
|
|
||||||
std::function<void(SDL_Event*)> m_binding_hook;
|
|
||||||
std::unordered_set<Handle> m_windows_registry;
|
std::unordered_set<Handle> m_windows_registry;
|
||||||
bool m_drop_sdl_responsability = false;
|
bool m_drop_sdl_responsability = false;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UUID();
|
UUID();
|
||||||
inline operator std::uint64_t() const noexcept { return m_uuid; }
|
UUID(std::uint64_t uuid);
|
||||||
|
|
||||||
|
inline operator std::uint64_t() const { return m_uuid; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::uint64_t m_uuid;
|
std::uint64_t m_uuid;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ namespace mlx
|
|||||||
|
|
||||||
inline void UpdateDescriptorSet(std::shared_ptr<DescriptorSet> set)
|
inline void UpdateDescriptorSet(std::shared_ptr<DescriptorSet> set)
|
||||||
{
|
{
|
||||||
p_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool(set->GetShaderLayout(), set->GetShaderType()).RequestDescriptorSet(set->GetShaderLayout(), set->GetShaderType());
|
p_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool().RequestDescriptorSet(set->GetShaderLayout(), set->GetShaderType());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Bind(std::size_t frame_index, VkCommandBuffer cmd) = 0;
|
virtual void Bind(std::size_t frame_index, VkCommandBuffer cmd) = 0;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace mlx
|
|||||||
class PutPixelManager
|
class PutPixelManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PutPixelManager(NonOwningPtr<class Renderer> renderer);
|
PutPixelManager(NonOwningPtr<class Renderer> renderer) : p_renderer(renderer) {}
|
||||||
|
|
||||||
// Returns a valid pointer when a new texture has been created
|
// Returns a valid pointer when a new texture has been created
|
||||||
NonOwningPtr<Texture> DrawPixel(int x, int y, std::uint64_t draw_layer, mlx_color color);
|
NonOwningPtr<Texture> DrawPixel(int x, int y, std::uint64_t draw_layer, mlx_color color);
|
||||||
@@ -20,7 +20,6 @@ namespace mlx
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
NonOwningPtr<Texture> GetLayer(std::uint64_t draw_layer, bool& is_newlayer);
|
NonOwningPtr<Texture> GetLayer(std::uint64_t draw_layer, bool& is_newlayer);
|
||||||
std::unique_ptr<Texture> NewTexture();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unordered_map<std::uint64_t, NonOwningPtr<Texture>> m_placements;
|
std::unordered_map<std::uint64_t, NonOwningPtr<Texture>> m_placements;
|
||||||
|
|||||||
@@ -35,10 +35,9 @@ namespace mlx
|
|||||||
MLX_FORCEINLINE void GetSize(int* x, int* y) { *x = GetWidth(); *y = GetHeight(); }
|
MLX_FORCEINLINE void GetSize(int* x, int* y) { *x = GetWidth(); *y = GetHeight(); }
|
||||||
|
|
||||||
MLX_FORCEINLINE VkSurfaceKHR CreateVulkanSurface(VkInstance instance) const noexcept { return SDLManager::Get().CreateVulkanSurface(p_window, instance); }
|
MLX_FORCEINLINE VkSurfaceKHR CreateVulkanSurface(VkInstance instance) const noexcept { return SDLManager::Get().CreateVulkanSurface(p_window, instance); }
|
||||||
|
MLX_FORCEINLINE std::vector<const char*> GetRequiredVulkanInstanceExtentions() const noexcept { return SDLManager::Get().GetRequiredVulkanInstanceExtentions(p_window); }
|
||||||
MLX_FORCEINLINE Vec2ui GetVulkanDrawableSize() const noexcept { return SDLManager::Get().GetVulkanDrawableSize(p_window); }
|
MLX_FORCEINLINE Vec2ui GetVulkanDrawableSize() const noexcept { return SDLManager::Get().GetVulkanDrawableSize(p_window); }
|
||||||
|
|
||||||
[[nodiscard]] inline Handle GetRawHandle() const noexcept { return p_window; }
|
|
||||||
|
|
||||||
void Destroy() noexcept;
|
void Destroy() noexcept;
|
||||||
|
|
||||||
~Window() { Destroy(); }
|
~Window() { Destroy(); }
|
||||||
|
|||||||
@@ -17,21 +17,8 @@
|
|||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
#if __has_include(<SDL2/SDL.h>)
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#elif __has_include(<SDL.h>)
|
#include <SDL2/SDL_vulkan.h>
|
||||||
#include <SDL.h>
|
|
||||||
#else
|
|
||||||
#error Failed to find SDL2 headers
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __has_include(<SDL2/SDL_syswm.h>)
|
|
||||||
#include <SDL2/SDL_syswm.h>
|
|
||||||
#elif __has_include(<SDL_syswm.h>)
|
|
||||||
#include <SDL_syswm.h>
|
|
||||||
#else
|
|
||||||
#error Failed to find SDL2 SysWMinfo
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -65,6 +52,15 @@
|
|||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <ranges>
|
#include <ranges>
|
||||||
|
|
||||||
|
// Experimentals
|
||||||
|
#if __has_include(<format>)
|
||||||
|
#include <format>
|
||||||
|
#elif __has_include(<experimental/format>)
|
||||||
|
#include <experimental/format>
|
||||||
|
#else
|
||||||
|
#error <format> header not present in this STL
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef MLX_PLAT_WINDOWS
|
#ifndef MLX_PLAT_WINDOWS
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ namespace mlx
|
|||||||
|
|
||||||
std::shared_ptr<class DescriptorSet> RequestDescriptorSet(const ShaderSetLayout& layout, ShaderType shader_type);
|
std::shared_ptr<class DescriptorSet> RequestDescriptorSet(const ShaderSetLayout& layout, ShaderType shader_type);
|
||||||
void ReturnDescriptorSet(std::shared_ptr<class DescriptorSet> set);
|
void ReturnDescriptorSet(std::shared_ptr<class DescriptorSet> set);
|
||||||
bool CanAllocate(const ShaderSetLayout& layout, ShaderType shader_type) const;
|
|
||||||
|
|
||||||
[[nodiscard]] inline VkDescriptorPool Get() const noexcept { return m_pool; }
|
[[nodiscard]] inline VkDescriptorPool Get() const noexcept { return m_pool; }
|
||||||
|
[[nodiscard]] MLX_FORCEINLINE std::size_t GetNumberOfSetsAllocated() const noexcept { return m_allocation_count; }
|
||||||
|
|
||||||
~DescriptorPool() = default;
|
~DescriptorPool() = default;
|
||||||
|
|
||||||
@@ -36,6 +36,7 @@ namespace mlx
|
|||||||
std::vector<std::shared_ptr<class DescriptorSet>> m_free_sets;
|
std::vector<std::shared_ptr<class DescriptorSet>> m_free_sets;
|
||||||
std::vector<std::shared_ptr<class DescriptorSet>> m_used_sets;
|
std::vector<std::shared_ptr<class DescriptorSet>> m_used_sets;
|
||||||
VkDescriptorPool m_pool;
|
VkDescriptorPool m_pool;
|
||||||
|
std::size_t m_allocation_count = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DescriptorPoolManager
|
class DescriptorPoolManager
|
||||||
@@ -43,13 +44,13 @@ namespace mlx
|
|||||||
public:
|
public:
|
||||||
DescriptorPoolManager() = default;
|
DescriptorPoolManager() = default;
|
||||||
|
|
||||||
DescriptorPool& GetAvailablePool(const ShaderSetLayout& layout, ShaderType shader_type);
|
DescriptorPool& GetAvailablePool();
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
~DescriptorPoolManager() = default;
|
~DescriptorPoolManager() = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::unique_ptr<DescriptorPool>> m_pools;
|
std::vector<DescriptorPool> m_pools;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DescriptorSet : public std::enable_shared_from_this<DescriptorSet>
|
class DescriptorSet : public std::enable_shared_from_this<DescriptorSet>
|
||||||
|
|||||||
@@ -89,13 +89,7 @@ namespace mlx
|
|||||||
mlx_color GetPixel(int x, int y) noexcept;
|
mlx_color GetPixel(int x, int y) noexcept;
|
||||||
void GetRegion(int x, int y, int w, int h, mlx_color* dst) noexcept;
|
void GetRegion(int x, int y, int w, int h, mlx_color* dst) noexcept;
|
||||||
void Clear(VkCommandBuffer cmd, Vec4f color) override;
|
void Clear(VkCommandBuffer cmd, Vec4f color) override;
|
||||||
void CopyTo(Texture& other);
|
|
||||||
void Resize(std::uint32_t width, std::uint32_t height);
|
|
||||||
|
|
||||||
void Swap(Texture& texture) noexcept;
|
|
||||||
|
|
||||||
// If a valid cmd buffer is passed, this function takes ownership and makes it invalid after
|
|
||||||
void SyncCPUBuffer(VkCommandBuffer cmd = VK_NULL_HANDLE);
|
|
||||||
void Update(VkCommandBuffer cmd);
|
void Update(VkCommandBuffer cmd);
|
||||||
|
|
||||||
~Texture() override { Destroy(); }
|
~Texture() override { Destroy(); }
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ namespace mlx
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Swapchain m_swapchain;
|
Swapchain m_swapchain;
|
||||||
std::vector<VkSemaphore> m_render_finished_semaphores;
|
|
||||||
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_image_available_semaphores;
|
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_image_available_semaphores;
|
||||||
|
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_render_finished_semaphores;
|
||||||
std::array<VkCommandBuffer, MAX_FRAMES_IN_FLIGHT> m_cmd_buffers;
|
std::array<VkCommandBuffer, MAX_FRAMES_IN_FLIGHT> m_cmd_buffers;
|
||||||
std::array<VkFence, MAX_FRAMES_IN_FLIGHT> m_cmd_fences;
|
std::array<VkFence, MAX_FRAMES_IN_FLIGHT> m_cmd_fences;
|
||||||
NonOwningPtr<Window> p_window;
|
NonOwningPtr<Window> p_window;
|
||||||
|
|||||||
@@ -123,41 +123,5 @@
|
|||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR)
|
MLX_VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR)
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR)
|
MLX_VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR)
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR)
|
MLX_VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR)
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
|
||||||
#ifdef VK_KHR_android_surface
|
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkCreateAndroidSurfaceKHR)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
|
||||||
#ifdef VK_KHR_xcb_surface
|
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkCreateXcbSurfaceKHR)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
|
||||||
#ifdef VK_KHR_xlib_surface
|
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkCreateXlibSurfaceKHR)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
|
||||||
#ifdef VK_KHR_wayland_surface
|
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkCreateWaylandSurfaceKHR)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
|
||||||
#ifdef VK_KHR_win32_surface
|
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkCreateWin32SurfaceKHR)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
|
||||||
#ifdef VK_EXT_metal_surface
|
|
||||||
MLX_VULKAN_INSTANCE_FUNCTION(vkCreateMetalSurfaceEXT)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -2,11 +2,10 @@
|
|||||||
|
|
||||||
#include <Core/Application.h>
|
#include <Core/Application.h>
|
||||||
#include <Core/SDLManager.h>
|
#include <Core/SDLManager.h>
|
||||||
|
#include <Renderer/RenderCore.h>
|
||||||
#include <mlx.h>
|
#include <mlx.h>
|
||||||
#include <mlx_extended.h>
|
|
||||||
#include <Core/Memory.h>
|
#include <Core/Memory.h>
|
||||||
#include <Core/Handles.h>
|
#include <Core/Handles.h>
|
||||||
#include <Renderer/RenderCore.h>
|
|
||||||
|
|
||||||
static mlx::Application* __internal_application_ptr = nullptr;
|
static mlx::Application* __internal_application_ptr = nullptr;
|
||||||
|
|
||||||
@@ -225,7 +224,7 @@ extern "C"
|
|||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||||
if (filename == nullptr)
|
if (filename == nullptr)
|
||||||
{
|
{
|
||||||
mlx::Error("Image loader: filename is NULL");
|
mlx::Error("PNG loader: filename is NULL");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
std::filesystem::path file(filename);
|
std::filesystem::path file(filename);
|
||||||
@@ -235,18 +234,9 @@ extern "C"
|
|||||||
file.extension() != ".bmp" &&
|
file.extension() != ".bmp" &&
|
||||||
file.extension() != ".dib")
|
file.extension() != ".dib")
|
||||||
{
|
{
|
||||||
mlx::Error("Image loader: not a valid file format '%'", filename);
|
mlx::Error("PNG loader: not a valid file format '%'", filename);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
std::ifstream stream(file, std::ios::binary);
|
|
||||||
if(!stream.is_open())
|
|
||||||
{
|
|
||||||
mlx::Error("Image loader: failed to open file '%'", filename);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mlx->app->NewStbTexture(filename, width, height);
|
return mlx->app->NewStbTexture(filename, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,29 +303,12 @@ extern "C"
|
|||||||
mlx::Error("Font loader: filepath is NULL");
|
mlx::Error("Font loader: filepath is NULL");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::filesystem::path file(filepath);
|
std::filesystem::path file(filepath);
|
||||||
if (std::strcmp(filepath, "default") != 0 && !std::filesystem::exists(file))
|
if(std::strcmp(filepath, "default") != 0 && file.extension() != ".ttf" && file.extension() != ".tte")
|
||||||
{
|
|
||||||
mlx::Error("TTF loader: unable to find file '%'", filepath);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(std::strcmp(filepath, "default") != 0)
|
|
||||||
{
|
|
||||||
if(file.extension() != ".ttf" && file.extension() != ".tte")
|
|
||||||
{
|
{
|
||||||
mlx::Error("TTF loader: not a truetype font file '%'", filepath);
|
mlx::Error("TTF loader: not a truetype font file '%'", filepath);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::ifstream stream(file, std::ios::binary);
|
|
||||||
if(!stream.is_open())
|
|
||||||
{
|
|
||||||
mlx::Error("TTF loader: failed to open font file '%'", filepath);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(std::strcmp(filepath, "default") == 0)
|
if(std::strcmp(filepath, "default") == 0)
|
||||||
mlx->app->LoadFont(file, 6.f);
|
mlx->app->LoadFont(file, 6.f);
|
||||||
else
|
else
|
||||||
@@ -350,29 +323,12 @@ extern "C"
|
|||||||
mlx::Error("Font loader: filepath is NULL");
|
mlx::Error("Font loader: filepath is NULL");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::filesystem::path file(filepath);
|
std::filesystem::path file(filepath);
|
||||||
if (std::strcmp(filepath, "default") != 0 && !std::filesystem::exists(file))
|
if(std::strcmp(filepath, "default") != 0 && file.extension() != ".ttf" && file.extension() != ".tte")
|
||||||
{
|
|
||||||
mlx::Error("TTF loader: unable to find file '%'", filepath);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(std::strcmp(filepath, "default") != 0)
|
|
||||||
{
|
|
||||||
if(file.extension() != ".ttf" && file.extension() != ".tte")
|
|
||||||
{
|
{
|
||||||
mlx::Error("TTF loader: not a truetype font file '%'", filepath);
|
mlx::Error("TTF loader: not a truetype font file '%'", filepath);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::ifstream stream(file, std::ios::binary);
|
|
||||||
if(!stream.is_open())
|
|
||||||
{
|
|
||||||
mlx::Error("TTF loader: failed to open font file '%'", filepath);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mlx->app->LoadFont(file, scale);
|
mlx->app->LoadFont(file, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -470,165 +426,4 @@ extern "C"
|
|||||||
return;
|
return;
|
||||||
gs->TexturePut(texture, x, y, scale_x, scale_y, angle);
|
gs->TexturePut(texture, x, y, scale_x, scale_y, angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hidden bindings
|
|
||||||
|
|
||||||
VkInstance mlx_get_vk_instance(mlx_context mlx)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
return mlx::RenderCore::Get().GetInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
VkPhysicalDevice mlx_get_vk_physical_device(mlx_context mlx)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
return mlx::RenderCore::Get().GetPhysicalDevice();
|
|
||||||
}
|
|
||||||
|
|
||||||
VkDevice mlx_get_vk_device(mlx_context mlx)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
return mlx::RenderCore::Get().GetDevice();
|
|
||||||
}
|
|
||||||
|
|
||||||
VkQueue mlx_get_vk_graphics_queue(mlx_context mlx)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
return kvfGetDeviceQueue(mlx::RenderCore::Get().GetDevice(), KVF_GRAPHICS_QUEUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int mlx_get_vk_graphics_queue_family(mlx_context mlx)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
return kvfGetDeviceQueueFamily(mlx::RenderCore::Get().GetDevice(), KVF_GRAPHICS_QUEUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
mlx_function mlx_get_vk_fn(mlx_context mlx, const char* name)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
#define MLX_VULKAN_GLOBAL_FUNCTION(fn) if(std::strcmp(name, #fn) == 0) return reinterpret_cast<mlx_function>(mlx::RenderCore::Get().fn);
|
|
||||||
#define MLX_VULKAN_INSTANCE_FUNCTION(fn) if(std::strcmp(name, #fn) == 0) return reinterpret_cast<mlx_function>(mlx::RenderCore::Get().fn);
|
|
||||||
#define MLX_VULKAN_DEVICE_FUNCTION(fn) if(std::strcmp(name, #fn) == 0) return reinterpret_cast<mlx_function>(mlx::RenderCore::Get().fn);
|
|
||||||
#include <Renderer/Vulkan/VulkanDefs.h>
|
|
||||||
#undef MLX_VULKAN_GLOBAL_FUNCTION
|
|
||||||
#undef MLX_VULKAN_INSTANCE_FUNCTION
|
|
||||||
#undef MLX_VULKAN_DEVICE_FUNCTION
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkSurfaceKHR mlx_get_vk_surface(mlx_context mlx, mlx_window win)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs)
|
|
||||||
return VK_NULL_HANDLE;
|
|
||||||
return gs->GetRenderer().GetSwapchain().GetSurface();
|
|
||||||
}
|
|
||||||
|
|
||||||
VkImage mlx_get_vk_swapchain_image(mlx_context mlx, mlx_window win, unsigned int index)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs || index > gs->GetRenderer().GetSwapchain().GetImagesCount())
|
|
||||||
return VK_NULL_HANDLE;
|
|
||||||
return gs->GetRenderer().GetSwapchain().GetSwapchainImages()[index].Get();
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int mlx_get_vk_swapchain_image_count(mlx_context mlx, mlx_window win)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs)
|
|
||||||
return 0;
|
|
||||||
return gs->GetRenderer().GetSwapchain().GetImagesCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
VkImageView mlx_get_vk_swapchain_image_view(mlx_context mlx, mlx_window win, unsigned int index)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs || index > gs->GetRenderer().GetSwapchain().GetImagesCount())
|
|
||||||
return VK_NULL_HANDLE;
|
|
||||||
return gs->GetRenderer().GetSwapchain().GetSwapchainImages()[index].GetImageView();
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int mlx_get_current_vk_swapchain_image_index(mlx_context mlx, mlx_window win)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs)
|
|
||||||
return -1;
|
|
||||||
return gs->GetRenderer().GetSwapchain().GetImageIndex();
|
|
||||||
}
|
|
||||||
|
|
||||||
VkExtent2D mlx_get_vk_swapchain_extent(mlx_context mlx, mlx_window win)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs)
|
|
||||||
return {};
|
|
||||||
return kvfGetSwapchainImagesSize(gs->GetRenderer().GetSwapchain().Get());
|
|
||||||
}
|
|
||||||
|
|
||||||
VkFormat mlx_get_vk_swapchain_format(mlx_context mlx, mlx_window win)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs)
|
|
||||||
return VK_FORMAT_UNDEFINED;
|
|
||||||
return kvfGetSwapchainImagesFormat(gs->GetRenderer().GetSwapchain().Get());
|
|
||||||
}
|
|
||||||
|
|
||||||
void* mlx_get_window_handle(mlx_context mlx, mlx_window win)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs || !gs->HasWindow())
|
|
||||||
return nullptr;
|
|
||||||
return mlx::SDLManager::Get().GetRawWindow(gs->GetWindow()->GetRawHandle());
|
|
||||||
}
|
|
||||||
|
|
||||||
void mlx_set_sdl_input_hook(mlx_context mlx, void(*f)(void*))
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::SDLManager::Get().SetInputBinding(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void mlx_add_pre_render_hook(mlx_context mlx, mlx_window win, void(*f)(VkCommandBuffer, void*), void* param)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
|
||||||
if(!gs)
|
|
||||||
return;
|
|
||||||
gs->AddPreRenderHook(f, param);
|
|
||||||
}
|
|
||||||
|
|
||||||
mlx_function mlx_get_proc_addr(mlx_context mlx, const char* name)
|
|
||||||
{
|
|
||||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
|
||||||
#define MLX_MAKE_ENTRY(fn) { #fn, reinterpret_cast<mlx_function>(fn) }
|
|
||||||
std::unordered_map<std::string, mlx_function> entries = {
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_instance),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_surface),
|
|
||||||
MLX_MAKE_ENTRY(mlx_set_sdl_input_hook),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_physical_device),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_graphics_queue),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_graphics_queue_family),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_device),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_fn),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_window_handle),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_swapchain_image_count),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_swapchain_extent),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_swapchain_format),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_swapchain_image),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_vk_swapchain_image_view),
|
|
||||||
MLX_MAKE_ENTRY(mlx_get_current_vk_swapchain_image_index),
|
|
||||||
MLX_MAKE_ENTRY(mlx_add_pre_render_hook),
|
|
||||||
};
|
|
||||||
auto it = entries.find(std::string{ name });
|
|
||||||
if(it != entries.end())
|
|
||||||
return it->second;
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,11 +38,6 @@ namespace mlx
|
|||||||
m_renderer.BeginFrame();
|
m_renderer.BeginFrame();
|
||||||
m_draw_layer = 0;
|
m_draw_layer = 0;
|
||||||
m_scene_renderer.Render(*p_scene, m_renderer);
|
m_scene_renderer.Render(*p_scene, m_renderer);
|
||||||
for(const auto& hook : m_hooks)
|
|
||||||
{
|
|
||||||
if(hook.fn)
|
|
||||||
hook.fn(m_renderer.GetActiveCommandBuffer(), hook.param);
|
|
||||||
}
|
|
||||||
m_renderer.EndFrame();
|
m_renderer.EndFrame();
|
||||||
#ifdef GRAPHICS_MEMORY_DUMP
|
#ifdef GRAPHICS_MEMORY_DUMP
|
||||||
// Dump memory usage to file every two seconds
|
// Dump memory usage to file every two seconds
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace mlx
|
|||||||
using namespace std::literals;
|
using namespace std::literals;
|
||||||
|
|
||||||
#ifndef DEBUG
|
#ifndef DEBUG
|
||||||
if(type == LogType::Debug && std::getenv("MLX_DEBUG_LOGS") == nullptr)
|
if(type == LogType::Debug)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -21,14 +21,14 @@ namespace mlx
|
|||||||
|
|
||||||
void* MemManager::AlignedMalloc(std::size_t alignment, std::size_t size)
|
void* MemManager::AlignedMalloc(std::size_t alignment, std::size_t size)
|
||||||
{
|
{
|
||||||
#ifdef MLX_PLAT_WINDOWS
|
|
||||||
void* ptr = _aligned_malloc(size, alignment);
|
|
||||||
#else
|
|
||||||
if(alignment < sizeof(void*))
|
if(alignment < sizeof(void*))
|
||||||
alignment = sizeof(void*);
|
alignment = sizeof(void*);
|
||||||
if(size % alignment != 0)
|
if(size % alignment != 0)
|
||||||
size += alignment - (size % alignment);
|
size += alignment - (size % alignment);
|
||||||
|
|
||||||
|
#ifdef MLX_COMPILER_MSVC
|
||||||
|
void* ptr = _aligned_malloc(alignment, size);
|
||||||
|
#else
|
||||||
void* ptr = std::aligned_alloc(alignment, size);
|
void* ptr = std::aligned_alloc(alignment, size);
|
||||||
#endif
|
#endif
|
||||||
if(ptr != nullptr)
|
if(ptr != nullptr)
|
||||||
@@ -66,8 +66,8 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
auto it = std::find_if(s_blocks.begin(), s_blocks.end(), [=](const Descriptor& rhs){ return ptr == rhs.ptr; });
|
auto it = std::find_if(s_blocks.begin(), s_blocks.end(), [=](const Descriptor& rhs){ return ptr == rhs.ptr; });
|
||||||
|
|
||||||
#ifdef MLX_PLAT_WINDOWS
|
#ifdef MLX_COMPILER_MSVC
|
||||||
void* ptr2 = _aligned_realloc(ptr, size, alignment);
|
void* ptr2 = _aligned_realloc(ptr, alignment, size);
|
||||||
if(it != s_blocks.end())
|
if(it != s_blocks.end())
|
||||||
s_blocks.erase(it);
|
s_blocks.erase(it);
|
||||||
#else
|
#else
|
||||||
@@ -90,7 +90,7 @@ namespace mlx
|
|||||||
auto it = std::find_if(s_blocks.begin(), s_blocks.end(), [=](const Descriptor& rhs){ return ptr == rhs.ptr; });
|
auto it = std::find_if(s_blocks.begin(), s_blocks.end(), [=](const Descriptor& rhs){ return ptr == rhs.ptr; });
|
||||||
if(it == s_blocks.end())
|
if(it == s_blocks.end())
|
||||||
return;
|
return;
|
||||||
#ifdef MLX_PLAT_WINDOWS
|
#ifdef MLX_COMPILER_MSVC
|
||||||
if(it->aligned)
|
if(it->aligned)
|
||||||
_aligned_free(it->ptr);
|
_aligned_free(it->ptr);
|
||||||
else
|
else
|
||||||
@@ -105,7 +105,7 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
for(const Descriptor& desc : s_blocks)
|
for(const Descriptor& desc : s_blocks)
|
||||||
{
|
{
|
||||||
#ifdef MLX_PLAT_WINDOWS
|
#ifdef MLX_COMPILER_MSVC
|
||||||
if(desc.aligned)
|
if(desc.aligned)
|
||||||
_aligned_free(desc.ptr);
|
_aligned_free(desc.ptr);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ namespace mlx
|
|||||||
|
|
||||||
void Profiler::BeginRuntimeSession()
|
void Profiler::BeginRuntimeSession()
|
||||||
{
|
{
|
||||||
|
std::lock_guard lock(m_mutex);
|
||||||
if(m_runtime_session_began)
|
if(m_runtime_session_began)
|
||||||
return;
|
return;
|
||||||
m_output_stream.open("./runtime_profile.mlx.json", std::ofstream::out | std::ofstream::trunc);
|
m_output_stream.open("./runtime_profile.mlx.json", std::ofstream::out | std::ofstream::trunc);
|
||||||
@@ -21,6 +22,7 @@ namespace mlx
|
|||||||
|
|
||||||
void Profiler::AppendProfileData(ProfileResult&& result)
|
void Profiler::AppendProfileData(ProfileResult&& result)
|
||||||
{
|
{
|
||||||
|
std::lock_guard lock(m_mutex);
|
||||||
auto it = m_profile_data.find(result.name);
|
auto it = m_profile_data.find(result.name);
|
||||||
if(it != m_profile_data.end())
|
if(it != m_profile_data.end())
|
||||||
{
|
{
|
||||||
@@ -47,6 +49,7 @@ namespace mlx
|
|||||||
|
|
||||||
void Profiler::EndRuntimeSession()
|
void Profiler::EndRuntimeSession()
|
||||||
{
|
{
|
||||||
|
std::lock_guard lock(m_mutex);
|
||||||
if(!m_runtime_session_began)
|
if(!m_runtime_session_began)
|
||||||
return;
|
return;
|
||||||
for(auto& [_, pair] : m_profile_data)
|
for(auto& [_, pair] : m_profile_data)
|
||||||
|
|||||||
@@ -22,17 +22,15 @@ namespace mlx
|
|||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
s_instance = this;
|
s_instance = this;
|
||||||
|
|
||||||
m_drop_sdl_responsability = SDL_WasInit(SDL_INIT_VIDEO) || std::getenv("MLX_HEADLESS_MODE") != nullptr;
|
m_drop_sdl_responsability = SDL_WasInit(SDL_INIT_VIDEO);
|
||||||
if(m_drop_sdl_responsability) // is case the mlx is running in a sandbox like MacroUnitTester where SDL is already init
|
if(m_drop_sdl_responsability) // is case the mlx is running in a sandbox like MacroUnitTester where SDL is already init
|
||||||
return;
|
return;
|
||||||
//SDL_SetMemoryFunctions(MemManager::Get().Malloc, MemManager::Get().Calloc, MemManager::Get().Realloc, MemManager::Get().Free);
|
SDL_SetMemoryFunctions(MemManager::Get().Malloc, MemManager::Get().Calloc, MemManager::Get().Realloc, MemManager::Get().Free);
|
||||||
|
|
||||||
#ifdef FORCE_WAYLAND
|
#ifdef FORCE_WAYLAND
|
||||||
SDL_SetHint(SDL_HINT_VIDEODRIVER, "wayland,x11");
|
SDL_SetHint(SDL_HINT_VIDEODRIVER, "wayland,x11");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//SDL_SetHintWithPriority(SDL_HINT_SHUTDOWN_DBUS_ON_QUIT, "1", SDL_HINT_OVERRIDE);
|
|
||||||
|
|
||||||
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS | SDL_INIT_TIMER) != 0)
|
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS | SDL_INIT_TIMER) != 0)
|
||||||
FatalError("SDL: unable to init all subsystems; %", SDL_GetError());
|
FatalError("SDL: unable to init all subsystems; %", SDL_GetError());
|
||||||
DebugLog("SDL Manager initialized");
|
DebugLog("SDL Manager initialized");
|
||||||
@@ -43,7 +41,7 @@ namespace mlx
|
|||||||
Internal::WindowInfos* infos = new Internal::WindowInfos;
|
Internal::WindowInfos* infos = new Internal::WindowInfos;
|
||||||
Verify(infos != nullptr, "SDL: window allocation failed");
|
Verify(infos != nullptr, "SDL: window allocation failed");
|
||||||
|
|
||||||
std::uint32_t flags = 0;
|
std::uint32_t flags = SDL_WINDOW_VULKAN;
|
||||||
if(hidden)
|
if(hidden)
|
||||||
flags |= SDL_WINDOW_HIDDEN;
|
flags |= SDL_WINDOW_HIDDEN;
|
||||||
else
|
else
|
||||||
@@ -80,46 +78,30 @@ namespace mlx
|
|||||||
delete infos;
|
delete infos;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Window* SDLManager::GetRawWindow(Handle window) noexcept
|
|
||||||
{
|
|
||||||
Internal::WindowInfos* infos = static_cast<Internal::WindowInfos*>(window);
|
|
||||||
return infos->window;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkSurfaceKHR SDLManager::CreateVulkanSurface(Handle window, VkInstance instance) const noexcept
|
VkSurfaceKHR SDLManager::CreateVulkanSurface(Handle window, VkInstance instance) const noexcept
|
||||||
{
|
{
|
||||||
SDL_SysWMinfo info;
|
VkSurfaceKHR surface;
|
||||||
SDL_VERSION(&info.version);
|
if(!SDL_Vulkan_CreateSurface(static_cast<Internal::WindowInfos*>(window)->window, instance, &surface))
|
||||||
if(SDL_GetWindowWMInfo(static_cast<Internal::WindowInfos*>(window)->window, &info) != SDL_TRUE)
|
FatalError("SDL: could not create a Vulkan surface; %", SDL_GetError());
|
||||||
FatalError("SDL Manager: cannot retrieve window informations");
|
return surface;
|
||||||
|
|
||||||
switch(info.subsystem)
|
|
||||||
{
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_WINDOWS
|
|
||||||
case SDL_SYSWM_WINDOWS: return kvfCreateSurfaceKHR(instance, KVF_SURFACE_WINDOWS, static_cast<void*>(info.info.win.hinstance), static_cast<void*>(info.info.win.window));
|
|
||||||
#endif
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_X11
|
|
||||||
case SDL_SYSWM_X11: return kvfCreateSurfaceKHR(instance, KVF_SURFACE_XLIB, static_cast<void*>(info.info.x11.display), static_cast<void*>(&info.info.x11.window));
|
|
||||||
#endif
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_COCOA
|
|
||||||
case SDL_SYSWM_COCOA: FatalError("SDL Manager: Vulkan surfaces over Metal are not supported yet. Please fill an issue here https://github.com/seekrs/MacroLibX/issues/new");
|
|
||||||
#endif
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_WAYLAND
|
|
||||||
case SDL_SYSWM_WAYLAND: return kvfCreateSurfaceKHR(instance, KVF_SURFACE_WAYLAND, static_cast<void*>(info.info.wl.display), static_cast<void*>(info.info.wl.surface));
|
|
||||||
#endif
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_ANDROID
|
|
||||||
case SDL_SYSWM_ANDROID: return kvfCreateSurfaceKHR(instance, KVF_SURFACE_ANDROID, nullptr, static_cast<void*>(info.info.android.window));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default : FatalError("SDL Manager: unsupported windowing system"); break;
|
|
||||||
}
|
}
|
||||||
return VK_NULL_HANDLE;
|
|
||||||
|
std::vector<const char*> SDLManager::GetRequiredVulkanInstanceExtentions(Handle window) const noexcept
|
||||||
|
{
|
||||||
|
std::uint32_t count;
|
||||||
|
if(!SDL_Vulkan_GetInstanceExtensions(static_cast<Internal::WindowInfos*>(window)->window, &count, nullptr))
|
||||||
|
FatalError("SDL Manager: could not retrieve Vulkan instance extensions");
|
||||||
|
std::vector<const char*> extensions(count);
|
||||||
|
if(!SDL_Vulkan_GetInstanceExtensions(static_cast<Internal::WindowInfos*>(window)->window, &count, extensions.data()))
|
||||||
|
FatalError("SDL Manager: could not retrieve Vulkan instance extensions");
|
||||||
|
extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
|
||||||
|
return extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec2ui SDLManager::GetVulkanDrawableSize(Handle window) const noexcept
|
Vec2ui SDLManager::GetVulkanDrawableSize(Handle window) const noexcept
|
||||||
{
|
{
|
||||||
Vec2i extent;
|
Vec2i extent;
|
||||||
SDL_GetWindowSize(static_cast<Internal::WindowInfos*>(window)->window, &extent.x, &extent.y);
|
SDL_Vulkan_GetDrawableSize(static_cast<Internal::WindowInfos*>(window)->window, &extent.x, &extent.y);
|
||||||
return Vec2ui{ extent };
|
return Vec2ui{ extent };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,11 +216,6 @@ namespace mlx
|
|||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLManager::SetInputBinding(std::function<void(SDL_Event*)> functor)
|
|
||||||
{
|
|
||||||
m_binding_hook = std::move(functor);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SDLManager::InputsFetcher(std::function<void(mlx_event_type, int, int)> functor)
|
void SDLManager::InputsFetcher(std::function<void(mlx_event_type, int, int)> functor)
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
@@ -275,8 +252,6 @@ namespace mlx
|
|||||||
case SDL_WINDOWEVENT_FOCUS_GAINED: functor(MLX_WINDOW_EVENT, id, 5); break;
|
case SDL_WINDOWEVENT_FOCUS_GAINED: functor(MLX_WINDOW_EVENT, id, 5); break;
|
||||||
case SDL_WINDOWEVENT_LEAVE: functor(MLX_WINDOW_EVENT, id, 6); break;
|
case SDL_WINDOWEVENT_LEAVE: functor(MLX_WINDOW_EVENT, id, 6); break;
|
||||||
case SDL_WINDOWEVENT_FOCUS_LOST: functor(MLX_WINDOW_EVENT, id, 7); break;
|
case SDL_WINDOWEVENT_FOCUS_LOST: functor(MLX_WINDOW_EVENT, id, 7); break;
|
||||||
case SDL_WINDOWEVENT_SIZE_CHANGED: functor(MLX_WINDOW_EVENT, id, 8); break;
|
|
||||||
case SDL_WINDOWEVENT_RESTORED: functor(MLX_WINDOW_EVENT, id, 11); break;
|
|
||||||
|
|
||||||
default : break;
|
default : break;
|
||||||
}
|
}
|
||||||
@@ -285,9 +260,6 @@ namespace mlx
|
|||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_binding_hook)
|
|
||||||
m_binding_hook(&event);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,7 +267,6 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
if(m_drop_sdl_responsability)
|
if(m_drop_sdl_responsability)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_EVENTS);
|
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_EVENTS);
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
s_instance = nullptr;
|
s_instance = nullptr;
|
||||||
|
|||||||
@@ -7,14 +7,7 @@ namespace mlx
|
|||||||
static std::random_device random_device;
|
static std::random_device random_device;
|
||||||
static std::mt19937_64 engine(random_device());
|
static std::mt19937_64 engine(random_device());
|
||||||
static std::uniform_int_distribution<std::uint64_t> uniform_distribution;
|
static std::uniform_int_distribution<std::uint64_t> uniform_distribution;
|
||||||
static std::unordered_set<std::uint64_t> registry;
|
|
||||||
|
|
||||||
UUID::UUID()
|
UUID::UUID() : m_uuid(uniform_distribution(engine)) {}
|
||||||
{
|
UUID::UUID(std::uint64_t uuid) : m_uuid(uuid) {}
|
||||||
do
|
|
||||||
{
|
|
||||||
m_uuid = uniform_distribution(engine);
|
|
||||||
} while(registry.contains(m_uuid));
|
|
||||||
registry.emplace(m_uuid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,29 +6,6 @@
|
|||||||
|
|
||||||
namespace mlx
|
namespace mlx
|
||||||
{
|
{
|
||||||
PutPixelManager::PutPixelManager(NonOwningPtr<class Renderer> renderer) : p_renderer(renderer)
|
|
||||||
{
|
|
||||||
MLX_PROFILE_FUNCTION();
|
|
||||||
std::function<void(const EventBase&)> functor = [this](const EventBase& event)
|
|
||||||
{
|
|
||||||
// Suboptimal for multi-windows applications
|
|
||||||
if(event.What() == Event::ResizeEventCode)
|
|
||||||
{
|
|
||||||
VkExtent2D extent{ .width = 0, .height = 0 };
|
|
||||||
if(p_renderer->GetWindow())
|
|
||||||
extent = kvfGetSwapchainImagesSize(p_renderer->GetSwapchain().Get());
|
|
||||||
else if(p_renderer->GetRenderTarget())
|
|
||||||
extent = VkExtent2D{ .width = p_renderer->GetRenderTarget()->GetWidth(), .height = p_renderer->GetRenderTarget()->GetHeight() };
|
|
||||||
else
|
|
||||||
FatalError("a renderer was created without window nor render target attached (wtf!?)");
|
|
||||||
|
|
||||||
for(auto& texture : m_textures)
|
|
||||||
texture->Resize(extent.width, extent.height);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
EventBus::RegisterListener({ functor, "mlx_put_pixel_manager_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
|
||||||
}
|
|
||||||
|
|
||||||
NonOwningPtr<Texture> PutPixelManager::DrawPixel(int x, int y, std::uint64_t draw_layer, mlx_color color)
|
NonOwningPtr<Texture> PutPixelManager::DrawPixel(int x, int y, std::uint64_t draw_layer, mlx_color color)
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
@@ -76,8 +53,21 @@ namespace mlx
|
|||||||
is_newlayer = true;
|
is_newlayer = true;
|
||||||
|
|
||||||
if(m_current_texture_index >= m_textures.size())
|
if(m_current_texture_index >= m_textures.size())
|
||||||
m_textures.push_back(NewTexture());
|
{
|
||||||
|
VkExtent2D extent{ .width = 0, .height = 0 };
|
||||||
|
if(p_renderer->GetWindow())
|
||||||
|
extent = kvfGetSwapchainImagesSize(p_renderer->GetSwapchain().Get());
|
||||||
|
else if(p_renderer->GetRenderTarget())
|
||||||
|
extent = VkExtent2D{ .width = p_renderer->GetRenderTarget()->GetWidth(), .height = p_renderer->GetRenderTarget()->GetHeight() };
|
||||||
|
else
|
||||||
|
FatalError("a renderer was created without window nor render target attached (wtf)");
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
m_textures.push_back(std::make_unique<Texture>(CPUBuffer{}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_SRGB, false, "mlx_put_pixel_layer_" + std::to_string(m_current_texture_index)));
|
||||||
|
#else
|
||||||
|
m_textures.push_back(std::make_unique<Texture>(CPUBuffer{}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_SRGB, false, std::string_view{}));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_placements[draw_layer] = m_textures.at(m_current_texture_index).get();
|
m_placements[draw_layer] = m_textures.at(m_current_texture_index).get();
|
||||||
@@ -93,23 +83,6 @@ namespace mlx
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Texture> PutPixelManager::NewTexture()
|
|
||||||
{
|
|
||||||
VkExtent2D extent{ .width = 0, .height = 0 };
|
|
||||||
if(p_renderer->GetWindow())
|
|
||||||
extent = kvfGetSwapchainImagesSize(p_renderer->GetSwapchain().Get());
|
|
||||||
else if(p_renderer->GetRenderTarget())
|
|
||||||
extent = VkExtent2D{ .width = p_renderer->GetRenderTarget()->GetWidth(), .height = p_renderer->GetRenderTarget()->GetHeight() };
|
|
||||||
else
|
|
||||||
FatalError("a renderer was created without window nor render target attached (wtf!?)");
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
return std::make_unique<Texture>(CPUBuffer{}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_SRGB, false, "mlx_put_pixel_layer_" + std::to_string(m_current_texture_index));
|
|
||||||
#else
|
|
||||||
return std::make_unique<Texture>(CPUBuffer{}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_SRGB, false, std::string_view{});
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void PutPixelManager::ResetRenderData()
|
void PutPixelManager::ResetRenderData()
|
||||||
{
|
{
|
||||||
m_placements.clear();
|
m_placements.clear();
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#include <PreCompiled.h>
|
#include <PreCompiled.h>
|
||||||
|
|
||||||
|
#include <mlx.h>
|
||||||
#include <Platform/Inputs.h>
|
#include <Platform/Inputs.h>
|
||||||
#include <Core/SDLManager.h>
|
#include <Core/SDLManager.h>
|
||||||
#include <Core/EventBus.h>
|
|
||||||
|
|
||||||
namespace mlx
|
namespace mlx
|
||||||
{
|
{
|
||||||
namespace Internal
|
|
||||||
{
|
|
||||||
struct ResizeEventBroadcast : public EventBase
|
|
||||||
{
|
|
||||||
Event What() const override { return Event::ResizeEventCode; }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void Inputs::FetchInputs()
|
void Inputs::FetchInputs()
|
||||||
{
|
{
|
||||||
SDLManager::Get().InputsFetcher([this](mlx_event_type event, int window_id, int code)
|
SDLManager::Get().InputsFetcher([this](mlx_event_type event, int window_id, int code)
|
||||||
@@ -22,8 +14,6 @@ namespace mlx
|
|||||||
return;
|
return;
|
||||||
if(!m_events_hooks.contains(window_id) || m_events_hooks[window_id][event].empty())
|
if(!m_events_hooks.contains(window_id) || m_events_hooks[window_id][event].empty())
|
||||||
return;
|
return;
|
||||||
if(event == MLX_WINDOW_EVENT && code == 8)
|
|
||||||
EventBus::SendBroadcast(Internal::ResizeEventBroadcast{});
|
|
||||||
for(const auto& hook : m_events_hooks[window_id][event])
|
for(const auto& hook : m_events_hooks[window_id][event])
|
||||||
{
|
{
|
||||||
if(hook.fn)
|
if(hook.fn)
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ namespace mlx
|
|||||||
|
|
||||||
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||||
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
||||||
kvfCopyBufferToBuffer(cmd, m_buffer, buffer.Get(), m_size, 0, 0);
|
kvfCopyBufferToBuffer(cmd, m_buffer, buffer.Get(), m_size);
|
||||||
kvfEndCommandBuffer(cmd);
|
kvfEndCommandBuffer(cmd);
|
||||||
VkFence fence = kvfCreateFence(RenderCore::Get().GetDevice());
|
VkFence fence = kvfCreateFence(RenderCore::Get().GetDevice());
|
||||||
kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence);
|
kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
namespace mlx
|
namespace mlx
|
||||||
{
|
{
|
||||||
constexpr std::size_t MAX_SETS_PER_POOL = 1024;
|
constexpr std::size_t MAX_SETS_PER_POOL = MAX_FRAMES_IN_FLIGHT * 1024;
|
||||||
|
|
||||||
void TransitionImageToCorrectLayout(Image& image, VkCommandBuffer cmd)
|
void TransitionImageToCorrectLayout(Image& image, VkCommandBuffer cmd)
|
||||||
{
|
{
|
||||||
@@ -26,19 +26,19 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
VkDescriptorPoolSize pool_sizes[] = {
|
VkDescriptorPoolSize pool_sizes[] = {
|
||||||
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, MAX_FRAMES_IN_FLIGHT * MAX_SETS_PER_POOL },
|
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, MAX_SETS_PER_POOL },
|
||||||
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, MAX_FRAMES_IN_FLIGHT * MAX_SETS_PER_POOL },
|
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, MAX_SETS_PER_POOL },
|
||||||
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, MAX_FRAMES_IN_FLIGHT * MAX_SETS_PER_POOL }
|
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, MAX_SETS_PER_POOL }
|
||||||
};
|
};
|
||||||
|
|
||||||
VkDescriptorPoolCreateInfo pool_info{};
|
VkDescriptorPoolCreateInfo pool_info{};
|
||||||
pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||||
pool_info.poolSizeCount = sizeof(pool_sizes) / sizeof(pool_sizes[0]);
|
pool_info.poolSizeCount = sizeof(pool_sizes) / sizeof(pool_sizes[0]);
|
||||||
pool_info.pPoolSizes = pool_sizes;
|
pool_info.pPoolSizes = pool_sizes;
|
||||||
pool_info.maxSets = MAX_FRAMES_IN_FLIGHT * MAX_SETS_PER_POOL;
|
pool_info.maxSets = MAX_SETS_PER_POOL;
|
||||||
pool_info.flags = 0;
|
pool_info.flags = 0;
|
||||||
kvfCheckVk(RenderCore::Get().vkCreateDescriptorPool(RenderCore::Get().GetDevice(), &pool_info, nullptr, &m_pool));
|
kvfCheckVk(RenderCore::Get().vkCreateDescriptorPool(RenderCore::Get().GetDevice(), &pool_info, nullptr, &m_pool));
|
||||||
DebugLog("Vulkan: created new descriptor pool");
|
m_allocation_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DescriptorPool::Destroy() noexcept
|
void DescriptorPool::Destroy() noexcept
|
||||||
@@ -52,6 +52,7 @@ namespace mlx
|
|||||||
kvfDestroyDescriptorSetLayout(RenderCore::Get().GetDevice(), set->m_set_layout);
|
kvfDestroyDescriptorSetLayout(RenderCore::Get().GetDevice(), set->m_set_layout);
|
||||||
RenderCore::Get().vkDestroyDescriptorPool(RenderCore::Get().GetDevice(), m_pool, nullptr);
|
RenderCore::Get().vkDestroyDescriptorPool(RenderCore::Get().GetDevice(), m_pool, nullptr);
|
||||||
m_pool = VK_NULL_HANDLE;
|
m_pool = VK_NULL_HANDLE;
|
||||||
|
m_allocation_count = 0;
|
||||||
m_free_sets.clear();
|
m_free_sets.clear();
|
||||||
m_used_sets.clear();
|
m_used_sets.clear();
|
||||||
}
|
}
|
||||||
@@ -102,6 +103,7 @@ namespace mlx
|
|||||||
alloc_info.pSetLayouts = &vulkan_layout;
|
alloc_info.pSetLayouts = &vulkan_layout;
|
||||||
VkDescriptorSet vulkan_set;
|
VkDescriptorSet vulkan_set;
|
||||||
kvfCheckVk(RenderCore::Get().vkAllocateDescriptorSets(RenderCore::Get().GetDevice(), &alloc_info, &vulkan_set));
|
kvfCheckVk(RenderCore::Get().vkAllocateDescriptorSets(RenderCore::Get().GetDevice(), &alloc_info, &vulkan_set));
|
||||||
|
m_allocation_count++;
|
||||||
vulkan_sets[i] = vulkan_set;
|
vulkan_sets[i] = vulkan_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,9 +112,9 @@ namespace mlx
|
|||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DescriptorPool::ReturnDescriptorSet(std::shared_ptr<DescriptorSet> set)
|
void DescriptorPool::ReturnDescriptorSet(std::shared_ptr<class DescriptorSet> set)
|
||||||
{
|
{
|
||||||
auto it = std::find_if(m_used_sets.begin(), m_used_sets.end(), [&](const std::shared_ptr<DescriptorSet>& rhs_set)
|
auto it = std::find_if(m_used_sets.begin(), m_used_sets.end(), [&](std::shared_ptr<DescriptorSet> rhs_set)
|
||||||
{
|
{
|
||||||
return set == rhs_set;
|
return set == rhs_set;
|
||||||
});
|
});
|
||||||
@@ -122,34 +124,23 @@ namespace mlx
|
|||||||
m_free_sets.push_back(set);
|
m_free_sets.push_back(set);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DescriptorPool::CanAllocate(const ShaderSetLayout& layout, ShaderType shader_type) const
|
DescriptorPool& DescriptorPoolManager::GetAvailablePool()
|
||||||
{
|
|
||||||
auto it = std::find_if(m_free_sets.begin(), m_free_sets.end(), [&](std::shared_ptr<DescriptorSet> set)
|
|
||||||
{
|
|
||||||
return shader_type == set->GetShaderType() && layout == set->GetShaderLayout();
|
|
||||||
});
|
|
||||||
if(it != m_free_sets.end())
|
|
||||||
return true;
|
|
||||||
return m_used_sets.size() + m_free_sets.size() < MAX_SETS_PER_POOL;
|
|
||||||
}
|
|
||||||
|
|
||||||
DescriptorPool& DescriptorPoolManager::GetAvailablePool(const ShaderSetLayout& layout, ShaderType shader_type)
|
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
for(auto& pool : m_pools)
|
for(auto& pool : m_pools)
|
||||||
{
|
{
|
||||||
if(pool->CanAllocate(layout, shader_type))
|
if(pool.GetNumberOfSetsAllocated() < MAX_SETS_PER_POOL)
|
||||||
return *pool;
|
return pool;
|
||||||
}
|
}
|
||||||
m_pools.emplace_back(std::make_unique<DescriptorPool>())->Init();
|
m_pools.emplace_back().Init();
|
||||||
return *m_pools.back();
|
return m_pools.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DescriptorPoolManager::Destroy()
|
void DescriptorPoolManager::Destroy()
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
for(auto& pool : m_pools)
|
for(auto& pool : m_pools)
|
||||||
pool->Destroy();
|
pool.Destroy();
|
||||||
m_pools.clear();
|
m_pools.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,9 +22,15 @@
|
|||||||
#include <stb_image.h>
|
#include <stb_image.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef IMAGE_OPTIMIZED
|
||||||
|
#define TILING VK_IMAGE_TILING_OPTIMAL
|
||||||
|
#else
|
||||||
|
#define TILING VK_IMAGE_TILING_LINEAR
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace mlx
|
namespace mlx
|
||||||
{
|
{
|
||||||
MLX_FORCEINLINE mlx_color ReverseColor(mlx_color color)
|
mlx_color ReverseColor(mlx_color color)
|
||||||
{
|
{
|
||||||
mlx_color reversed_color;
|
mlx_color reversed_color;
|
||||||
reversed_color.r = color.a;
|
reversed_color.r = color.a;
|
||||||
@@ -180,7 +186,7 @@ namespace mlx
|
|||||||
void Texture::Init(CPUBuffer pixels, std::uint32_t width, std::uint32_t height, VkFormat format, bool is_multisampled, [[maybe_unused]] std::string_view debug_name)
|
void Texture::Init(CPUBuffer pixels, std::uint32_t width, std::uint32_t height, VkFormat format, bool is_multisampled, [[maybe_unused]] std::string_view debug_name)
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
Image::Init(ImageType::Color, width, height, format, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, is_multisampled, std::move(debug_name));
|
Image::Init(ImageType::Color, width, height, format, TILING, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, is_multisampled, std::move(debug_name));
|
||||||
Image::CreateImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
|
Image::CreateImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
|
||||||
Image::CreateSampler();
|
Image::CreateSampler();
|
||||||
if(pixels)
|
if(pixels)
|
||||||
@@ -212,7 +218,7 @@ namespace mlx
|
|||||||
void Texture::SetPixel(int x, int y, mlx_color color) noexcept
|
void Texture::SetPixel(int x, int y, mlx_color color) noexcept
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) >= m_width || static_cast<std::uint32_t>(y) >= m_height)
|
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) > m_width || static_cast<std::uint32_t>(y) > m_height)
|
||||||
return;
|
return;
|
||||||
if(!m_staging_buffer.has_value())
|
if(!m_staging_buffer.has_value())
|
||||||
OpenCPUBuffer();
|
OpenCPUBuffer();
|
||||||
@@ -226,7 +232,7 @@ namespace mlx
|
|||||||
void Texture::SetRegion(int x, int y, int w, int h, mlx_color* pixels) noexcept
|
void Texture::SetRegion(int x, int y, int w, int h, mlx_color* pixels) noexcept
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) >= m_width || static_cast<std::uint32_t>(y) >= m_height)
|
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) > m_width || static_cast<std::uint32_t>(y) > m_height)
|
||||||
return;
|
return;
|
||||||
if(w < 0 || h < 0)
|
if(w < 0 || h < 0)
|
||||||
return;
|
return;
|
||||||
@@ -237,9 +243,9 @@ namespace mlx
|
|||||||
if(moving_x >= static_cast<std::uint32_t>(x + w) || moving_x >= m_width)
|
if(moving_x >= static_cast<std::uint32_t>(x + w) || moving_x >= m_width)
|
||||||
{
|
{
|
||||||
moving_x = x;
|
moving_x = x;
|
||||||
moving_y++;
|
|
||||||
if(moving_y >= static_cast<std::uint32_t>(y + h) || moving_y >= m_height)
|
if(moving_y >= static_cast<std::uint32_t>(y + h) || moving_y >= m_height)
|
||||||
break;
|
break;
|
||||||
|
moving_y++;
|
||||||
}
|
}
|
||||||
if constexpr(std::endian::native == std::endian::little)
|
if constexpr(std::endian::native == std::endian::little)
|
||||||
m_staging_buffer->GetMap<mlx_color*>()[(moving_y * m_width) + moving_x] = ReverseColor(pixels[i]);
|
m_staging_buffer->GetMap<mlx_color*>()[(moving_y * m_width) + moving_x] = ReverseColor(pixels[i]);
|
||||||
@@ -252,7 +258,7 @@ namespace mlx
|
|||||||
void Texture::SetLinearRegion(int x, int y, std::size_t len, mlx_color* pixels) noexcept
|
void Texture::SetLinearRegion(int x, int y, std::size_t len, mlx_color* pixels) noexcept
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) >= m_width || static_cast<std::uint32_t>(y) >= m_height)
|
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) > m_width || static_cast<std::uint32_t>(y) > m_height)
|
||||||
return;
|
return;
|
||||||
if(!m_staging_buffer.has_value())
|
if(!m_staging_buffer.has_value())
|
||||||
OpenCPUBuffer();
|
OpenCPUBuffer();
|
||||||
@@ -276,7 +282,7 @@ namespace mlx
|
|||||||
mlx_color Texture::GetPixel(int x, int y) noexcept
|
mlx_color Texture::GetPixel(int x, int y) noexcept
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) >= m_width || static_cast<std::uint32_t>(y) >= m_height)
|
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) > m_width || static_cast<std::uint32_t>(y) > m_height)
|
||||||
return { .rgba = 0x00000000 };
|
return { .rgba = 0x00000000 };
|
||||||
if(!m_staging_buffer.has_value())
|
if(!m_staging_buffer.has_value())
|
||||||
OpenCPUBuffer();
|
OpenCPUBuffer();
|
||||||
@@ -289,7 +295,7 @@ namespace mlx
|
|||||||
void Texture::GetRegion(int x, int y, int w, int h, mlx_color* dst) noexcept
|
void Texture::GetRegion(int x, int y, int w, int h, mlx_color* dst) noexcept
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) >= m_width || static_cast<std::uint32_t>(y) >= m_height)
|
if(x < 0 || y < 0 || static_cast<std::uint32_t>(x) > m_width || static_cast<std::uint32_t>(y) > m_height)
|
||||||
return;
|
return;
|
||||||
if(!m_staging_buffer.has_value())
|
if(!m_staging_buffer.has_value())
|
||||||
OpenCPUBuffer();
|
OpenCPUBuffer();
|
||||||
@@ -298,9 +304,9 @@ namespace mlx
|
|||||||
if(moving_x >= static_cast<std::uint32_t>(x + w) || moving_x >= m_width)
|
if(moving_x >= static_cast<std::uint32_t>(x + w) || moving_x >= m_width)
|
||||||
{
|
{
|
||||||
moving_x = x;
|
moving_x = x;
|
||||||
moving_y++;
|
|
||||||
if(moving_y >= static_cast<std::uint32_t>(y + h) || moving_y >= m_height)
|
if(moving_y >= static_cast<std::uint32_t>(y + h) || moving_y >= m_height)
|
||||||
break;
|
break;
|
||||||
|
moving_y++;
|
||||||
}
|
}
|
||||||
if constexpr(std::endian::native == std::endian::little)
|
if constexpr(std::endian::native == std::endian::little)
|
||||||
dst[i] = ReverseColor(m_staging_buffer->GetMap<mlx_color*>()[(moving_y * m_width) + moving_x]);
|
dst[i] = ReverseColor(m_staging_buffer->GetMap<mlx_color*>()[(moving_y * m_width) + moving_x]);
|
||||||
@@ -362,16 +368,8 @@ namespace mlx
|
|||||||
m_staging_buffer->Init(BufferType::Staging, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, {}, {});
|
m_staging_buffer->Init(BufferType::Staging, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, {}, {});
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SyncCPUBuffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Texture::SyncCPUBuffer(VkCommandBuffer cmd)
|
|
||||||
{
|
|
||||||
if(!m_staging_buffer.has_value())
|
|
||||||
return;
|
|
||||||
VkImageLayout old_layout = m_layout;
|
VkImageLayout old_layout = m_layout;
|
||||||
if(cmd == VK_NULL_HANDLE)
|
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||||
cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
|
||||||
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
||||||
TransitionLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, cmd);
|
TransitionLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, cmd);
|
||||||
kvfCopyImageToBuffer(cmd, m_staging_buffer->Get(), m_image, m_staging_buffer->GetOffset(), VK_IMAGE_ASPECT_COLOR_BIT, { m_width, m_height, 1 });
|
kvfCopyImageToBuffer(cmd, m_staging_buffer->Get(), m_image, m_staging_buffer->GetOffset(), VK_IMAGE_ASPECT_COLOR_BIT, { m_width, m_height, 1 });
|
||||||
@@ -383,105 +381,6 @@ namespace mlx
|
|||||||
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), cmd);
|
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Texture::CopyTo(Texture& other)
|
|
||||||
{
|
|
||||||
VkImageLayout old_layout = m_layout;
|
|
||||||
VkImageLayout other_old_layout = other.GetLayout();
|
|
||||||
|
|
||||||
VkImageSubresourceLayers subresource{};
|
|
||||||
subresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
|
||||||
subresource.mipLevel = 0;
|
|
||||||
subresource.layerCount = 1;
|
|
||||||
subresource.baseArrayLayer = 0;
|
|
||||||
|
|
||||||
VkExtent3D extent{};
|
|
||||||
extent.width = m_width;
|
|
||||||
extent.height = m_height;
|
|
||||||
extent.depth = 1;
|
|
||||||
|
|
||||||
VkOffset3D offset{};
|
|
||||||
offset.x = 0;
|
|
||||||
offset.y = 0;
|
|
||||||
offset.z = 0;
|
|
||||||
|
|
||||||
VkImageCopy region{};
|
|
||||||
region.srcSubresource = subresource;
|
|
||||||
region.dstSubresource = subresource;
|
|
||||||
region.extent = extent;
|
|
||||||
region.srcOffset = offset;
|
|
||||||
region.dstOffset = offset;
|
|
||||||
|
|
||||||
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
|
||||||
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
|
||||||
|
|
||||||
TransitionLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, cmd);
|
|
||||||
other.TransitionLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, cmd);
|
|
||||||
|
|
||||||
kvfCopyImageToImage(cmd, m_image, m_layout, other.Get(), other.GetLayout(), 1, ®ion);
|
|
||||||
|
|
||||||
TransitionLayout(old_layout, cmd);
|
|
||||||
other.TransitionLayout(other_old_layout, cmd);
|
|
||||||
|
|
||||||
kvfEndCommandBuffer(cmd);
|
|
||||||
|
|
||||||
SyncCPUBuffer(cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Texture::Resize(std::uint32_t width, std::uint32_t height)
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
Texture new_texture = Texture(CPUBuffer{}, width, height, m_format, m_is_multisampled, m_debug_name);
|
|
||||||
#else
|
|
||||||
Texture new_texture = Texture(CPUBuffer{}, width, height, m_format, m_is_multisampled, std::string_view{});
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(m_staging_buffer.has_value())
|
|
||||||
{
|
|
||||||
new_texture.OpenCPUBuffer();
|
|
||||||
new_texture.m_staging_buffer->CopyFrom(*m_staging_buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Suboptimal operations, should bake all of them in a single command buffer
|
|
||||||
new_texture.Clear(VK_NULL_HANDLE, Vec4f{ 0.f });
|
|
||||||
CopyTo(new_texture);
|
|
||||||
|
|
||||||
Swap(new_texture);
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
DebugLog("Texture: resized '%'", m_debug_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void Texture::Swap(Texture& texture) noexcept
|
|
||||||
{
|
|
||||||
MLX_PROFILE_FUNCTION();
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
std::swap(m_debug_name, texture.m_debug_name);
|
|
||||||
#endif
|
|
||||||
std::swap(m_allocation, texture.m_allocation);
|
|
||||||
std::swap(m_image, texture.m_image);
|
|
||||||
std::swap(m_image_view, texture.m_image_view);
|
|
||||||
std::swap(m_sampler, texture.m_sampler);
|
|
||||||
std::swap(m_format, texture.m_format);
|
|
||||||
std::swap(m_tiling, texture.m_tiling);
|
|
||||||
std::swap(m_layout, texture.m_layout);
|
|
||||||
std::swap(m_type, texture.m_type);
|
|
||||||
std::swap(m_width, texture.m_width);
|
|
||||||
std::swap(m_height, texture.m_height);
|
|
||||||
std::swap(m_is_multisampled, texture.m_is_multisampled);
|
|
||||||
|
|
||||||
if(m_staging_buffer.has_value() && texture.m_staging_buffer.has_value())
|
|
||||||
m_staging_buffer->Swap(*texture.m_staging_buffer);
|
|
||||||
else if(m_staging_buffer.has_value())
|
|
||||||
m_staging_buffer.reset();
|
|
||||||
else if(texture.m_staging_buffer.has_value())
|
|
||||||
texture.m_staging_buffer.reset();
|
|
||||||
|
|
||||||
m_has_been_modified = true;
|
|
||||||
texture.m_has_been_modified = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Texture* StbTextureLoad(const std::filesystem::path& file, int* w, int* h)
|
Texture* StbTextureLoad(const std::filesystem::path& file, int* w, int* h)
|
||||||
{
|
{
|
||||||
using namespace std::literals;
|
using namespace std::literals;
|
||||||
@@ -493,12 +392,12 @@ namespace mlx
|
|||||||
|
|
||||||
if(!std::filesystem::exists(file))
|
if(!std::filesystem::exists(file))
|
||||||
{
|
{
|
||||||
Error("Image loader: file not found %", file);
|
Error("Image: file not found %", file);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if(stbi_is_hdr(filename.c_str()))
|
if(stbi_is_hdr(filename.c_str()))
|
||||||
{
|
{
|
||||||
Error("Image loader: unsupported image format from % (HDR image)", file);
|
Error("Texture: unsupported image format from % (HDR image)", file);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -127,9 +127,6 @@ namespace mlx
|
|||||||
void GraphicPipeline::Destroy() noexcept
|
void GraphicPipeline::Destroy() noexcept
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
if(m_pipeline == VK_NULL_HANDLE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
p_vertex_shader.reset();
|
p_vertex_shader.reset();
|
||||||
p_fragment_shader.reset();
|
p_fragment_shader.reset();
|
||||||
for(auto fb : m_framebuffers)
|
for(auto fb : m_framebuffers)
|
||||||
|
|||||||
@@ -55,17 +55,17 @@ namespace mlx
|
|||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* VKAPI_PTR VulkanAllocationFunction(void*, std::size_t size, std::size_t alignment, VkSystemAllocationScope)
|
void* VulkanAllocationFunction(void*, std::size_t size, std::size_t alignment, VkSystemAllocationScope)
|
||||||
{
|
{
|
||||||
return MemManager::AlignedMalloc(alignment, size);
|
return MemManager::AlignedMalloc(alignment, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* VKAPI_PTR VulkanReallocationFunction(void*, void* ptr, std::size_t size, std::size_t alignment, VkSystemAllocationScope)
|
void* VulkanReallocationFunction(void*, void* ptr, std::size_t size, std::size_t alignment, VkSystemAllocationScope)
|
||||||
{
|
{
|
||||||
return MemManager::AlignedRealloc(ptr, alignment, size);
|
return MemManager::AlignedRealloc(ptr, alignment, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKAPI_PTR VulkanFreeFunction(void*, void* ptr)
|
void VulkanFreeFunction(void*, void* ptr)
|
||||||
{
|
{
|
||||||
MemManager::Free(ptr);
|
MemManager::Free(ptr);
|
||||||
}
|
}
|
||||||
@@ -87,41 +87,15 @@ namespace mlx
|
|||||||
kvfSetValidationErrorCallback(&ValidationErrorCallback);
|
kvfSetValidationErrorCallback(&ValidationErrorCallback);
|
||||||
kvfSetValidationWarningCallback(&WarningCallback);
|
kvfSetValidationWarningCallback(&WarningCallback);
|
||||||
|
|
||||||
std::vector<const char*> instance_extensions;
|
|
||||||
VkSurfaceKHR surface = VK_NULL_HANDLE;
|
|
||||||
std::unique_ptr<Window> window;
|
|
||||||
|
|
||||||
bool is_headless = std::getenv("MLX_HEADLESS_MODE") != nullptr;
|
|
||||||
|
|
||||||
if(!is_headless)
|
|
||||||
{
|
|
||||||
mlx_window_create_info info{};
|
mlx_window_create_info info{};
|
||||||
info.title = "";
|
info.title = "";
|
||||||
info.width = 1;
|
info.width = 1;
|
||||||
info.height = 1;
|
info.height = 1;
|
||||||
window = std::make_unique<Window>(&info, true);
|
Window window(&info, true);
|
||||||
instance_extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
|
std::vector<const char*> instance_extensions = window.GetRequiredVulkanInstanceExtentions();
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
#ifdef MLX_PLAT_MACOS
|
||||||
instance_extensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
|
||||||
instance_extensions.push_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
|
||||||
instance_extensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
|
||||||
instance_extensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
|
||||||
instance_extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
|
|
||||||
instance_extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
|
instance_extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
m_instance = kvfCreateInstance(instance_extensions.data(), instance_extensions.size());
|
m_instance = kvfCreateInstance(instance_extensions.data(), instance_extensions.size());
|
||||||
DebugLog("Vulkan: instance created");
|
DebugLog("Vulkan: instance created");
|
||||||
@@ -129,33 +103,24 @@ namespace mlx
|
|||||||
loader->LoadInstance(m_instance);
|
loader->LoadInstance(m_instance);
|
||||||
LoadKVFInstanceVulkanFunctionPointers();
|
LoadKVFInstanceVulkanFunctionPointers();
|
||||||
|
|
||||||
if(!is_headless)
|
VkSurfaceKHR surface = window.CreateVulkanSurface(m_instance);
|
||||||
{
|
|
||||||
surface = window->CreateVulkanSurface(m_instance);
|
|
||||||
m_physical_device = kvfPickGoodDefaultPhysicalDevice(m_instance, surface);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_physical_device = kvfPickGoodPhysicalDevice(m_instance, VK_NULL_HANDLE, nullptr, 0);
|
|
||||||
|
|
||||||
Verify(m_physical_device != VK_NULL_HANDLE, "Could not find a suitable physical device");
|
m_physical_device = kvfPickGoodDefaultPhysicalDevice(m_instance, surface);
|
||||||
|
|
||||||
// just for style
|
// just for style
|
||||||
VkPhysicalDeviceProperties props;
|
VkPhysicalDeviceProperties props;
|
||||||
vkGetPhysicalDeviceProperties(m_physical_device, &props);
|
vkGetPhysicalDeviceProperties(m_physical_device, &props);
|
||||||
DebugLog("Vulkan: physical device picked '%'", props.deviceName);
|
DebugLog("Vulkan: physical device picked '%'", props.deviceName);
|
||||||
|
|
||||||
std::vector<const char*> device_extensions;
|
const char* device_extensions[] = { VK_KHR_SWAPCHAIN_EXTENSION_NAME };
|
||||||
if(!is_headless)
|
|
||||||
device_extensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
|
||||||
VkPhysicalDeviceFeatures features{};
|
VkPhysicalDeviceFeatures features{};
|
||||||
vkGetPhysicalDeviceFeatures(m_physical_device, &features);
|
vkGetPhysicalDeviceFeatures(m_physical_device, &features);
|
||||||
m_device = kvfCreateDevice(m_physical_device, device_extensions.data(), device_extensions.size(), &features);
|
m_device = kvfCreateDevice(m_physical_device, device_extensions, sizeof(device_extensions) / sizeof(device_extensions[0]), &features);
|
||||||
DebugLog("Vulkan: logical device created");
|
DebugLog("Vulkan: logical device created");
|
||||||
|
|
||||||
loader->LoadDevice(m_device);
|
loader->LoadDevice(m_device);
|
||||||
LoadKVFDeviceVulkanFunctionPointers();
|
LoadKVFDeviceVulkanFunctionPointers();
|
||||||
|
|
||||||
if(surface != VK_NULL_HANDLE)
|
|
||||||
vkDestroySurfaceKHR(m_instance, surface, nullptr);
|
vkDestroySurfaceKHR(m_instance, surface, nullptr);
|
||||||
|
|
||||||
VkAllocationCallbacks callbacks;
|
VkAllocationCallbacks callbacks;
|
||||||
@@ -202,41 +167,6 @@ namespace mlx
|
|||||||
MLX_LOAD_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR);
|
MLX_LOAD_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR);
|
||||||
MLX_LOAD_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR);
|
MLX_LOAD_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR);
|
||||||
MLX_LOAD_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR);
|
MLX_LOAD_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR);
|
||||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
|
||||||
#ifdef VK_KHR_android_surface
|
|
||||||
MLX_LOAD_FUNCTION(vkCreateAndroidSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
|
||||||
#ifdef VK_KHR_xcb_surface
|
|
||||||
MLX_LOAD_FUNCTION(vkCreateXcbSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
|
||||||
#ifdef VK_KHR_xlib_surface
|
|
||||||
MLX_LOAD_FUNCTION(vkCreateXlibSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
|
||||||
#ifdef VK_KHR_wayland_surface
|
|
||||||
MLX_LOAD_FUNCTION(vkCreateWaylandSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
|
||||||
#ifdef VK_KHR_win32_surface
|
|
||||||
MLX_LOAD_FUNCTION(vkCreateWin32SurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
|
||||||
#ifdef VK_EXT_metal_surface
|
|
||||||
MLX_LOAD_FUNCTION(vkCreateMetalSurfaceEXT);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
kvfPassInstanceVulkanFunctionPointers(&pfns);
|
kvfPassInstanceVulkanFunctionPointers(&pfns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ namespace mlx
|
|||||||
};
|
};
|
||||||
EventBus::RegisterListener({ functor, "mlx_2d_render_pass_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
EventBus::RegisterListener({ functor, "mlx_2d_render_pass_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
||||||
|
|
||||||
p_viewer_data_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool(p_vertex_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Vertex).RequestDescriptorSet(p_vertex_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Vertex);
|
p_viewer_data_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool().RequestDescriptorSet(p_vertex_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Vertex);
|
||||||
p_texture_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool(p_fragment_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Fragment).RequestDescriptorSet(p_fragment_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Fragment);
|
p_texture_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool().RequestDescriptorSet(p_fragment_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Fragment);
|
||||||
|
|
||||||
p_viewer_data_buffer = std::make_shared<UniformBuffer>();
|
p_viewer_data_buffer = std::make_shared<UniformBuffer>();
|
||||||
p_viewer_data_buffer->Init(sizeof(ViewerData), "mlx_2d_pass_viewer_data");
|
p_viewer_data_buffer->Init(sizeof(ViewerData), "mlx_2d_pass_viewer_data");
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ namespace mlx
|
|||||||
};
|
};
|
||||||
EventBus::RegisterListener({ functor, "mlx_final_pass_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
EventBus::RegisterListener({ functor, "mlx_final_pass_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
||||||
|
|
||||||
p_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool(p_fragment_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Fragment).RequestDescriptorSet(p_fragment_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Fragment);
|
p_set = RenderCore::Get().GetDescriptorPoolManager().GetAvailablePool().RequestDescriptorSet(p_fragment_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FinalPass::Pass([[maybe_unused]] Scene& scene, Renderer& renderer, Texture& render_target, NonOwningPtr<class Texture> final_target)
|
void FinalPass::Pass([[maybe_unused]] Scene& scene, Renderer& renderer, Texture& render_target, NonOwningPtr<class Texture> final_target)
|
||||||
|
|||||||
@@ -20,42 +20,29 @@ namespace mlx
|
|||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
p_window = window;
|
p_window = window;
|
||||||
m_swapchain.Init(p_window);
|
m_swapchain.Init(p_window);
|
||||||
Init(NonOwningPtr<Texture>{ nullptr });
|
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
||||||
|
{
|
||||||
|
m_image_available_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
||||||
|
DebugLog("Vulkan: image available semaphore created");
|
||||||
|
m_render_finished_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
||||||
|
DebugLog("Vulkan: render finished semaphore created");
|
||||||
|
m_cmd_buffers[i] = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||||
|
DebugLog("Vulkan: command buffer created");
|
||||||
|
m_cmd_fences[i] = kvfCreateFence(RenderCore::Get().GetDevice());
|
||||||
|
DebugLog("Vulkan: fence created");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::Init(NonOwningPtr<Texture> render_target)
|
void Renderer::Init(NonOwningPtr<Texture> render_target)
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
std::function<void(const EventBase&)> functor = [this](const EventBase& event)
|
|
||||||
{
|
|
||||||
if(event.What() == Event::ResizeEventCode)
|
|
||||||
{
|
|
||||||
for(std::size_t i = 0; i < m_render_finished_semaphores.size(); i++)
|
|
||||||
{
|
|
||||||
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]);
|
|
||||||
DebugLog("Vulkan: render finished semaphore destroyed");
|
|
||||||
}
|
|
||||||
m_render_finished_semaphores.clear();
|
|
||||||
for(std::size_t i = 0; i < (p_window ? m_swapchain.GetImagesCount() : 1); i++)
|
|
||||||
{
|
|
||||||
m_render_finished_semaphores.push_back(kvfCreateSemaphore(RenderCore::Get().GetDevice()));
|
|
||||||
DebugLog("Vulkan: render finished semaphore created");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
EventBus::RegisterListener({ functor, "mlx_renderer_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
|
||||||
|
|
||||||
if(render_target)
|
|
||||||
p_render_target = render_target;
|
p_render_target = render_target;
|
||||||
for(std::size_t i = 0; i < (p_window ? m_swapchain.GetImagesCount() : 1); i++)
|
|
||||||
{
|
|
||||||
m_render_finished_semaphores.push_back(kvfCreateSemaphore(RenderCore::Get().GetDevice()));
|
|
||||||
DebugLog("Vulkan: render finished semaphore created");
|
|
||||||
}
|
|
||||||
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
||||||
{
|
{
|
||||||
m_image_available_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
m_image_available_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
||||||
DebugLog("Vulkan: image available semaphore created");
|
DebugLog("Vulkan: image available semaphore created");
|
||||||
|
m_render_finished_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
||||||
|
DebugLog("Vulkan: render finished semaphore created");
|
||||||
m_cmd_buffers[i] = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
m_cmd_buffers[i] = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||||
DebugLog("Vulkan: command buffer created");
|
DebugLog("Vulkan: command buffer created");
|
||||||
m_cmd_fences[i] = kvfCreateFence(RenderCore::Get().GetDevice());
|
m_cmd_fences[i] = kvfCreateFence(RenderCore::Get().GetDevice());
|
||||||
@@ -79,15 +66,14 @@ namespace mlx
|
|||||||
void Renderer::EndFrame()
|
void Renderer::EndFrame()
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
std::size_t render_finished_index = (p_window ? m_swapchain.GetImageIndex() : 0);
|
|
||||||
VkPipelineStageFlags wait_stages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
|
VkPipelineStageFlags wait_stages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
|
||||||
kvfEndCommandBuffer(m_cmd_buffers[m_current_frame_index]);
|
kvfEndCommandBuffer(m_cmd_buffers[m_current_frame_index]);
|
||||||
if(p_window)
|
if(p_window)
|
||||||
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, m_render_finished_semaphores[render_finished_index], m_image_available_semaphores[m_current_frame_index], m_cmd_fences[m_current_frame_index], wait_stages);
|
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, m_render_finished_semaphores[m_current_frame_index], m_image_available_semaphores[m_current_frame_index], m_cmd_fences[m_current_frame_index], wait_stages);
|
||||||
else
|
else
|
||||||
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, VK_NULL_HANDLE, VK_NULL_HANDLE, m_cmd_fences[m_current_frame_index], wait_stages);
|
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, VK_NULL_HANDLE, VK_NULL_HANDLE, m_cmd_fences[m_current_frame_index], wait_stages);
|
||||||
if(p_window)
|
if(p_window)
|
||||||
m_swapchain.Present(m_render_finished_semaphores[render_finished_index]);
|
m_swapchain.Present(m_render_finished_semaphores[m_current_frame_index]);
|
||||||
m_current_frame_index = (m_current_frame_index + 1) % MAX_FRAMES_IN_FLIGHT;
|
m_current_frame_index = (m_current_frame_index + 1) % MAX_FRAMES_IN_FLIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,16 +81,12 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
RenderCore::Get().WaitDeviceIdle();
|
RenderCore::Get().WaitDeviceIdle();
|
||||||
for(std::size_t i = 0; i < m_render_finished_semaphores.size(); i++)
|
|
||||||
{
|
|
||||||
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]);
|
|
||||||
DebugLog("Vulkan: render finished semaphore destroyed");
|
|
||||||
}
|
|
||||||
m_render_finished_semaphores.clear();
|
|
||||||
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
||||||
{
|
{
|
||||||
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_image_available_semaphores[i]);
|
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_image_available_semaphores[i]);
|
||||||
DebugLog("Vulkan: image available semaphore destroyed");
|
DebugLog("Vulkan: image available semaphore destroyed");
|
||||||
|
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]);
|
||||||
|
DebugLog("Vulkan: render finished semaphore destroyed");
|
||||||
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[i]);
|
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[i]);
|
||||||
DebugLog("Vulkan: command buffer destroyed");
|
DebugLog("Vulkan: command buffer destroyed");
|
||||||
kvfDestroyFence(RenderCore::Get().GetDevice(), m_cmd_fences[i]);
|
kvfDestroyFence(RenderCore::Get().GetDevice(), m_cmd_fences[i]);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#include "kvf.h"
|
||||||
#include <PreCompiled.h>
|
#include <PreCompiled.h>
|
||||||
|
|
||||||
#include <Platform/Window.h>
|
#include <Platform/Window.h>
|
||||||
@@ -16,158 +17,10 @@ namespace mlx
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string VulkanFormatName(VkFormat format)
|
|
||||||
{
|
|
||||||
#define STRINGIFY(x) case x: return #x
|
|
||||||
|
|
||||||
switch(format)
|
|
||||||
{
|
|
||||||
STRINGIFY(VK_FORMAT_UNDEFINED);
|
|
||||||
STRINGIFY(VK_FORMAT_R4G4_UNORM_PACK8);
|
|
||||||
STRINGIFY(VK_FORMAT_R4G4B4A4_UNORM_PACK16);
|
|
||||||
STRINGIFY(VK_FORMAT_B4G4R4A4_UNORM_PACK16);
|
|
||||||
STRINGIFY(VK_FORMAT_R5G6B5_UNORM_PACK16);
|
|
||||||
STRINGIFY(VK_FORMAT_B5G6R5_UNORM_PACK16);
|
|
||||||
STRINGIFY(VK_FORMAT_R5G5B5A1_UNORM_PACK16);
|
|
||||||
STRINGIFY(VK_FORMAT_B5G5R5A1_UNORM_PACK16);
|
|
||||||
STRINGIFY(VK_FORMAT_A1R5G5B5_UNORM_PACK16);
|
|
||||||
STRINGIFY(VK_FORMAT_R8_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8_SRGB);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8_SRGB);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8_SRGB);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8_SRGB);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8A8_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8A8_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8A8_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8A8_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8A8_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8A8_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R8G8B8A8_SRGB);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8A8_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8A8_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8A8_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8A8_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8A8_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8A8_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_B8G8R8A8_SRGB);
|
|
||||||
STRINGIFY(VK_FORMAT_A8B8G8R8_UNORM_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A8B8G8R8_SNORM_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A8B8G8R8_USCALED_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A8B8G8R8_SSCALED_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A8B8G8R8_UINT_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A8B8G8R8_SINT_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A8B8G8R8_SRGB_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2R10G10B10_UNORM_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2R10G10B10_SNORM_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2R10G10B10_USCALED_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2R10G10B10_SSCALED_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2R10G10B10_UINT_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2R10G10B10_SINT_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2B10G10R10_UNORM_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2B10G10R10_SNORM_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2B10G10R10_USCALED_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2B10G10R10_SSCALED_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2B10G10R10_UINT_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_A2B10G10R10_SINT_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_R16_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16A16_UNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16A16_SNORM);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16A16_USCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16A16_SSCALED);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16A16_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16A16_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R16G16B16A16_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32B32_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32B32_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32B32_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32B32A32_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32B32A32_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R32G32B32A32_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64B64_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64B64_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64B64_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64B64A64_UINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64B64A64_SINT);
|
|
||||||
STRINGIFY(VK_FORMAT_R64G64B64A64_SFLOAT);
|
|
||||||
STRINGIFY(VK_FORMAT_B10G11R11_UFLOAT_PACK32);
|
|
||||||
STRINGIFY(VK_FORMAT_E5B9G9R9_UFLOAT_PACK32);
|
|
||||||
|
|
||||||
default: return "Unknown format";
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef STRINGIFY
|
|
||||||
|
|
||||||
return "Unknown format"; // To avoid warnings
|
|
||||||
}
|
|
||||||
|
|
||||||
void Swapchain::Init(NonOwningPtr<Window> window)
|
void Swapchain::Init(NonOwningPtr<Window> window)
|
||||||
{
|
{
|
||||||
p_window = window;
|
p_window = window;
|
||||||
|
|
||||||
std::function<void(const EventBase&)> functor = [this](const EventBase& event)
|
|
||||||
{
|
|
||||||
if(event.What() == Event::ResizeEventCode && !m_resize)
|
|
||||||
m_resize = true;
|
|
||||||
};
|
|
||||||
EventBus::RegisterListener({ functor, "mlx_swapchain_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
|
||||||
|
|
||||||
CreateSwapchain();
|
CreateSwapchain();
|
||||||
m_resize = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Swapchain::AquireFrame(VkSemaphore signal)
|
void Swapchain::AquireFrame(VkSemaphore signal)
|
||||||
@@ -178,7 +31,6 @@ namespace mlx
|
|||||||
Destroy();
|
Destroy();
|
||||||
CreateSwapchain();
|
CreateSwapchain();
|
||||||
EventBus::SendBroadcast(Internal::ResizeEventBroadcast{});
|
EventBus::SendBroadcast(Internal::ResizeEventBroadcast{});
|
||||||
m_resize = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VkResult result = RenderCore::Get().vkAcquireNextImageKHR(RenderCore::Get().GetDevice(), m_swapchain, UINT64_MAX, signal, VK_NULL_HANDLE, &m_current_image_index);
|
VkResult result = RenderCore::Get().vkAcquireNextImageKHR(RenderCore::Get().GetDevice(), m_swapchain, UINT64_MAX, signal, VK_NULL_HANDLE, &m_current_image_index);
|
||||||
@@ -228,7 +80,7 @@ namespace mlx
|
|||||||
|
|
||||||
m_surface = p_window->CreateVulkanSurface(RenderCore::Get().GetInstance());
|
m_surface = p_window->CreateVulkanSurface(RenderCore::Get().GetInstance());
|
||||||
DebugLog("Vulkan: surface created");
|
DebugLog("Vulkan: surface created");
|
||||||
m_swapchain = kvfCreateSwapchainKHR(RenderCore::Get().GetDevice(), RenderCore::Get().GetPhysicalDevice(), m_surface, extent, m_swapchain, false, true);
|
m_swapchain = kvfCreateSwapchainKHR(RenderCore::Get().GetDevice(), RenderCore::Get().GetPhysicalDevice(), m_surface, extent, m_swapchain, false);
|
||||||
|
|
||||||
m_images_count = kvfGetSwapchainImagesCount(m_swapchain);
|
m_images_count = kvfGetSwapchainImagesCount(m_swapchain);
|
||||||
m_min_images_count = kvfGetSwapchainMinImagesCount(m_swapchain);
|
m_min_images_count = kvfGetSwapchainMinImagesCount(m_swapchain);
|
||||||
@@ -238,13 +90,12 @@ namespace mlx
|
|||||||
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||||
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
||||||
extent = kvfGetSwapchainImagesSize(m_swapchain); // fix the extent
|
extent = kvfGetSwapchainImagesSize(m_swapchain); // fix the extent
|
||||||
VkFormat format = kvfGetSwapchainImagesFormat(m_swapchain);
|
|
||||||
for(std::size_t i = 0; i < m_images_count; i++)
|
for(std::size_t i = 0; i < m_images_count; i++)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
m_swapchain_images[i].Init(tmp[i], format, extent.width, extent.height, VK_IMAGE_LAYOUT_UNDEFINED, "mlx_swapchain_image_" + std::to_string(i));
|
m_swapchain_images[i].Init(tmp[i], kvfGetSwapchainImagesFormat(m_swapchain), extent.width, extent.height, VK_IMAGE_LAYOUT_UNDEFINED, "mlx_swapchain_image_" + std::to_string(i));
|
||||||
#else
|
#else
|
||||||
m_swapchain_images[i].Init(tmp[i], format, extent.width, extent.height, VK_IMAGE_LAYOUT_UNDEFINED, {});
|
m_swapchain_images[i].Init(tmp[i], kvfGetSwapchainImagesFormat(m_swapchain), extent.width, extent.height, VK_IMAGE_LAYOUT_UNDEFINED, {});
|
||||||
#endif
|
#endif
|
||||||
m_swapchain_images[i].TransitionLayout(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, cmd);
|
m_swapchain_images[i].TransitionLayout(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, cmd);
|
||||||
m_swapchain_images[i].CreateImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
|
m_swapchain_images[i].CreateImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
|
||||||
@@ -254,6 +105,7 @@ namespace mlx
|
|||||||
kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence);
|
kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence);
|
||||||
kvfDestroyFence(RenderCore::Get().GetDevice(), fence);
|
kvfDestroyFence(RenderCore::Get().GetDevice(), fence);
|
||||||
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), cmd);
|
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), cmd);
|
||||||
DebugLog("Vulkan: swapchain created with format %", VulkanFormatName(format));
|
m_resize = false;
|
||||||
|
DebugLog("Vulkan: swapchain created");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,10 +28,6 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
static inline PFN_vkVoidFunction vkGetInstanceProcAddrStub(Handle context, const char* name)
|
static inline PFN_vkVoidFunction vkGetInstanceProcAddrStub(Handle context, const char* name)
|
||||||
{
|
{
|
||||||
bool is_headless = std::getenv("MLX_HEADLESS_MODE") != nullptr;
|
|
||||||
if(is_headless && std::string_view(name).find("KHR") != std::string_view::npos)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
PFN_vkVoidFunction function = RenderCore::Get().vkGetInstanceProcAddr(static_cast<VkInstance>(context), name);
|
PFN_vkVoidFunction function = RenderCore::Get().vkGetInstanceProcAddr(static_cast<VkInstance>(context), name);
|
||||||
if(!function)
|
if(!function)
|
||||||
FatalError("Vulkan Loader: could not load '%'", name);
|
FatalError("Vulkan Loader: could not load '%'", name);
|
||||||
@@ -41,10 +37,6 @@ namespace mlx
|
|||||||
|
|
||||||
static inline PFN_vkVoidFunction vkGetDeviceProcAddrStub(Handle context, const char* name)
|
static inline PFN_vkVoidFunction vkGetDeviceProcAddrStub(Handle context, const char* name)
|
||||||
{
|
{
|
||||||
bool is_headless = std::getenv("MLX_HEADLESS_MODE") != nullptr;
|
|
||||||
if(is_headless && std::string_view(name).find("KHR") != std::string_view::npos)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
PFN_vkVoidFunction function = RenderCore::Get().vkGetDeviceProcAddr(static_cast<VkDevice>(context), name);
|
PFN_vkVoidFunction function = RenderCore::Get().vkGetDeviceProcAddr(static_cast<VkDevice>(context), name);
|
||||||
if(!function)
|
if(!function)
|
||||||
FatalError("Vulkan Loader: could not load '%'", name);
|
FatalError("Vulkan Loader: could not load '%'", name);
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ rm vulkan-headers.zip
|
|||||||
|
|
||||||
# Update KVF
|
# Update KVF
|
||||||
rm -f ../third_party/kvf.h
|
rm -f ../third_party/kvf.h
|
||||||
git clone https://git.kbz8.me/kbz_8/KVF.git ../third_party/KVF/
|
git clone https://github.com/Kbz-8/KVF.git ../third_party/KVF/
|
||||||
mv ../third_party/KVF/kvf.h ../third_party/kvf.h
|
mv ../third_party/KVF/kvf.h ../third_party/kvf.h
|
||||||
rm -rf ../third_party/KVF
|
rm -rf ../third_party/KVF
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
[wrap-file]
|
|
||||||
directory = SDL2-2.32.8
|
|
||||||
source_url = https://github.com/libsdl-org/SDL/releases/download/release-2.32.8/SDL2-2.32.8.tar.gz
|
|
||||||
source_filename = SDL2-2.32.8.tar.gz
|
|
||||||
source_hash = 0ca83e9c9b31e18288c7ec811108e58bac1f1bb5ec6577ad386830eac51c787e
|
|
||||||
patch_filename = sdl2_2.32.8-1_patch.zip
|
|
||||||
patch_url = https://wrapdb.mesonbuild.com/v2/sdl2_2.32.8-1/get_patch
|
|
||||||
patch_hash = 5df17ea39ca418826db20e96bd821fa52b5718dac64b6225119fb6588c2744f0
|
|
||||||
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/sdl2_2.32.8-1/SDL2-2.32.8.tar.gz
|
|
||||||
wrapdb_version = 2.32.8-1
|
|
||||||
|
|
||||||
[provide]
|
|
||||||
sdl2 = sdl2_dep
|
|
||||||
sdl2main = sdl2main_dep
|
|
||||||
sdl2_test = sdl2_test_dep
|
|
||||||
Vendored
+20
-308
@@ -1,7 +1,7 @@
|
|||||||
/***
|
/***
|
||||||
* MIT License
|
* MIT License
|
||||||
*
|
*
|
||||||
* Copyright (c) 2023-2025 kbz_8
|
* Copyright (c) 2023-2024 kbz_8
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -51,50 +51,10 @@
|
|||||||
#ifndef KBZ_8_VULKAN_FRAMEWORK_H
|
#ifndef KBZ_8_VULKAN_FRAMEWORK_H
|
||||||
#define KBZ_8_VULKAN_FRAMEWORK_H
|
#define KBZ_8_VULKAN_FRAMEWORK_H
|
||||||
|
|
||||||
#if defined(KVF_IMPL_VK_NO_PROTOTYPES) && !defined(VK_NO_PROTOTYPES)
|
#ifdef KVF_IMPL_VK_NO_PROTOTYPES
|
||||||
#define VK_NO_PROTOTYPES
|
#define VK_NO_PROTOTYPES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef KVF_NO_KHR
|
|
||||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
|
||||||
#include <vulkan/vulkan_android.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
|
||||||
#include <vulkan/vulkan_wayland.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
|
||||||
typedef struct HINSTANCE__* HINSTANCE;
|
|
||||||
typedef struct HWND__* HWND;
|
|
||||||
typedef struct HMONITOR__* HMONITOR;
|
|
||||||
typedef void* HANDLE;
|
|
||||||
typedef /*_Null_terminated_*/ const wchar_t* LPCWSTR;
|
|
||||||
typedef unsigned long DWORD;
|
|
||||||
typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES;
|
|
||||||
#include <vulkan/vulkan_win32.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
|
||||||
struct xcb_connection_t;
|
|
||||||
typedef uint32_t xcb_window_t;
|
|
||||||
typedef uint32_t xcb_visualid_t;
|
|
||||||
#include <vulkan/vulkan_xcb.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
|
||||||
#include <vulkan/vulkan_metal.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
|
||||||
typedef struct _XDisplay Display;
|
|
||||||
typedef unsigned long XID;
|
|
||||||
typedef XID Window;
|
|
||||||
typedef unsigned long VisualID;
|
|
||||||
#include <vulkan/vulkan_xlib.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <vulkan/vulkan_core.h>
|
#include <vulkan/vulkan_core.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@@ -122,18 +82,6 @@ typedef enum
|
|||||||
KVF_IMAGE_OTHER = 4,
|
KVF_IMAGE_OTHER = 4,
|
||||||
} KvfImageType;
|
} KvfImageType;
|
||||||
|
|
||||||
#ifndef KVF_NO_KHR
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
KVF_SURFACE_ANDROID = 0,
|
|
||||||
KVF_SURFACE_XLIB = 1,
|
|
||||||
KVF_SURFACE_XCB = 2,
|
|
||||||
KVF_SURFACE_WAYLAND = 3,
|
|
||||||
KVF_SURFACE_WINDOWS = 4,
|
|
||||||
KVF_SURFACE_METAL = 5,
|
|
||||||
} KvfSurfaceType;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef void (*KvfErrorCallback)(const char* message);
|
typedef void (*KvfErrorCallback)(const char* message);
|
||||||
|
|
||||||
#ifdef KVF_IMPL_VK_NO_PROTOTYPES
|
#ifdef KVF_IMPL_VK_NO_PROTOTYPES
|
||||||
@@ -156,7 +104,6 @@ void kvfSetValidationWarningCallback(KvfErrorCallback callback);
|
|||||||
void kvfAddLayer(const char* layer);
|
void kvfAddLayer(const char* layer);
|
||||||
|
|
||||||
VkInstance kvfCreateInstance(const char** extensions_enabled, uint32_t extensions_count);
|
VkInstance kvfCreateInstance(const char** extensions_enabled, uint32_t extensions_count);
|
||||||
VkInstance kvfCreateInstanceNext(const char** extensions_enabled, uint32_t extensions_count, void* p_next);
|
|
||||||
void kvfDestroyInstance(VkInstance instance);
|
void kvfDestroyInstance(VkInstance instance);
|
||||||
|
|
||||||
// If surfaces given to theses functions are VK_NULL_HANDLE no present queues will be searched and thus kvfQueuePresentKHR will not work
|
// If surfaces given to theses functions are VK_NULL_HANDLE no present queues will be searched and thus kvfQueuePresentKHR will not work
|
||||||
@@ -194,45 +141,16 @@ VkSemaphore kvfCreateSemaphore(VkDevice device);
|
|||||||
void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore);
|
void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore);
|
||||||
|
|
||||||
#ifndef KVF_NO_KHR
|
#ifndef KVF_NO_KHR
|
||||||
VkSwapchainKHR kvfCreateSwapchainKHR(VkDevice device, VkPhysicalDevice physical, VkSurfaceKHR surface, VkExtent2D extent, VkSwapchainKHR old_swapchain, bool try_vsync, bool srgb);
|
VkSwapchainKHR kvfCreateSwapchainKHR(VkDevice device, VkPhysicalDevice physical, VkSurfaceKHR surface, VkExtent2D extent, VkSwapchainKHR old_swapchain, bool try_vsync);
|
||||||
VkFormat kvfGetSwapchainImagesFormat(VkSwapchainKHR swapchain);
|
VkFormat kvfGetSwapchainImagesFormat(VkSwapchainKHR swapchain);
|
||||||
uint32_t kvfGetSwapchainImagesCount(VkSwapchainKHR swapchain);
|
uint32_t kvfGetSwapchainImagesCount(VkSwapchainKHR swapchain);
|
||||||
uint32_t kvfGetSwapchainMinImagesCount(VkSwapchainKHR swapchain);
|
uint32_t kvfGetSwapchainMinImagesCount(VkSwapchainKHR swapchain);
|
||||||
VkExtent2D kvfGetSwapchainImagesSize(VkSwapchainKHR swapchain);
|
VkExtent2D kvfGetSwapchainImagesSize(VkSwapchainKHR swapchain);
|
||||||
void kvfDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain);
|
void kvfDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain);
|
||||||
|
|
||||||
/**
|
|
||||||
* For Windows:
|
|
||||||
* - instance_handle -> HINSTANCE
|
|
||||||
* - window_handle -> HWND window handle
|
|
||||||
*
|
|
||||||
* For Wayland:
|
|
||||||
* - instance_handle -> wl_display
|
|
||||||
* - window_handle -> wl_surface
|
|
||||||
*
|
|
||||||
* For XLIB:
|
|
||||||
* - instance_handle -> Display
|
|
||||||
* - window_handle -> Window
|
|
||||||
*
|
|
||||||
* For XCB:
|
|
||||||
* - instance_handle -> xcb_connection_t
|
|
||||||
* - window_handle -> xcb_window_t
|
|
||||||
*
|
|
||||||
* For Metal:
|
|
||||||
* - instance_handle -> ignored
|
|
||||||
* - window_handle -> CAMetalLayer
|
|
||||||
*
|
|
||||||
* For Android:
|
|
||||||
* - instance_handle -> ignored
|
|
||||||
* - window_handle -> ANativeWindow
|
|
||||||
*/
|
|
||||||
VkSurfaceKHR kvfCreateSurfaceKHR(VkInstance instance, KvfSurfaceType type, void* instance_handle, void* window_handle);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VkImage kvfCreateImage(VkDevice device, uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, KvfImageType type);
|
VkImage kvfCreateImage(VkDevice device, uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, KvfImageType type);
|
||||||
void kvfCopyImageToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkImage src, size_t buffer_offset, VkImageAspectFlagBits aspect, VkExtent3D extent);
|
void kvfCopyImageToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkImage src, size_t buffer_offset, VkImageAspectFlagBits aspect, VkExtent3D extent);
|
||||||
void kvfCopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImageLayout src_layout, VkImage dst, VkImageLayout dst_layout, uint32_t count, const VkImageCopy* regions);
|
|
||||||
|
|
||||||
void kvfDestroyImage(VkDevice device, VkImage image);
|
void kvfDestroyImage(VkDevice device, VkImage image);
|
||||||
VkImageView kvfCreateImageView(VkDevice device, VkImage image, VkFormat format, VkImageViewType type, VkImageAspectFlags aspect, int layer_count);
|
VkImageView kvfCreateImageView(VkDevice device, VkImage image, VkFormat format, VkImageViewType type, VkImageAspectFlags aspect, int layer_count);
|
||||||
void kvfDestroyImageView(VkDevice device, VkImageView image_view);
|
void kvfDestroyImageView(VkDevice device, VkImageView image_view);
|
||||||
@@ -241,7 +159,7 @@ VkSampler kvfCreateSampler(VkDevice device, VkFilter filters, VkSamplerAddressMo
|
|||||||
void kvfDestroySampler(VkDevice device, VkSampler sampler);
|
void kvfDestroySampler(VkDevice device, VkSampler sampler);
|
||||||
|
|
||||||
VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize size);
|
VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize size);
|
||||||
void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size, size_t src_offset, size_t dst_offset);
|
void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size);
|
||||||
void kvfCopyBufferToImage(VkCommandBuffer cmd, VkImage dst, VkBuffer src, size_t buffer_offset, VkImageAspectFlagBits aspect, VkExtent3D extent);
|
void kvfCopyBufferToImage(VkCommandBuffer cmd, VkImage dst, VkBuffer src, size_t buffer_offset, VkImageAspectFlagBits aspect, VkExtent3D extent);
|
||||||
void kvfDestroyBuffer(VkDevice device, VkBuffer buffer);
|
void kvfDestroyBuffer(VkDevice device, VkBuffer buffer);
|
||||||
|
|
||||||
@@ -317,7 +235,6 @@ VkPipeline kvfCreateGraphicsPipeline(VkDevice device, VkPipelineCache cache, VkP
|
|||||||
void kvfDestroyPipeline(VkDevice device, VkPipeline pipeline);
|
void kvfDestroyPipeline(VkDevice device, VkPipeline pipeline);
|
||||||
|
|
||||||
void kvfCheckVk(VkResult result);
|
void kvfCheckVk(VkResult result);
|
||||||
int32_t kvfFindMemoryType(VkPhysicalDevice physical_device, uint32_t type_filter, VkMemoryPropertyFlags properties);
|
|
||||||
|
|
||||||
#ifdef KVF_IMPL_VK_NO_PROTOTYPES
|
#ifdef KVF_IMPL_VK_NO_PROTOTYPES
|
||||||
#ifdef KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE
|
#ifdef KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE
|
||||||
@@ -351,42 +268,6 @@ int32_t kvfFindMemoryType(VkPhysicalDevice physical_device, uint32_t type_filter
|
|||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkGetPhysicalDeviceSurfaceFormatsKHR);
|
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkGetPhysicalDeviceSurfaceFormatsKHR);
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkGetPhysicalDeviceSurfacePresentModesKHR);
|
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkGetPhysicalDeviceSurfacePresentModesKHR);
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkGetPhysicalDeviceSurfaceSupportKHR);
|
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkGetPhysicalDeviceSurfaceSupportKHR);
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
|
||||||
#ifdef VK_KHR_android_surface
|
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkCreateAndroidSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
|
||||||
#ifdef VK_KHR_xcb_surface
|
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkCreateXcbSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
|
||||||
#ifdef VK_KHR_xlib_surface
|
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkCreateXlibSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
|
||||||
#ifdef VK_KHR_wayland_surface
|
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkCreateWaylandSurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
|
||||||
#ifdef VK_KHR_win32_surface
|
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkCreateWin32SurfaceKHR);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
|
||||||
#ifdef VK_EXT_metal_surface
|
|
||||||
KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE(vkCreateMetalSurfaceEXT);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -493,12 +374,12 @@ int32_t kvfFindMemoryType(VkPhysicalDevice physical_device, uint32_t type_filter
|
|||||||
#ifdef KVF_DESCRIPTOR_POOL_CAPACITY
|
#ifdef KVF_DESCRIPTOR_POOL_CAPACITY
|
||||||
#undef KVF_DESCRIPTOR_POOL_CAPACITY
|
#undef KVF_DESCRIPTOR_POOL_CAPACITY
|
||||||
#endif
|
#endif
|
||||||
#define KVF_DESCRIPTOR_POOL_CAPACITY 1024
|
#define KVF_DESCRIPTOR_POOL_CAPACITY 512
|
||||||
|
|
||||||
#ifdef KVF_COMMAND_POOL_CAPACITY
|
#ifdef KVF_COMMAND_POOL_CAPACITY
|
||||||
#undef KVF_COMMAND_POOL_CAPACITY
|
#undef KVF_COMMAND_POOL_CAPACITY
|
||||||
#endif
|
#endif
|
||||||
#define KVF_COMMAND_POOL_CAPACITY 1024
|
#define KVF_COMMAND_POOL_CAPACITY 512
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -638,19 +519,6 @@ void kvfCheckVk(VkResult result)
|
|||||||
__kvfCheckVk(result);
|
__kvfCheckVk(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t kvfFindMemoryType(VkPhysicalDevice physical_device, uint32_t type_filter, VkMemoryPropertyFlags properties)
|
|
||||||
{
|
|
||||||
VkPhysicalDeviceMemoryProperties mem_properties;
|
|
||||||
KVF_GET_INSTANCE_FUNCTION(vkGetPhysicalDeviceMemoryProperties)(physical_device, &mem_properties);
|
|
||||||
|
|
||||||
for(int32_t i = 0; i < (int32_t)mem_properties.memoryTypeCount; i++)
|
|
||||||
{
|
|
||||||
if((type_filter & (1 << i)) && (mem_properties.memoryTypes[i].propertyFlags & properties) == properties)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void __kvfAddDeviceToArray(VkPhysicalDevice device, int32_t graphics_queue, int32_t present_queue, int32_t compute_queue)
|
void __kvfAddDeviceToArray(VkPhysicalDevice device, int32_t graphics_queue, int32_t present_queue, int32_t compute_queue)
|
||||||
{
|
{
|
||||||
KVF_ASSERT(device != VK_NULL_HANDLE);
|
KVF_ASSERT(device != VK_NULL_HANDLE);
|
||||||
@@ -692,7 +560,6 @@ void __kvfCompleteDevice(VkPhysicalDevice physical, VkDevice device)
|
|||||||
|
|
||||||
kvf_device->device = device;
|
kvf_device->device = device;
|
||||||
kvf_device->cmd_pool = pool;
|
kvf_device->cmd_pool = pool;
|
||||||
kvf_device->callbacks = NULL;
|
|
||||||
kvf_device->sets_pools = NULL;
|
kvf_device->sets_pools = NULL;
|
||||||
kvf_device->sets_pools_size = 0;
|
kvf_device->sets_pools_size = 0;
|
||||||
kvf_device->cmd_buffers_size = 0;
|
kvf_device->cmd_buffers_size = 0;
|
||||||
@@ -1283,7 +1150,7 @@ const char* kvfVerbaliseVkResult(VkResult result)
|
|||||||
case VK_ERROR_OUT_OF_DATE_KHR: return "A surface has changed in such a way that it is no longer compatible with the swapchain";
|
case VK_ERROR_OUT_OF_DATE_KHR: return "A surface has changed in such a way that it is no longer compatible with the swapchain";
|
||||||
case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return "The display used by a swapchain does not use the same presentable image layout";
|
case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return "The display used by a swapchain does not use the same presentable image layout";
|
||||||
case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: return "The requested window is already connected to a VkSurfaceKHR, or to some other non-Vulkan API";
|
case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: return "The requested window is already connected to a VkSurfaceKHR, or to some other non-Vulkan API";
|
||||||
case VK_ERROR_VALIDATION_FAILED_EXT: return "A command failed because invalid usage was detected by the implementation or a validation layer.";
|
case VK_ERROR_VALIDATION_FAILED_EXT: return "A validation layer found an error";
|
||||||
|
|
||||||
default: return "Unknown Vulkan error";
|
default: return "Unknown Vulkan error";
|
||||||
}
|
}
|
||||||
@@ -1427,11 +1294,6 @@ void kvfAddLayer(const char* layer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
VkInstance kvfCreateInstance(const char** extensions_enabled, uint32_t extensions_count)
|
VkInstance kvfCreateInstance(const char** extensions_enabled, uint32_t extensions_count)
|
||||||
{
|
|
||||||
return kvfCreateInstanceNext(extensions_enabled, extensions_count, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
VkInstance kvfCreateInstanceNext(const char** extensions_enabled, uint32_t extensions_count, void* p_next)
|
|
||||||
{
|
{
|
||||||
VkInstance instance = VK_NULL_HANDLE;
|
VkInstance instance = VK_NULL_HANDLE;
|
||||||
|
|
||||||
@@ -1442,7 +1304,7 @@ VkInstance kvfCreateInstanceNext(const char** extensions_enabled, uint32_t exten
|
|||||||
create_info.ppEnabledExtensionNames = extensions_enabled;
|
create_info.ppEnabledExtensionNames = extensions_enabled;
|
||||||
create_info.enabledLayerCount = 0;
|
create_info.enabledLayerCount = 0;
|
||||||
create_info.ppEnabledLayerNames = NULL;
|
create_info.ppEnabledLayerNames = NULL;
|
||||||
create_info.pNext = p_next;
|
create_info.pNext = NULL;
|
||||||
#if defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_METAL_EXT)
|
#if defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_METAL_EXT)
|
||||||
create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
|
create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
|
||||||
#else
|
#else
|
||||||
@@ -1461,8 +1323,6 @@ VkInstance kvfCreateInstanceNext(const char** extensions_enabled, uint32_t exten
|
|||||||
memcpy(new_extension_set, extensions_enabled, sizeof(char*) * extensions_count);
|
memcpy(new_extension_set, extensions_enabled, sizeof(char*) * extensions_count);
|
||||||
new_extension_set[extensions_count] = VK_EXT_DEBUG_UTILS_EXTENSION_NAME;
|
new_extension_set[extensions_count] = VK_EXT_DEBUG_UTILS_EXTENSION_NAME;
|
||||||
|
|
||||||
debug_create_info.pNext = p_next;
|
|
||||||
|
|
||||||
create_info.enabledExtensionCount = extensions_count + 1;
|
create_info.enabledExtensionCount = extensions_count + 1;
|
||||||
create_info.ppEnabledExtensionNames = new_extension_set;
|
create_info.ppEnabledExtensionNames = new_extension_set;
|
||||||
create_info.enabledLayerCount = __kvf_extra_layers_count;
|
create_info.enabledLayerCount = __kvf_extra_layers_count;
|
||||||
@@ -1614,6 +1474,9 @@ int32_t __kvfScorePhysicalDevice(VkPhysicalDevice device, VkSurfaceKHR surface,
|
|||||||
if(device_props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
|
if(device_props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
|
||||||
score += 1000;
|
score += 1000;
|
||||||
|
|
||||||
|
if(!device_features.geometryShader)
|
||||||
|
return -1;
|
||||||
|
|
||||||
score += device_props.limits.maxImageDimension2D;
|
score += device_props.limits.maxImageDimension2D;
|
||||||
score += device_props.limits.maxBoundDescriptorSets;
|
score += device_props.limits.maxBoundDescriptorSets;
|
||||||
|
|
||||||
@@ -2003,7 +1866,6 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
|
|||||||
KVF_GET_DEVICE_FUNCTION(vkDestroySemaphore)(device, semaphore, kvf_device->callbacks);
|
KVF_GET_DEVICE_FUNCTION(vkDestroySemaphore)(device, semaphore, kvf_device->callbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#ifndef KVF_NO_KHR
|
#ifndef KVF_NO_KHR
|
||||||
__KvfSwapchainSupportInternal __kvfQuerySwapchainSupport(VkPhysicalDevice physical, VkSurfaceKHR surface)
|
__KvfSwapchainSupportInternal __kvfQuerySwapchainSupport(VkPhysicalDevice physical, VkSurfaceKHR surface)
|
||||||
{
|
{
|
||||||
@@ -2029,57 +1891,13 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
|
|||||||
return support;
|
return support;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool __kvfIsformatSRGB(VkFormat format)
|
VkSurfaceFormatKHR __kvfChooseSwapSurfaceFormat(__KvfSwapchainSupportInternal* support)
|
||||||
{
|
{
|
||||||
switch(format)
|
|
||||||
{
|
|
||||||
case VK_FORMAT_R8G8B8A8_SRGB: // fallthrought
|
|
||||||
case VK_FORMAT_B8G8R8A8_SRGB: return true;
|
|
||||||
|
|
||||||
default: return false;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool __kvfIsformatUNORM(VkFormat format)
|
|
||||||
{
|
|
||||||
switch(format)
|
|
||||||
{
|
|
||||||
case VK_FORMAT_R8G8B8A8_UNORM: // fallthrought
|
|
||||||
case VK_FORMAT_B8G8R8A8_UNORM: return true;
|
|
||||||
|
|
||||||
default: return false;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkSurfaceFormatKHR __kvfChooseSwapSurfaceFormat(__KvfSwapchainSupportInternal* support, bool srgb)
|
|
||||||
{
|
|
||||||
if(support->formats_count == 1 && support->formats[0].format == VK_FORMAT_UNDEFINED)
|
|
||||||
{
|
|
||||||
// If the list contains one undefined format, it means any format can be used
|
|
||||||
VkSurfaceFormatKHR format;
|
|
||||||
format.colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
|
|
||||||
if(srgb)
|
|
||||||
format.format = VK_FORMAT_R8G8B8A8_SRGB;
|
|
||||||
else
|
|
||||||
format.format = VK_FORMAT_R8G8B8A8_UNORM;
|
|
||||||
return format;
|
|
||||||
|
|
||||||
}
|
|
||||||
for(uint32_t i = 0; i < support->formats_count; i++)
|
for(uint32_t i = 0; i < support->formats_count; i++)
|
||||||
{
|
{
|
||||||
if(srgb)
|
if(support->formats[i].format == VK_FORMAT_R8G8B8A8_SRGB && support->formats[i].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR)
|
||||||
{
|
|
||||||
if(__kvfIsformatSRGB(support->formats[i].format) && support->formats[i].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR)
|
|
||||||
return support->formats[i];
|
return support->formats[i];
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if(__kvfIsformatUNORM(support->formats[i].format))
|
|
||||||
return support->formats[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return support->formats[0];
|
return support->formats[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2109,13 +1927,13 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
|
|||||||
return t > max ? max : t;
|
return t > max ? max : t;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkSwapchainKHR kvfCreateSwapchainKHR(VkDevice device, VkPhysicalDevice physical, VkSurfaceKHR surface, VkExtent2D extent, VkSwapchainKHR old_swapchain, bool try_vsync, bool srgb)
|
VkSwapchainKHR kvfCreateSwapchainKHR(VkDevice device, VkPhysicalDevice physical, VkSurfaceKHR surface, VkExtent2D extent, VkSwapchainKHR old_swapchain, bool try_vsync)
|
||||||
{
|
{
|
||||||
KVF_ASSERT(device != VK_NULL_HANDLE);
|
KVF_ASSERT(device != VK_NULL_HANDLE);
|
||||||
VkSwapchainKHR swapchain;
|
VkSwapchainKHR swapchain;
|
||||||
__KvfSwapchainSupportInternal support = __kvfQuerySwapchainSupport(physical, surface);
|
__KvfSwapchainSupportInternal support = __kvfQuerySwapchainSupport(physical, surface);
|
||||||
|
|
||||||
VkSurfaceFormatKHR surfaceFormat = __kvfChooseSwapSurfaceFormat(&support, srgb);
|
VkSurfaceFormatKHR surfaceFormat = __kvfChooseSwapSurfaceFormat(&support);
|
||||||
VkPresentModeKHR present_mode = __kvfChooseSwapPresentMode(&support, try_vsync);
|
VkPresentModeKHR present_mode = __kvfChooseSwapPresentMode(&support, try_vsync);
|
||||||
|
|
||||||
uint32_t image_count = support.capabilities.minImageCount + 1;
|
uint32_t image_count = support.capabilities.minImageCount + 1;
|
||||||
@@ -2208,98 +2026,6 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
|
|||||||
KVF_ASSERT(device != VK_NULL_HANDLE);
|
KVF_ASSERT(device != VK_NULL_HANDLE);
|
||||||
__kvfDestroySwapchain(device, swapchain);
|
__kvfDestroySwapchain(device, swapchain);
|
||||||
}
|
}
|
||||||
|
|
||||||
VkSurfaceKHR kvfCreateSurfaceKHR(VkInstance instance, KvfSurfaceType type, void* instance_handle, void* window_handle)
|
|
||||||
{
|
|
||||||
VkSurfaceKHR surface = VK_NULL_HANDLE;
|
|
||||||
switch(type)
|
|
||||||
{
|
|
||||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
|
||||||
case KVF_SURFACE_ANDROID:
|
|
||||||
{
|
|
||||||
VkAndroidSurfaceCreateInfoKHR create_info = {};
|
|
||||||
create_info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
|
|
||||||
create_info.pNext = nullptr;
|
|
||||||
create_info.flags = 0;
|
|
||||||
create_info.window = (ANativeWindow*)window_handle;
|
|
||||||
kvfCheckVk(KVF_GET_INSTANCE_FUNCTION(vkCreateAndroidSurfaceKHR)(instance, &create_info, NULL, &surface));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
|
||||||
case KVF_SURFACE_XLIB:
|
|
||||||
{
|
|
||||||
VkXlibSurfaceCreateInfoKHR create_info = {};
|
|
||||||
create_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
|
|
||||||
create_info.pNext = nullptr;
|
|
||||||
create_info.flags = 0;
|
|
||||||
create_info.dpy = (Display*)instance_handle;
|
|
||||||
create_info.window = *(Window*)window_handle;
|
|
||||||
kvfCheckVk(KVF_GET_INSTANCE_FUNCTION(vkCreateXlibSurfaceKHR)(instance, &create_info, NULL, &surface));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
|
||||||
case KVF_SURFACE_XCB:
|
|
||||||
{
|
|
||||||
VkXcbSurfaceCreateInfoKHR create_info = {};
|
|
||||||
create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
|
|
||||||
create_info.pNext = nullptr;
|
|
||||||
create_info.flags = 0;
|
|
||||||
create_info.connection = (xcb_connection_t*)instance_handle;
|
|
||||||
create_info.window = (*xcb_window_t*)window_handle;
|
|
||||||
kvfCheckVk(KVF_GET_INSTANCE_FUNCTION(vkCreateXcbSurfaceKHR)(instance, &create_info, NULL, &surface));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
|
||||||
case KVF_SURFACE_WAYLAND:
|
|
||||||
{
|
|
||||||
VkWaylandSurfaceCreateInfoKHR create_info = {};
|
|
||||||
create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
|
|
||||||
create_info.pNext = nullptr;
|
|
||||||
create_info.flags = 0;
|
|
||||||
create_info.display = (wl_display*)instance_handle;
|
|
||||||
create_info.surface = (wl_surface*)window_handle;
|
|
||||||
kvfCheckVk(KVF_GET_INSTANCE_FUNCTION(vkCreateWaylandSurfaceKHR)(instance, &create_info, NULL, &surface));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
|
||||||
case KVF_SURFACE_WINDOWS:
|
|
||||||
{
|
|
||||||
VkWin32SurfaceCreateInfoKHR create_info = {};
|
|
||||||
create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
|
|
||||||
create_info.pNext = nullptr;
|
|
||||||
create_info.flags = 0;
|
|
||||||
create_info.hinstance = (HINSTANCE)instance_handle;
|
|
||||||
create_info.hwnd = (HWND)window_handle;
|
|
||||||
kvfCheckVk(KVF_GET_INSTANCE_FUNCTION(vkCreateWin32SurfaceKHR)(instance, &create_info, NULL, &surface));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
|
||||||
case KVF_SURFACE_METAL:
|
|
||||||
{
|
|
||||||
VkMetalSurfaceCreateInfoEXT create_info = {};
|
|
||||||
create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
|
|
||||||
create_info.pNext = nullptr;
|
|
||||||
create_info.flags = 0;
|
|
||||||
create_info.pLayer = (CAMetalLayer*)window_handle;
|
|
||||||
kvfCheckVk(KVF_GET_INSTANCE_FUNCTION(vkCreateMetalSurfaceEXT)(instance, &create_info, NULL, &surface));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
return surface;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VkImage kvfCreateImage(VkDevice device, uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, KvfImageType type)
|
VkImage kvfCreateImage(VkDevice device, uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, KvfImageType type)
|
||||||
@@ -2356,18 +2082,6 @@ void kvfCopyImageToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkImage src, size_t
|
|||||||
KVF_GET_DEVICE_FUNCTION(vkCmdCopyImageToBuffer)(cmd, src, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dst, 1, ®ion);
|
KVF_GET_DEVICE_FUNCTION(vkCmdCopyImageToBuffer)(cmd, src, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dst, 1, ®ion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvfCopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImageLayout src_layout, VkImage dst, VkImageLayout dst_layout, uint32_t count, const VkImageCopy* regions)
|
|
||||||
{
|
|
||||||
KVF_ASSERT(cmd != VK_NULL_HANDLE);
|
|
||||||
KVF_ASSERT(dst != VK_NULL_HANDLE);
|
|
||||||
KVF_ASSERT(src != VK_NULL_HANDLE);
|
|
||||||
#ifdef KVF_IMPL_VK_NO_PROTOTYPES
|
|
||||||
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd);
|
|
||||||
KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
|
|
||||||
#endif
|
|
||||||
KVF_GET_DEVICE_FUNCTION(vkCmdCopyImage)(cmd, src, src_layout, dst, dst_layout, count, regions);
|
|
||||||
}
|
|
||||||
|
|
||||||
void kvfDestroyImage(VkDevice device, VkImage image)
|
void kvfDestroyImage(VkDevice device, VkImage image)
|
||||||
{
|
{
|
||||||
if(image == VK_NULL_HANDLE)
|
if(image == VK_NULL_HANDLE)
|
||||||
@@ -2518,7 +2232,7 @@ VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size, size_t src_offset, size_t dst_offset)
|
void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size)
|
||||||
{
|
{
|
||||||
KVF_ASSERT(cmd != VK_NULL_HANDLE);
|
KVF_ASSERT(cmd != VK_NULL_HANDLE);
|
||||||
KVF_ASSERT(dst != VK_NULL_HANDLE);
|
KVF_ASSERT(dst != VK_NULL_HANDLE);
|
||||||
@@ -2529,8 +2243,6 @@ void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size
|
|||||||
#endif
|
#endif
|
||||||
VkBufferCopy copy_region = {};
|
VkBufferCopy copy_region = {};
|
||||||
copy_region.size = size;
|
copy_region.size = size;
|
||||||
copy_region.srcOffset = src_offset;
|
|
||||||
copy_region.dstOffset = dst_offset;
|
|
||||||
KVF_GET_DEVICE_FUNCTION(vkCmdCopyBuffer)(cmd, src, dst, 1, ©_region);
|
KVF_GET_DEVICE_FUNCTION(vkCmdCopyBuffer)(cmd, src, dst, 1, ©_region);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2559,7 +2271,7 @@ void kvfCopyBufferToImage(VkCommandBuffer cmd, VkImage dst, VkBuffer src, size_t
|
|||||||
|
|
||||||
void kvfDestroyBuffer(VkDevice device, VkBuffer buffer)
|
void kvfDestroyBuffer(VkDevice device, VkBuffer buffer)
|
||||||
{
|
{
|
||||||
if(buffer == VK_NULL_HANDLE)
|
if(buffer != VK_NULL_HANDLE)
|
||||||
return;
|
return;
|
||||||
KVF_ASSERT(device != VK_NULL_HANDLE);
|
KVF_ASSERT(device != VK_NULL_HANDLE);
|
||||||
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
|
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
|
||||||
@@ -2786,7 +2498,7 @@ VkAttachmentDescription kvfBuildAttachmentDescription(KvfImageType type, VkForma
|
|||||||
__KvfSwapchain* kvf_swapchain = __kvfGetKvfSwapchainFromVkSwapchainKHR(swapchain);
|
__KvfSwapchain* kvf_swapchain = __kvfGetKvfSwapchainFromVkSwapchainKHR(swapchain);
|
||||||
KVF_ASSERT(kvf_swapchain != NULL);
|
KVF_ASSERT(kvf_swapchain != NULL);
|
||||||
KVF_ASSERT(kvf_swapchain->images_count != 0);
|
KVF_ASSERT(kvf_swapchain->images_count != 0);
|
||||||
return kvfBuildAttachmentDescription(KVF_IMAGE_COLOR, kvf_swapchain->images_format, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, clear, VK_SAMPLE_COUNT_1_BIT);
|
return kvfBuildAttachmentDescription(KVF_IMAGE_COLOR, kvf_swapchain->images_format, VK_IMAGE_LAYOUT_UNDEFINED,VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, clear, VK_SAMPLE_COUNT_1_BIT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -3176,7 +2888,7 @@ void kvfGPipelineBuilderEnableAdditiveBlending(KvfGraphicsPipelineBuilder* build
|
|||||||
builder->color_blend_attachment_state.dstColorBlendFactor = VK_BLEND_FACTOR_ONE;
|
builder->color_blend_attachment_state.dstColorBlendFactor = VK_BLEND_FACTOR_ONE;
|
||||||
builder->color_blend_attachment_state.colorBlendOp = VK_BLEND_OP_ADD;
|
builder->color_blend_attachment_state.colorBlendOp = VK_BLEND_OP_ADD;
|
||||||
builder->color_blend_attachment_state.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
|
builder->color_blend_attachment_state.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
|
||||||
builder->color_blend_attachment_state.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
|
builder->color_blend_attachment_state.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;
|
||||||
builder->color_blend_attachment_state.alphaBlendOp = VK_BLEND_OP_ADD;
|
builder->color_blend_attachment_state.alphaBlendOp = VK_BLEND_OP_ADD;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3189,7 +2901,7 @@ void kvfGPipelineBuilderEnableAlphaBlending(KvfGraphicsPipelineBuilder* builder)
|
|||||||
builder->color_blend_attachment_state.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
|
builder->color_blend_attachment_state.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
|
||||||
builder->color_blend_attachment_state.colorBlendOp = VK_BLEND_OP_ADD;
|
builder->color_blend_attachment_state.colorBlendOp = VK_BLEND_OP_ADD;
|
||||||
builder->color_blend_attachment_state.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
|
builder->color_blend_attachment_state.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
|
||||||
builder->color_blend_attachment_state.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
|
builder->color_blend_attachment_state.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;
|
||||||
builder->color_blend_attachment_state.alphaBlendOp = VK_BLEND_OP_ADD;
|
builder->color_blend_attachment_state.alphaBlendOp = VK_BLEND_OP_ADD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+23
-23
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_AV1STD_H_ 1
|
#define VULKAN_VIDEO_CODEC_AV1STD_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -22,27 +22,27 @@ extern "C" {
|
|||||||
// vulkan_video_codec_av1std is a preprocessor guard. Do not pass it to API calls.
|
// vulkan_video_codec_av1std is a preprocessor guard. Do not pass it to API calls.
|
||||||
#define vulkan_video_codec_av1std 1
|
#define vulkan_video_codec_av1std 1
|
||||||
#include "vulkan_video_codecs_common.h"
|
#include "vulkan_video_codecs_common.h"
|
||||||
#define STD_VIDEO_AV1_NUM_REF_FRAMES 8U
|
#define STD_VIDEO_AV1_NUM_REF_FRAMES 8
|
||||||
#define STD_VIDEO_AV1_REFS_PER_FRAME 7U
|
#define STD_VIDEO_AV1_REFS_PER_FRAME 7
|
||||||
#define STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME 8U
|
#define STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME 8
|
||||||
#define STD_VIDEO_AV1_MAX_TILE_COLS 64U
|
#define STD_VIDEO_AV1_MAX_TILE_COLS 64
|
||||||
#define STD_VIDEO_AV1_MAX_TILE_ROWS 64U
|
#define STD_VIDEO_AV1_MAX_TILE_ROWS 64
|
||||||
#define STD_VIDEO_AV1_MAX_SEGMENTS 8U
|
#define STD_VIDEO_AV1_MAX_SEGMENTS 8
|
||||||
#define STD_VIDEO_AV1_SEG_LVL_MAX 8U
|
#define STD_VIDEO_AV1_SEG_LVL_MAX 8
|
||||||
#define STD_VIDEO_AV1_PRIMARY_REF_NONE 7U
|
#define STD_VIDEO_AV1_PRIMARY_REF_NONE 7
|
||||||
#define STD_VIDEO_AV1_SELECT_INTEGER_MV 2U
|
#define STD_VIDEO_AV1_SELECT_INTEGER_MV 2
|
||||||
#define STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS 2U
|
#define STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS 2
|
||||||
#define STD_VIDEO_AV1_SKIP_MODE_FRAMES 2U
|
#define STD_VIDEO_AV1_SKIP_MODE_FRAMES 2
|
||||||
#define STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS 4U
|
#define STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS 4
|
||||||
#define STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS 2U
|
#define STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS 2
|
||||||
#define STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS 8U
|
#define STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS 8
|
||||||
#define STD_VIDEO_AV1_MAX_NUM_PLANES 3U
|
#define STD_VIDEO_AV1_MAX_NUM_PLANES 3
|
||||||
#define STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS 6U
|
#define STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS 6
|
||||||
#define STD_VIDEO_AV1_MAX_NUM_Y_POINTS 14U
|
#define STD_VIDEO_AV1_MAX_NUM_Y_POINTS 14
|
||||||
#define STD_VIDEO_AV1_MAX_NUM_CB_POINTS 10U
|
#define STD_VIDEO_AV1_MAX_NUM_CB_POINTS 10
|
||||||
#define STD_VIDEO_AV1_MAX_NUM_CR_POINTS 10U
|
#define STD_VIDEO_AV1_MAX_NUM_CR_POINTS 10
|
||||||
#define STD_VIDEO_AV1_MAX_NUM_POS_LUMA 24U
|
#define STD_VIDEO_AV1_MAX_NUM_POS_LUMA 24
|
||||||
#define STD_VIDEO_AV1_MAX_NUM_POS_CHROMA 25U
|
#define STD_VIDEO_AV1_MAX_NUM_POS_CHROMA 25
|
||||||
|
|
||||||
typedef enum StdVideoAV1Profile {
|
typedef enum StdVideoAV1Profile {
|
||||||
STD_VIDEO_AV1_PROFILE_MAIN = 0,
|
STD_VIDEO_AV1_PROFILE_MAIN = 0,
|
||||||
@@ -144,7 +144,7 @@ typedef enum StdVideoAV1ColorPrimaries {
|
|||||||
STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432 = 12,
|
STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432 = 12,
|
||||||
STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213 = 22,
|
STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213 = 22,
|
||||||
STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID = 0x7FFFFFFF,
|
STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID = 0x7FFFFFFF,
|
||||||
// STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED is a legacy alias
|
// STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED is a deprecated alias
|
||||||
STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED = STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED,
|
STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED = STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED,
|
||||||
STD_VIDEO_AV1_COLOR_PRIMARIES_MAX_ENUM = 0x7FFFFFFF
|
STD_VIDEO_AV1_COLOR_PRIMARIES_MAX_ENUM = 0x7FFFFFFF
|
||||||
} StdVideoAV1ColorPrimaries;
|
} StdVideoAV1ColorPrimaries;
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ 1
|
#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ 1
|
#define VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|||||||
+9
-9
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_H264STD_H_ 1
|
#define VULKAN_VIDEO_CODEC_H264STD_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -22,14 +22,14 @@ extern "C" {
|
|||||||
// vulkan_video_codec_h264std is a preprocessor guard. Do not pass it to API calls.
|
// vulkan_video_codec_h264std is a preprocessor guard. Do not pass it to API calls.
|
||||||
#define vulkan_video_codec_h264std 1
|
#define vulkan_video_codec_h264std 1
|
||||||
#include "vulkan_video_codecs_common.h"
|
#include "vulkan_video_codecs_common.h"
|
||||||
#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32U
|
#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32
|
||||||
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6U
|
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6
|
||||||
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16U
|
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16
|
||||||
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 6U
|
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 6
|
||||||
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64U
|
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64
|
||||||
#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32U
|
#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32
|
||||||
#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2U
|
#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2
|
||||||
#define STD_VIDEO_H264_NO_REFERENCE_PICTURE 0xFFU
|
#define STD_VIDEO_H264_NO_REFERENCE_PICTURE 0xFF
|
||||||
|
|
||||||
typedef enum StdVideoH264ChromaFormatIdc {
|
typedef enum StdVideoH264ChromaFormatIdc {
|
||||||
STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0,
|
STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1
|
#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -27,7 +27,7 @@ extern "C" {
|
|||||||
|
|
||||||
#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0
|
#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0
|
||||||
#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_decode"
|
#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_decode"
|
||||||
#define STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE 2U
|
#define STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE 2
|
||||||
|
|
||||||
typedef enum StdVideoDecodeH264FieldOrderCount {
|
typedef enum StdVideoDecodeH264FieldOrderCount {
|
||||||
STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0,
|
STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1
|
#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|||||||
+24
-24
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_H265STD_H_ 1
|
#define VULKAN_VIDEO_CODEC_H265STD_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -22,29 +22,29 @@ extern "C" {
|
|||||||
// vulkan_video_codec_h265std is a preprocessor guard. Do not pass it to API calls.
|
// vulkan_video_codec_h265std is a preprocessor guard. Do not pass it to API calls.
|
||||||
#define vulkan_video_codec_h265std 1
|
#define vulkan_video_codec_h265std 1
|
||||||
#include "vulkan_video_codecs_common.h"
|
#include "vulkan_video_codecs_common.h"
|
||||||
#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32U
|
#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32
|
||||||
#define STD_VIDEO_H265_SUBLAYERS_LIST_SIZE 7U
|
#define STD_VIDEO_H265_SUBLAYERS_LIST_SIZE 7
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6U
|
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16U
|
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6U
|
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64U
|
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6U
|
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64U
|
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2U
|
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2
|
||||||
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64U
|
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64
|
||||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6U
|
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6
|
||||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19U
|
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19
|
||||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21U
|
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21
|
||||||
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3U
|
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3
|
||||||
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128U
|
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128
|
||||||
#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15U
|
#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15
|
||||||
#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2U
|
#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2
|
||||||
#define STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS 64U
|
#define STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS 64
|
||||||
#define STD_VIDEO_H265_MAX_DPB_SIZE 16U
|
#define STD_VIDEO_H265_MAX_DPB_SIZE 16
|
||||||
#define STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS 32U
|
#define STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS 32
|
||||||
#define STD_VIDEO_H265_MAX_LONG_TERM_PICS 16U
|
#define STD_VIDEO_H265_MAX_LONG_TERM_PICS 16
|
||||||
#define STD_VIDEO_H265_MAX_DELTA_POC 48U
|
#define STD_VIDEO_H265_MAX_DELTA_POC 48
|
||||||
#define STD_VIDEO_H265_NO_REFERENCE_PICTURE 0xFFU
|
#define STD_VIDEO_H265_NO_REFERENCE_PICTURE 0xFF
|
||||||
|
|
||||||
typedef enum StdVideoH265ChromaFormatIdc {
|
typedef enum StdVideoH265ChromaFormatIdc {
|
||||||
STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0,
|
STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1
|
#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -27,7 +27,7 @@ extern "C" {
|
|||||||
|
|
||||||
#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0
|
#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0
|
||||||
#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode"
|
#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode"
|
||||||
#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8U
|
#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8
|
||||||
typedef struct StdVideoDecodeH265PictureInfoFlags {
|
typedef struct StdVideoDecodeH265PictureInfoFlags {
|
||||||
uint32_t IrapPicFlag : 1;
|
uint32_t IrapPicFlag : 1;
|
||||||
uint32_t IdrPicFlag : 1;
|
uint32_t IdrPicFlag : 1;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1
|
#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|||||||
-151
@@ -1,151 +0,0 @@
|
|||||||
#ifndef VULKAN_VIDEO_CODEC_VP9STD_H_
|
|
||||||
#define VULKAN_VIDEO_CODEC_VP9STD_H_ 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
|
||||||
**
|
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
|
||||||
**
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// vulkan_video_codec_vp9std is a preprocessor guard. Do not pass it to API calls.
|
|
||||||
#define vulkan_video_codec_vp9std 1
|
|
||||||
#include "vulkan_video_codecs_common.h"
|
|
||||||
#define STD_VIDEO_VP9_NUM_REF_FRAMES 8U
|
|
||||||
#define STD_VIDEO_VP9_REFS_PER_FRAME 3U
|
|
||||||
#define STD_VIDEO_VP9_MAX_REF_FRAMES 4U
|
|
||||||
#define STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS 2U
|
|
||||||
#define STD_VIDEO_VP9_MAX_SEGMENTS 8U
|
|
||||||
#define STD_VIDEO_VP9_SEG_LVL_MAX 4U
|
|
||||||
#define STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS 7U
|
|
||||||
#define STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB 3U
|
|
||||||
|
|
||||||
typedef enum StdVideoVP9Profile {
|
|
||||||
STD_VIDEO_VP9_PROFILE_0 = 0,
|
|
||||||
STD_VIDEO_VP9_PROFILE_1 = 1,
|
|
||||||
STD_VIDEO_VP9_PROFILE_2 = 2,
|
|
||||||
STD_VIDEO_VP9_PROFILE_3 = 3,
|
|
||||||
STD_VIDEO_VP9_PROFILE_INVALID = 0x7FFFFFFF,
|
|
||||||
STD_VIDEO_VP9_PROFILE_MAX_ENUM = 0x7FFFFFFF
|
|
||||||
} StdVideoVP9Profile;
|
|
||||||
|
|
||||||
typedef enum StdVideoVP9Level {
|
|
||||||
STD_VIDEO_VP9_LEVEL_1_0 = 0,
|
|
||||||
STD_VIDEO_VP9_LEVEL_1_1 = 1,
|
|
||||||
STD_VIDEO_VP9_LEVEL_2_0 = 2,
|
|
||||||
STD_VIDEO_VP9_LEVEL_2_1 = 3,
|
|
||||||
STD_VIDEO_VP9_LEVEL_3_0 = 4,
|
|
||||||
STD_VIDEO_VP9_LEVEL_3_1 = 5,
|
|
||||||
STD_VIDEO_VP9_LEVEL_4_0 = 6,
|
|
||||||
STD_VIDEO_VP9_LEVEL_4_1 = 7,
|
|
||||||
STD_VIDEO_VP9_LEVEL_5_0 = 8,
|
|
||||||
STD_VIDEO_VP9_LEVEL_5_1 = 9,
|
|
||||||
STD_VIDEO_VP9_LEVEL_5_2 = 10,
|
|
||||||
STD_VIDEO_VP9_LEVEL_6_0 = 11,
|
|
||||||
STD_VIDEO_VP9_LEVEL_6_1 = 12,
|
|
||||||
STD_VIDEO_VP9_LEVEL_6_2 = 13,
|
|
||||||
STD_VIDEO_VP9_LEVEL_INVALID = 0x7FFFFFFF,
|
|
||||||
STD_VIDEO_VP9_LEVEL_MAX_ENUM = 0x7FFFFFFF
|
|
||||||
} StdVideoVP9Level;
|
|
||||||
|
|
||||||
typedef enum StdVideoVP9FrameType {
|
|
||||||
STD_VIDEO_VP9_FRAME_TYPE_KEY = 0,
|
|
||||||
STD_VIDEO_VP9_FRAME_TYPE_NON_KEY = 1,
|
|
||||||
STD_VIDEO_VP9_FRAME_TYPE_INVALID = 0x7FFFFFFF,
|
|
||||||
STD_VIDEO_VP9_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF
|
|
||||||
} StdVideoVP9FrameType;
|
|
||||||
|
|
||||||
typedef enum StdVideoVP9ReferenceName {
|
|
||||||
STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME = 0,
|
|
||||||
STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME = 1,
|
|
||||||
STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME = 2,
|
|
||||||
STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME = 3,
|
|
||||||
STD_VIDEO_VP9_REFERENCE_NAME_INVALID = 0x7FFFFFFF,
|
|
||||||
STD_VIDEO_VP9_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF
|
|
||||||
} StdVideoVP9ReferenceName;
|
|
||||||
|
|
||||||
typedef enum StdVideoVP9InterpolationFilter {
|
|
||||||
STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP = 0,
|
|
||||||
STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1,
|
|
||||||
STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2,
|
|
||||||
STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR = 3,
|
|
||||||
STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE = 4,
|
|
||||||
STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF,
|
|
||||||
STD_VIDEO_VP9_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF
|
|
||||||
} StdVideoVP9InterpolationFilter;
|
|
||||||
|
|
||||||
typedef enum StdVideoVP9ColorSpace {
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN = 0,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_BT_601 = 1,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_BT_709 = 2,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170 = 3,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240 = 4,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_BT_2020 = 5,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_RESERVED = 6,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_RGB = 7,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_INVALID = 0x7FFFFFFF,
|
|
||||||
STD_VIDEO_VP9_COLOR_SPACE_MAX_ENUM = 0x7FFFFFFF
|
|
||||||
} StdVideoVP9ColorSpace;
|
|
||||||
typedef struct StdVideoVP9ColorConfigFlags {
|
|
||||||
uint32_t color_range : 1;
|
|
||||||
uint32_t reserved : 31;
|
|
||||||
} StdVideoVP9ColorConfigFlags;
|
|
||||||
|
|
||||||
typedef struct StdVideoVP9ColorConfig {
|
|
||||||
StdVideoVP9ColorConfigFlags flags;
|
|
||||||
uint8_t BitDepth;
|
|
||||||
uint8_t subsampling_x;
|
|
||||||
uint8_t subsampling_y;
|
|
||||||
uint8_t reserved1;
|
|
||||||
StdVideoVP9ColorSpace color_space;
|
|
||||||
} StdVideoVP9ColorConfig;
|
|
||||||
|
|
||||||
typedef struct StdVideoVP9LoopFilterFlags {
|
|
||||||
uint32_t loop_filter_delta_enabled : 1;
|
|
||||||
uint32_t loop_filter_delta_update : 1;
|
|
||||||
uint32_t reserved : 30;
|
|
||||||
} StdVideoVP9LoopFilterFlags;
|
|
||||||
|
|
||||||
typedef struct StdVideoVP9LoopFilter {
|
|
||||||
StdVideoVP9LoopFilterFlags flags;
|
|
||||||
uint8_t loop_filter_level;
|
|
||||||
uint8_t loop_filter_sharpness;
|
|
||||||
uint8_t update_ref_delta;
|
|
||||||
int8_t loop_filter_ref_deltas[STD_VIDEO_VP9_MAX_REF_FRAMES];
|
|
||||||
uint8_t update_mode_delta;
|
|
||||||
int8_t loop_filter_mode_deltas[STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS];
|
|
||||||
} StdVideoVP9LoopFilter;
|
|
||||||
|
|
||||||
typedef struct StdVideoVP9SegmentationFlags {
|
|
||||||
uint32_t segmentation_update_map : 1;
|
|
||||||
uint32_t segmentation_temporal_update : 1;
|
|
||||||
uint32_t segmentation_update_data : 1;
|
|
||||||
uint32_t segmentation_abs_or_delta_update : 1;
|
|
||||||
uint32_t reserved : 28;
|
|
||||||
} StdVideoVP9SegmentationFlags;
|
|
||||||
|
|
||||||
typedef struct StdVideoVP9Segmentation {
|
|
||||||
StdVideoVP9SegmentationFlags flags;
|
|
||||||
uint8_t segmentation_tree_probs[STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS];
|
|
||||||
uint8_t segmentation_pred_prob[STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB];
|
|
||||||
uint8_t FeatureEnabled[STD_VIDEO_VP9_MAX_SEGMENTS];
|
|
||||||
int16_t FeatureData[STD_VIDEO_VP9_MAX_SEGMENTS][STD_VIDEO_VP9_SEG_LVL_MAX];
|
|
||||||
} StdVideoVP9Segmentation;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
#ifndef VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_
|
|
||||||
#define VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
|
||||||
**
|
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
|
||||||
**
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// vulkan_video_codec_vp9std_decode is a preprocessor guard. Do not pass it to API calls.
|
|
||||||
#define vulkan_video_codec_vp9std_decode 1
|
|
||||||
#include "vulkan_video_codec_vp9std.h"
|
|
||||||
|
|
||||||
#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0)
|
|
||||||
|
|
||||||
#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0
|
|
||||||
#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_vp9_decode"
|
|
||||||
typedef struct StdVideoDecodeVP9PictureInfoFlags {
|
|
||||||
uint32_t error_resilient_mode : 1;
|
|
||||||
uint32_t intra_only : 1;
|
|
||||||
uint32_t allow_high_precision_mv : 1;
|
|
||||||
uint32_t refresh_frame_context : 1;
|
|
||||||
uint32_t frame_parallel_decoding_mode : 1;
|
|
||||||
uint32_t segmentation_enabled : 1;
|
|
||||||
uint32_t show_frame : 1;
|
|
||||||
uint32_t UsePrevFrameMvs : 1;
|
|
||||||
uint32_t reserved : 24;
|
|
||||||
} StdVideoDecodeVP9PictureInfoFlags;
|
|
||||||
|
|
||||||
typedef struct StdVideoDecodeVP9PictureInfo {
|
|
||||||
StdVideoDecodeVP9PictureInfoFlags flags;
|
|
||||||
StdVideoVP9Profile profile;
|
|
||||||
StdVideoVP9FrameType frame_type;
|
|
||||||
uint8_t frame_context_idx;
|
|
||||||
uint8_t reset_frame_context;
|
|
||||||
uint8_t refresh_frame_flags;
|
|
||||||
uint8_t ref_frame_sign_bias_mask;
|
|
||||||
StdVideoVP9InterpolationFilter interpolation_filter;
|
|
||||||
uint8_t base_q_idx;
|
|
||||||
int8_t delta_q_y_dc;
|
|
||||||
int8_t delta_q_uv_dc;
|
|
||||||
int8_t delta_q_uv_ac;
|
|
||||||
uint8_t tile_cols_log2;
|
|
||||||
uint8_t tile_rows_log2;
|
|
||||||
uint16_t reserved1[3];
|
|
||||||
const StdVideoVP9ColorConfig* pColorConfig;
|
|
||||||
const StdVideoVP9LoopFilter* pLoopFilter;
|
|
||||||
const StdVideoVP9Segmentation* pSegmentation;
|
|
||||||
} StdVideoDecodeVP9PictureInfo;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_VIDEO_CODECS_COMMON_H_ 1
|
#define VULKAN_VIDEO_CODECS_COMMON_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|||||||
Vendored
+187
-610
File diff suppressed because it is too large
Load Diff
Vendored
+1
-2
@@ -44,9 +44,8 @@
|
|||||||
typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion);
|
typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion);
|
||||||
// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this
|
// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this
|
||||||
// file directly, it won't be found.
|
// file directly, it won't be found.
|
||||||
#ifndef IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
#ifndef PFN_GetPhysicalDeviceProcAddr
|
||||||
typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
|
typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
|
||||||
#define IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Typedefs for loader/ICD interface
|
// Typedefs for loader/ICD interface
|
||||||
|
|||||||
Vendored
-3
@@ -27,10 +27,7 @@
|
|||||||
#define VK_CURRENT_CHAIN_VERSION 1
|
#define VK_CURRENT_CHAIN_VERSION 1
|
||||||
|
|
||||||
// Typedef for use in the interfaces below
|
// Typedef for use in the interfaces below
|
||||||
#ifndef IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
|
||||||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
|
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
|
||||||
#define IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Version negotiation values
|
// Version negotiation values
|
||||||
typedef enum VkNegotiateLayerStructType {
|
typedef enum VkNegotiateLayerStructType {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
// File: vk_platform.h
|
// File: vk_platform.h
|
||||||
//
|
//
|
||||||
/*
|
/*
|
||||||
** Copyright 2014-2026 The Khronos Group Inc.
|
** Copyright 2014-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|||||||
Vendored
+7952
-1042
File diff suppressed because it is too large
Load Diff
Vendored
+1
-5
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_H_ 1
|
#define VULKAN_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -96,8 +96,4 @@
|
|||||||
#include "vulkan_beta.h"
|
#include "vulkan_beta.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_OHOS
|
|
||||||
#include "vulkan_ohos.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // VULKAN_H_
|
#endif // VULKAN_H_
|
||||||
|
|||||||
Vendored
+3582
-9194
File diff suppressed because it is too large
Load Diff
Vendored
+1
-7
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_ANDROID_H_ 1
|
#define VULKAN_ANDROID_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -35,14 +35,12 @@ typedef struct VkAndroidSurfaceCreateInfoKHR {
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
|
||||||
VkInstance instance,
|
VkInstance instance,
|
||||||
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
|
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_ANDROID_external_memory_android_hardware_buffer is a preprocessor guard. Do not pass it to API calls.
|
// VK_ANDROID_external_memory_android_hardware_buffer is a preprocessor guard. Do not pass it to API calls.
|
||||||
@@ -111,20 +109,16 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(Vk
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
|
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
const struct AHardwareBuffer* buffer,
|
const struct AHardwareBuffer* buffer,
|
||||||
VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
|
const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
|
||||||
struct AHardwareBuffer** pBuffer);
|
struct AHardwareBuffer** pBuffer);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_ANDROID_external_format_resolve is a preprocessor guard. Do not pass it to API calls.
|
// VK_ANDROID_external_format_resolve is a preprocessor guard. Do not pass it to API calls.
|
||||||
|
|||||||
Vendored
+1
-150
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_BETA_H_ 1
|
#define VULKAN_BETA_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -129,7 +129,6 @@ typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectAMDX)(VkCommandBuffer
|
|||||||
typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectCountAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, VkDeviceAddress countInfo);
|
typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectCountAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, VkDeviceAddress countInfo);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkPipelineCache pipelineCache,
|
VkPipelineCache pipelineCache,
|
||||||
@@ -137,159 +136,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX(
|
|||||||
const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos,
|
const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkPipeline* pPipelines);
|
VkPipeline* pPipelines);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineScratchSizeAMDX(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineScratchSizeAMDX(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkPipeline executionGraph,
|
VkPipeline executionGraph,
|
||||||
VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo);
|
VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineNodeIndexAMDX(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineNodeIndexAMDX(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkPipeline executionGraph,
|
VkPipeline executionGraph,
|
||||||
const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo,
|
const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo,
|
||||||
uint32_t* pNodeIndex);
|
uint32_t* pNodeIndex);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkCmdInitializeGraphScratchMemoryAMDX(
|
VKAPI_ATTR void VKAPI_CALL vkCmdInitializeGraphScratchMemoryAMDX(
|
||||||
VkCommandBuffer commandBuffer,
|
VkCommandBuffer commandBuffer,
|
||||||
VkPipeline executionGraph,
|
VkPipeline executionGraph,
|
||||||
VkDeviceAddress scratch,
|
VkDeviceAddress scratch,
|
||||||
VkDeviceSize scratchSize);
|
VkDeviceSize scratchSize);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphAMDX(
|
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphAMDX(
|
||||||
VkCommandBuffer commandBuffer,
|
VkCommandBuffer commandBuffer,
|
||||||
VkDeviceAddress scratch,
|
VkDeviceAddress scratch,
|
||||||
VkDeviceSize scratchSize,
|
VkDeviceSize scratchSize,
|
||||||
const VkDispatchGraphCountInfoAMDX* pCountInfo);
|
const VkDispatchGraphCountInfoAMDX* pCountInfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectAMDX(
|
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectAMDX(
|
||||||
VkCommandBuffer commandBuffer,
|
VkCommandBuffer commandBuffer,
|
||||||
VkDeviceAddress scratch,
|
VkDeviceAddress scratch,
|
||||||
VkDeviceSize scratchSize,
|
VkDeviceSize scratchSize,
|
||||||
const VkDispatchGraphCountInfoAMDX* pCountInfo);
|
const VkDispatchGraphCountInfoAMDX* pCountInfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectCountAMDX(
|
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectCountAMDX(
|
||||||
VkCommandBuffer commandBuffer,
|
VkCommandBuffer commandBuffer,
|
||||||
VkDeviceAddress scratch,
|
VkDeviceAddress scratch,
|
||||||
VkDeviceSize scratchSize,
|
VkDeviceSize scratchSize,
|
||||||
VkDeviceAddress countInfo);
|
VkDeviceAddress countInfo);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_NV_cuda_kernel_launch is a preprocessor guard. Do not pass it to API calls.
|
|
||||||
#define VK_NV_cuda_kernel_launch 1
|
|
||||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV)
|
|
||||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV)
|
|
||||||
#define VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION 2
|
|
||||||
#define VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME "VK_NV_cuda_kernel_launch"
|
|
||||||
typedef struct VkCudaModuleCreateInfoNV {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
size_t dataSize;
|
|
||||||
const void* pData;
|
|
||||||
} VkCudaModuleCreateInfoNV;
|
|
||||||
|
|
||||||
typedef struct VkCudaFunctionCreateInfoNV {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
VkCudaModuleNV module;
|
|
||||||
const char* pName;
|
|
||||||
} VkCudaFunctionCreateInfoNV;
|
|
||||||
|
|
||||||
typedef struct VkCudaLaunchInfoNV {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
VkCudaFunctionNV function;
|
|
||||||
uint32_t gridDimX;
|
|
||||||
uint32_t gridDimY;
|
|
||||||
uint32_t gridDimZ;
|
|
||||||
uint32_t blockDimX;
|
|
||||||
uint32_t blockDimY;
|
|
||||||
uint32_t blockDimZ;
|
|
||||||
uint32_t sharedMemBytes;
|
|
||||||
size_t paramCount;
|
|
||||||
const void* const * pParams;
|
|
||||||
size_t extraCount;
|
|
||||||
const void* const * pExtras;
|
|
||||||
} VkCudaLaunchInfoNV;
|
|
||||||
|
|
||||||
typedef struct VkPhysicalDeviceCudaKernelLaunchFeaturesNV {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
VkBool32 cudaKernelLaunchFeatures;
|
|
||||||
} VkPhysicalDeviceCudaKernelLaunchFeaturesNV;
|
|
||||||
|
|
||||||
typedef struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
uint32_t computeCapabilityMinor;
|
|
||||||
uint32_t computeCapabilityMajor;
|
|
||||||
} VkPhysicalDeviceCudaKernelLaunchPropertiesNV;
|
|
||||||
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaModuleNV)(VkDevice device, const VkCudaModuleCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaModuleNV* pModule);
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetCudaModuleCacheNV)(VkDevice device, VkCudaModuleNV module, size_t* pCacheSize, void* pCacheData);
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaFunctionNV)(VkDevice device, const VkCudaFunctionCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaFunctionNV* pFunction);
|
|
||||||
typedef void (VKAPI_PTR *PFN_vkDestroyCudaModuleNV)(VkDevice device, VkCudaModuleNV module, const VkAllocationCallbacks* pAllocator);
|
|
||||||
typedef void (VKAPI_PTR *PFN_vkDestroyCudaFunctionNV)(VkDevice device, VkCudaFunctionNV function, const VkAllocationCallbacks* pAllocator);
|
|
||||||
typedef void (VKAPI_PTR *PFN_vkCmdCudaLaunchKernelNV)(VkCommandBuffer commandBuffer, const VkCudaLaunchInfoNV* pLaunchInfo);
|
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaModuleNV(
|
|
||||||
VkDevice device,
|
|
||||||
const VkCudaModuleCreateInfoNV* pCreateInfo,
|
|
||||||
const VkAllocationCallbacks* pAllocator,
|
|
||||||
VkCudaModuleNV* pModule);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetCudaModuleCacheNV(
|
|
||||||
VkDevice device,
|
|
||||||
VkCudaModuleNV module,
|
|
||||||
size_t* pCacheSize,
|
|
||||||
void* pCacheData);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaFunctionNV(
|
|
||||||
VkDevice device,
|
|
||||||
const VkCudaFunctionCreateInfoNV* pCreateInfo,
|
|
||||||
const VkAllocationCallbacks* pAllocator,
|
|
||||||
VkCudaFunctionNV* pFunction);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkDestroyCudaModuleNV(
|
|
||||||
VkDevice device,
|
|
||||||
VkCudaModuleNV module,
|
|
||||||
const VkAllocationCallbacks* pAllocator);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkDestroyCudaFunctionNV(
|
|
||||||
VkDevice device,
|
|
||||||
VkCudaFunctionNV function,
|
|
||||||
const VkAllocationCallbacks* pAllocator);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkCmdCudaLaunchKernelNV(
|
|
||||||
VkCommandBuffer commandBuffer,
|
|
||||||
const VkCudaLaunchInfoNV* pLaunchInfo);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_NV_displacement_micromap is a preprocessor guard. Do not pass it to API calls.
|
// VK_NV_displacement_micromap is a preprocessor guard. Do not pass it to API calls.
|
||||||
@@ -337,37 +219,6 @@ typedef struct VkAccelerationStructureTrianglesDisplacementMicromapNV {
|
|||||||
} VkAccelerationStructureTrianglesDisplacementMicromapNV;
|
} VkAccelerationStructureTrianglesDisplacementMicromapNV;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// VK_AMDX_dense_geometry_format is a preprocessor guard. Do not pass it to API calls.
|
|
||||||
#define VK_AMDX_dense_geometry_format 1
|
|
||||||
#define VK_AMDX_DENSE_GEOMETRY_FORMAT_SPEC_VERSION 1
|
|
||||||
#define VK_AMDX_DENSE_GEOMETRY_FORMAT_EXTENSION_NAME "VK_AMDX_dense_geometry_format"
|
|
||||||
#define VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_BYTE_ALIGNMENT_AMDX 128U
|
|
||||||
#define VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_BYTE_STRIDE_AMDX 128U
|
|
||||||
|
|
||||||
typedef enum VkCompressedTriangleFormatAMDX {
|
|
||||||
VK_COMPRESSED_TRIANGLE_FORMAT_DGF1_AMDX = 0,
|
|
||||||
VK_COMPRESSED_TRIANGLE_FORMAT_MAX_ENUM_AMDX = 0x7FFFFFFF
|
|
||||||
} VkCompressedTriangleFormatAMDX;
|
|
||||||
typedef struct VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
VkBool32 denseGeometryFormat;
|
|
||||||
} VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX;
|
|
||||||
|
|
||||||
typedef struct VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
VkDeviceOrHostAddressConstKHR compressedData;
|
|
||||||
VkDeviceSize dataSize;
|
|
||||||
uint32_t numTriangles;
|
|
||||||
uint32_t numVertices;
|
|
||||||
uint32_t maxPrimitiveIndex;
|
|
||||||
uint32_t maxGeometryIndex;
|
|
||||||
VkCompressedTriangleFormatAMDX format;
|
|
||||||
} VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Vendored
+2536
-8022
File diff suppressed because it is too large
Load Diff
Vendored
+1
-5
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_DIRECTFB_H_ 1
|
#define VULKAN_DIRECTFB_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -36,21 +36,17 @@ typedef VkResult (VKAPI_PTR *PFN_vkCreateDirectFBSurfaceEXT)(VkInstance instance
|
|||||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb);
|
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT(
|
||||||
VkInstance instance,
|
VkInstance instance,
|
||||||
const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo,
|
const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT(
|
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT(
|
||||||
VkPhysicalDevice physicalDevice,
|
VkPhysicalDevice physicalDevice,
|
||||||
uint32_t queueFamilyIndex,
|
uint32_t queueFamilyIndex,
|
||||||
IDirectFB* dfb);
|
IDirectFB* dfb);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1359
-4148
File diff suppressed because it is too large
Load Diff
+195
-1148
File diff suppressed because it is too large
Load Diff
+2988
-5974
File diff suppressed because it is too large
Load Diff
Vendored
+1
-21
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_FUCHSIA_H_ 1
|
#define VULKAN_FUCHSIA_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -34,14 +34,12 @@ typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA {
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
|
||||||
VkInstance instance,
|
VkInstance instance,
|
||||||
const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
|
const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_FUCHSIA_external_memory is a preprocessor guard. Do not pass it to API calls.
|
// VK_FUCHSIA_external_memory is a preprocessor guard. Do not pass it to API calls.
|
||||||
@@ -72,21 +70,17 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
|
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
|
const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
|
||||||
zx_handle_t* pZirconHandle);
|
zx_handle_t* pZirconHandle);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkExternalMemoryHandleTypeFlagBits handleType,
|
VkExternalMemoryHandleTypeFlagBits handleType,
|
||||||
zx_handle_t zirconHandle,
|
zx_handle_t zirconHandle,
|
||||||
VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
|
VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_FUCHSIA_external_semaphore is a preprocessor guard. Do not pass it to API calls.
|
// VK_FUCHSIA_external_semaphore is a preprocessor guard. Do not pass it to API calls.
|
||||||
@@ -113,19 +107,15 @@ typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
|
typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
|
const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
|
const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
|
||||||
zx_handle_t* pZirconHandle);
|
zx_handle_t* pZirconHandle);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_FUCHSIA_buffer_collection is a preprocessor guard. Do not pass it to API calls.
|
// VK_FUCHSIA_buffer_collection is a preprocessor guard. Do not pass it to API calls.
|
||||||
@@ -238,42 +228,32 @@ typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device,
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties);
|
typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
|
const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkBufferCollectionFUCHSIA* pCollection);
|
VkBufferCollectionFUCHSIA* pCollection);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkBufferCollectionFUCHSIA collection,
|
VkBufferCollectionFUCHSIA collection,
|
||||||
const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
|
const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkBufferCollectionFUCHSIA collection,
|
VkBufferCollectionFUCHSIA collection,
|
||||||
const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
|
const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
|
VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkBufferCollectionFUCHSIA collection,
|
VkBufferCollectionFUCHSIA collection,
|
||||||
const VkAllocationCallbacks* pAllocator);
|
const VkAllocationCallbacks* pAllocator);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA(
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkBufferCollectionFUCHSIA collection,
|
VkBufferCollectionFUCHSIA collection,
|
||||||
VkBufferCollectionPropertiesFUCHSIA* pProperties);
|
VkBufferCollectionPropertiesFUCHSIA* pProperties);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+13070
-17911
File diff suppressed because it is too large
Load Diff
Vendored
+1
-3
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_GGP_H_ 1
|
#define VULKAN_GGP_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -34,14 +34,12 @@ typedef struct VkStreamDescriptorSurfaceCreateInfoGGP {
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
|
||||||
VkInstance instance,
|
VkInstance instance,
|
||||||
const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
|
const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_GGP_frame_token is a preprocessor guard. Do not pass it to API calls.
|
// VK_GGP_frame_token is a preprocessor guard. Do not pass it to API calls.
|
||||||
|
|||||||
+6851
-12946
File diff suppressed because it is too large
Load Diff
Vendored
+300
-4786
File diff suppressed because it is too large
Load Diff
+40
-70
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2015-2026 The Khronos Group Inc.
|
// Copyright 2015-2024 The Khronos Group Inc.
|
||||||
//
|
//
|
||||||
// SPDX-License-Identifier: Apache-2.0 OR MIT
|
// SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
//
|
//
|
||||||
@@ -35,18 +35,6 @@
|
|||||||
# include <ciso646>
|
# include <ciso646>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define VULKAN_HPP_STRINGIFY2( text ) #text
|
|
||||||
#define VULKAN_HPP_STRINGIFY( text ) VULKAN_HPP_STRINGIFY2( text )
|
|
||||||
#define VULKAN_HPP_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE )
|
|
||||||
|
|
||||||
#if defined( __clang__ ) || defined( __GNUC__ ) || defined( __GNUG__ )
|
|
||||||
# define VULKAN_HPP_COMPILE_WARNING( text ) _Pragma( VULKAN_HPP_STRINGIFY( GCC warning text ) )
|
|
||||||
#elif defined( _MSC_VER )
|
|
||||||
# define VULKAN_HPP_COMPILE_WARNING( text ) _Pragma( VULKAN_HPP_STRINGIFY( message( __FILE__ "(" VULKAN_HPP_STRINGIFY( __LINE__ ) "): warning: " text ) ) )
|
|
||||||
#else
|
|
||||||
# define VULKAN_HPP_COMPILE_WARNING( text )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
|
#if defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
|
||||||
# if !defined( VULKAN_HPP_NO_SMART_HANDLE )
|
# if !defined( VULKAN_HPP_NO_SMART_HANDLE )
|
||||||
# define VULKAN_HPP_NO_SMART_HANDLE
|
# define VULKAN_HPP_NO_SMART_HANDLE
|
||||||
@@ -87,43 +75,20 @@
|
|||||||
# define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1
|
# define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL == 1
|
|
||||||
# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNX__ ) || defined( __Fuchsia__ ) && !defined( VULKAN_HPP_CXX_MODULE )
|
|
||||||
# include <dlfcn.h>
|
|
||||||
# elif defined( _WIN32 ) && !defined( VULKAN_HPP_NO_WIN32_PROTOTYPES )
|
|
||||||
using HINSTANCE = struct HINSTANCE__ *;
|
|
||||||
# if defined( _WIN64 )
|
|
||||||
# include <cstdint>
|
|
||||||
using FARPROC = int64_t( __stdcall * )();
|
|
||||||
# else
|
|
||||||
using FARPROC = int( __stdcall * )();
|
|
||||||
# endif
|
|
||||||
extern "C" __declspec( dllimport ) HINSTANCE __stdcall LoadLibraryA( char const * lpLibFileName );
|
|
||||||
extern "C" __declspec( dllimport ) int __stdcall FreeLibrary( HINSTANCE hLibModule );
|
|
||||||
extern "C" __declspec( dllimport ) FARPROC __stdcall GetProcAddress( HINSTANCE hModule, char const * lpProcName );
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined( __has_include )
|
#if !defined( __has_include )
|
||||||
# define __has_include( x ) false
|
# define __has_include( x ) false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( __cpp_lib_three_way_comparison ) && ( 201907 <= __cpp_lib_three_way_comparison ) && __has_include( <compare> ) && !defined( VULKAN_HPP_NO_SPACESHIP_OPERATOR )
|
#if ( 201907 <= __cpp_lib_three_way_comparison ) && __has_include( <compare> ) && !defined( VULKAN_HPP_NO_SPACESHIP_OPERATOR )
|
||||||
# define VULKAN_HPP_HAS_SPACESHIP_OPERATOR
|
# define VULKAN_HPP_HAS_SPACESHIP_OPERATOR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( __cpp_lib_span ) && ( 201803 <= __cpp_lib_span )
|
#if ( 201803 <= __cpp_lib_span )
|
||||||
# define VULKAN_HPP_SUPPORT_SPAN
|
# define VULKAN_HPP_SUPPORT_SPAN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( VULKAN_HPP_CXX_MODULE )
|
#if defined( __cpp_lib_modules ) && !defined( VULKAN_HPP_STD_MODULE ) && defined( VULKAN_HPP_ENABLE_STD_MODULE )
|
||||||
# define VULKAN_HPP_EXPORT export
|
# define VULKAN_HPP_STD_MODULE std.compat
|
||||||
#else
|
|
||||||
# define VULKAN_HPP_EXPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined( VULKAN_HPP_CXX_MODULE ) && !( defined( __cpp_modules ) && defined( __cpp_lib_modules ) )
|
|
||||||
VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ named modules and the standard library module." )
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef VK_USE_64_BIT_PTR_DEFINES
|
#ifndef VK_USE_64_BIT_PTR_DEFINES
|
||||||
@@ -193,12 +158,7 @@ VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ name
|
|||||||
# else
|
# else
|
||||||
# define VULKAN_HPP_CONSTEXPR_14
|
# define VULKAN_HPP_CONSTEXPR_14
|
||||||
# endif
|
# endif
|
||||||
# if 201603 <= __cpp_constexpr
|
# if ( 201907 <= __cpp_constexpr ) && ( !defined( __GNUC__ ) || ( 110400 < GCC_VERSION ) )
|
||||||
# define VULKAN_HPP_CONSTEXPR_17 constexpr
|
|
||||||
# else
|
|
||||||
# define VULKAN_HPP_CONSTEXPR_17
|
|
||||||
# endif
|
|
||||||
# if ( 201907 <= __cpp_constexpr ) && ( !defined( __GNUC__ ) || ( 120000 <= GCC_VERSION ) )
|
|
||||||
# define VULKAN_HPP_CONSTEXPR_20 constexpr
|
# define VULKAN_HPP_CONSTEXPR_20 constexpr
|
||||||
# else
|
# else
|
||||||
# define VULKAN_HPP_CONSTEXPR_20
|
# define VULKAN_HPP_CONSTEXPR_20
|
||||||
@@ -256,18 +216,14 @@ VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ name
|
|||||||
# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
|
# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 17 <= VULKAN_HPP_CPP_VERSION
|
|
||||||
# define VULKAN_HPP_MAYBE_UNUSED [[maybe_unused]]
|
|
||||||
# define VULKAN_HPP_UNUSED( var )
|
|
||||||
#else
|
|
||||||
# define VULKAN_HPP_MAYBE_UNUSED
|
|
||||||
# define VULKAN_HPP_UNUSED( var ) ( (void)( var ) )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined( VULKAN_HPP_NAMESPACE )
|
#if !defined( VULKAN_HPP_NAMESPACE )
|
||||||
# define VULKAN_HPP_NAMESPACE vk
|
# define VULKAN_HPP_NAMESPACE vk
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define VULKAN_HPP_STRINGIFY2( text ) #text
|
||||||
|
#define VULKAN_HPP_STRINGIFY( text ) VULKAN_HPP_STRINGIFY2( text )
|
||||||
|
#define VULKAN_HPP_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE )
|
||||||
|
|
||||||
#if !defined( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC )
|
#if !defined( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC )
|
||||||
# if defined( VK_NO_PROTOTYPES )
|
# if defined( VK_NO_PROTOTYPES )
|
||||||
# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
|
# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
|
||||||
@@ -299,20 +255,19 @@ VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ name
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC_TYPE )
|
namespace VULKAN_HPP_NAMESPACE
|
||||||
# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC_TYPE VULKAN_HPP_NAMESPACE::detail::DispatchLoaderDynamic
|
{
|
||||||
#endif
|
namespace detail
|
||||||
#if !defined( VULKAN_HPP_DISPATCH_LOADER_STATIC_TYPE )
|
{
|
||||||
# define VULKAN_HPP_DISPATCH_LOADER_STATIC_TYPE VULKAN_HPP_NAMESPACE::detail::DispatchLoaderStatic
|
class DispatchLoaderDynamic;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER_TYPE )
|
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER )
|
||||||
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
|
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
|
||||||
# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE VULKAN_HPP_DISPATCH_LOADER_DYNAMIC_TYPE
|
extern VULKAN_HPP_STORAGE_API DispatchLoaderDynamic defaultDispatchLoaderDynamic;
|
||||||
# else
|
|
||||||
# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE VULKAN_HPP_DISPATCH_LOADER_STATIC_TYPE
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace VULKAN_HPP_NAMESPACE
|
||||||
|
|
||||||
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER )
|
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER )
|
||||||
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
|
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
|
||||||
@@ -329,18 +284,27 @@ VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ name
|
|||||||
# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::detail::getDispatchLoaderStatic()
|
# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::detail::getDispatchLoaderStatic()
|
||||||
# define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
# define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
||||||
# endif
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER_TYPE )
|
||||||
|
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
|
||||||
|
# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderDynamic
|
||||||
# else
|
# else
|
||||||
# define VULKAN_HPP_DEFAULT_DISPATCHER_HANDLED
|
# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderStatic
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( VULKAN_HPP_NO_DEFAULT_DISPATCHER )
|
#if defined( VULKAN_HPP_NO_DEFAULT_DISPATCHER )
|
||||||
# define VULKAN_HPP_DEFAULT_ASSIGNMENT( assignment )
|
# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT
|
||||||
|
# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT
|
||||||
|
# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT
|
||||||
#else
|
#else
|
||||||
# define VULKAN_HPP_DEFAULT_ASSIGNMENT( assignment ) = assignment
|
# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT = {}
|
||||||
|
# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT = nullptr
|
||||||
|
# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT = VULKAN_HPP_DEFAULT_DISPATCHER
|
||||||
#endif
|
#endif
|
||||||
#define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT VULKAN_HPP_DEFAULT_ASSIGNMENT( VULKAN_HPP_DEFAULT_DISPATCHER )
|
|
||||||
|
|
||||||
#if !defined( VULKAN_HPP_EXPECTED ) && ( 23 <= VULKAN_HPP_CPP_VERSION ) && defined( __cpp_lib_expected ) && defined( VULKAN_HPP_USE_STD_EXPECTED )
|
#if !defined( VULKAN_HPP_EXPECTED ) && ( 23 <= VULKAN_HPP_CPP_VERSION ) && defined( __cpp_lib_expected )
|
||||||
# if !( defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) )
|
# if !( defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) )
|
||||||
# include <expected>
|
# include <expected>
|
||||||
# endif
|
# endif
|
||||||
@@ -350,7 +314,13 @@ VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ name
|
|||||||
|
|
||||||
#if !defined( VULKAN_HPP_RAII_NAMESPACE )
|
#if !defined( VULKAN_HPP_RAII_NAMESPACE )
|
||||||
# define VULKAN_HPP_RAII_NAMESPACE raii
|
# define VULKAN_HPP_RAII_NAMESPACE raii
|
||||||
# define VULKAN_HPP_RAII_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE )
|
#endif
|
||||||
|
|
||||||
|
#if defined( VULKAN_HPP_NO_EXCEPTIONS ) && defined( VULKAN_HPP_EXPECTED )
|
||||||
|
# define VULKAN_HPP_RAII_NO_EXCEPTIONS
|
||||||
|
# define VULKAN_HPP_RAII_CREATE_NOEXCEPT noexcept
|
||||||
|
#else
|
||||||
|
# define VULKAN_HPP_RAII_CREATE_NOEXCEPT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Vendored
+1
-3
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_IOS_H_ 1
|
#define VULKAN_IOS_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -34,14 +34,12 @@ typedef struct VkIOSSurfaceCreateInfoMVK {
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
|
||||||
VkInstance instance,
|
VkInstance instance,
|
||||||
const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
|
const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-3
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_MACOS_H_ 1
|
#define VULKAN_MACOS_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -34,14 +34,12 @@ typedef struct VkMacOSSurfaceCreateInfoMVK {
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
|
||||||
VkInstance instance,
|
VkInstance instance,
|
||||||
const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
|
const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-50
@@ -2,7 +2,7 @@
|
|||||||
#define VULKAN_METAL_H_ 1
|
#define VULKAN_METAL_H_ 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
** Copyright 2015-2024 The Khronos Group Inc.
|
||||||
**
|
**
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -40,14 +40,12 @@ typedef struct VkMetalSurfaceCreateInfoEXT {
|
|||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
|
||||||
VkInstance instance,
|
VkInstance instance,
|
||||||
const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
|
const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
|
||||||
const VkAllocationCallbacks* pAllocator,
|
const VkAllocationCallbacks* pAllocator,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_EXT_metal_objects is a preprocessor guard. Do not pass it to API calls.
|
// VK_EXT_metal_objects is a preprocessor guard. Do not pass it to API calls.
|
||||||
@@ -185,57 +183,10 @@ typedef struct VkImportMetalSharedEventInfoEXT {
|
|||||||
typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
|
typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
#ifndef VK_NO_PROTOTYPES
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT(
|
VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT(
|
||||||
VkDevice device,
|
VkDevice device,
|
||||||
VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
|
VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_EXT_external_memory_metal is a preprocessor guard. Do not pass it to API calls.
|
|
||||||
#define VK_EXT_external_memory_metal 1
|
|
||||||
#define VK_EXT_EXTERNAL_MEMORY_METAL_SPEC_VERSION 1
|
|
||||||
#define VK_EXT_EXTERNAL_MEMORY_METAL_EXTENSION_NAME "VK_EXT_external_memory_metal"
|
|
||||||
typedef struct VkImportMemoryMetalHandleInfoEXT {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
VkExternalMemoryHandleTypeFlagBits handleType;
|
|
||||||
void* handle;
|
|
||||||
} VkImportMemoryMetalHandleInfoEXT;
|
|
||||||
|
|
||||||
typedef struct VkMemoryMetalHandlePropertiesEXT {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
uint32_t memoryTypeBits;
|
|
||||||
} VkMemoryMetalHandlePropertiesEXT;
|
|
||||||
|
|
||||||
typedef struct VkMemoryGetMetalHandleInfoEXT {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
VkDeviceMemory memory;
|
|
||||||
VkExternalMemoryHandleTypeFlagBits handleType;
|
|
||||||
} VkMemoryGetMetalHandleInfoEXT;
|
|
||||||
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandleEXT)(VkDevice device, const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, void** pHandle);
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandlePropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHandle, VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties);
|
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandleEXT(
|
|
||||||
VkDevice device,
|
|
||||||
const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo,
|
|
||||||
void** pHandle);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandlePropertiesEXT(
|
|
||||||
VkDevice device,
|
|
||||||
VkExternalMemoryHandleTypeFlagBits handleType,
|
|
||||||
const void* pHandle,
|
|
||||||
VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
-120
@@ -1,120 +0,0 @@
|
|||||||
#ifndef VULKAN_OHOS_H_
|
|
||||||
#define VULKAN_OHOS_H_ 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Copyright 2015-2026 The Khronos Group Inc.
|
|
||||||
**
|
|
||||||
** SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
|
||||||
**
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// VK_OHOS_external_memory is a preprocessor guard. Do not pass it to API calls.
|
|
||||||
#define VK_OHOS_external_memory 1
|
|
||||||
struct OH_NativeBuffer;
|
|
||||||
#define VK_OHOS_EXTERNAL_MEMORY_SPEC_VERSION 1
|
|
||||||
#define VK_OHOS_EXTERNAL_MEMORY_EXTENSION_NAME "VK_OHOS_external_memory"
|
|
||||||
typedef struct VkNativeBufferUsageOHOS {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
uint64_t OHOSNativeBufferUsage;
|
|
||||||
} VkNativeBufferUsageOHOS;
|
|
||||||
|
|
||||||
typedef struct VkNativeBufferPropertiesOHOS {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
VkDeviceSize allocationSize;
|
|
||||||
uint32_t memoryTypeBits;
|
|
||||||
} VkNativeBufferPropertiesOHOS;
|
|
||||||
|
|
||||||
typedef struct VkNativeBufferFormatPropertiesOHOS {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
VkFormat format;
|
|
||||||
uint64_t externalFormat;
|
|
||||||
VkFormatFeatureFlags formatFeatures;
|
|
||||||
VkComponentMapping samplerYcbcrConversionComponents;
|
|
||||||
VkSamplerYcbcrModelConversion suggestedYcbcrModel;
|
|
||||||
VkSamplerYcbcrRange suggestedYcbcrRange;
|
|
||||||
VkChromaLocation suggestedXChromaOffset;
|
|
||||||
VkChromaLocation suggestedYChromaOffset;
|
|
||||||
} VkNativeBufferFormatPropertiesOHOS;
|
|
||||||
|
|
||||||
typedef struct VkImportNativeBufferInfoOHOS {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
struct OH_NativeBuffer* buffer;
|
|
||||||
} VkImportNativeBufferInfoOHOS;
|
|
||||||
|
|
||||||
typedef struct VkMemoryGetNativeBufferInfoOHOS {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
VkDeviceMemory memory;
|
|
||||||
} VkMemoryGetNativeBufferInfoOHOS;
|
|
||||||
|
|
||||||
typedef struct VkExternalFormatOHOS {
|
|
||||||
VkStructureType sType;
|
|
||||||
void* pNext;
|
|
||||||
uint64_t externalFormat;
|
|
||||||
} VkExternalFormatOHOS;
|
|
||||||
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetNativeBufferPropertiesOHOS)(VkDevice device, const struct OH_NativeBuffer* buffer, VkNativeBufferPropertiesOHOS* pProperties);
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryNativeBufferOHOS)(VkDevice device, const VkMemoryGetNativeBufferInfoOHOS* pInfo, struct OH_NativeBuffer** pBuffer);
|
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetNativeBufferPropertiesOHOS(
|
|
||||||
VkDevice device,
|
|
||||||
const struct OH_NativeBuffer* buffer,
|
|
||||||
VkNativeBufferPropertiesOHOS* pProperties);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryNativeBufferOHOS(
|
|
||||||
VkDevice device,
|
|
||||||
const VkMemoryGetNativeBufferInfoOHOS* pInfo,
|
|
||||||
struct OH_NativeBuffer** pBuffer);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// VK_OHOS_surface is a preprocessor guard. Do not pass it to API calls.
|
|
||||||
#define VK_OHOS_surface 1
|
|
||||||
typedef struct NativeWindow OHNativeWindow;
|
|
||||||
#define VK_OHOS_SURFACE_SPEC_VERSION 1
|
|
||||||
#define VK_OHOS_SURFACE_EXTENSION_NAME "VK_OHOS_surface"
|
|
||||||
typedef VkFlags VkSurfaceCreateFlagsOHOS;
|
|
||||||
typedef struct VkSurfaceCreateInfoOHOS {
|
|
||||||
VkStructureType sType;
|
|
||||||
const void* pNext;
|
|
||||||
VkSurfaceCreateFlagsOHOS flags;
|
|
||||||
OHNativeWindow* window;
|
|
||||||
} VkSurfaceCreateInfoOHOS;
|
|
||||||
|
|
||||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateSurfaceOHOS)(VkInstance instance, const VkSurfaceCreateInfoOHOS* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
|
||||||
|
|
||||||
#ifndef VK_NO_PROTOTYPES
|
|
||||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateSurfaceOHOS(
|
|
||||||
VkInstance instance,
|
|
||||||
const VkSurfaceCreateInfoOHOS* pCreateInfo,
|
|
||||||
const VkAllocationCallbacks* pAllocator,
|
|
||||||
VkSurfaceKHR* pSurface);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user