mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-06-03 23:28:15 +02:00
Compare commits
523 Commits
f1e89ca90e
..
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:
|
||||
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
target-branch: "indev"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
name: Fetch Dependencies
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * 0' # Runs weekly
|
||||
|
||||
@@ -11,24 +10,20 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Run Fetch Dependencies Script
|
||||
run: cd scripts && bash ./fetch_dependencies.sh
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
with:
|
||||
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
||||
delete-branch: true
|
||||
title: update dependencies
|
||||
commit-message: "[BOT] update dependencies"
|
||||
committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
author: kbJeff-8 <kbJeff-8@users.noreply.github.com>
|
||||
committer: GitHub <noreply@github.com>
|
||||
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
|
||||
signoff: false
|
||||
base: indev
|
||||
assignees: Kbz-8
|
||||
reviewers: Kbz-8
|
||||
branch: auto_deps_updates
|
||||
labels: |
|
||||
automated
|
||||
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/first-interaction@v2
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: |
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
name: Linux (clang)
|
||||
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [create-pull-request]
|
||||
pull_request:
|
||||
push:
|
||||
paths-ignore:
|
||||
@@ -17,13 +15,14 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-24.04]
|
||||
arch: [x86_64]
|
||||
mode: [release]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
name: Linux (gcc)
|
||||
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [create-pull-request]
|
||||
pull_request:
|
||||
push:
|
||||
paths-ignore:
|
||||
@@ -17,13 +15,14 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-24.04]
|
||||
arch: [x86_64]
|
||||
mode: [release]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install system dependencies
|
||||
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
|
||||
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [create-pull-request]
|
||||
pull_request:
|
||||
push:
|
||||
paths-ignore:
|
||||
@@ -16,14 +14,15 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macOS-latest]
|
||||
arch: [x86_64, arm]
|
||||
arch: [x86_64]
|
||||
mode: [release]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Install system dependencies
|
||||
- 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)
|
||||
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [create-pull-request]
|
||||
pull_request:
|
||||
push:
|
||||
paths-ignore:
|
||||
@@ -16,7 +14,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-latest]
|
||||
arch: [x64, x86]
|
||||
arch: [x64]
|
||||
mode: [release]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
@@ -28,7 +26,7 @@ jobs:
|
||||
run: echo "key=$(date +'%W')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Force xmake to a specific folder (for cache)
|
||||
- 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/
|
||||
build/
|
||||
example/Test
|
||||
subprojects/*/
|
||||
subprojects/.wraplock
|
||||
@@ -1,5 +1,5 @@
|
||||
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
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -4,6 +4,8 @@ MAKE = make --no-print-directory
|
||||
OS ?= $(shell uname -s)
|
||||
DEBUG ?= false
|
||||
TOOLCHAIN ?= clang
|
||||
IMAGES_OPTIMIZED ?= true
|
||||
FORCE_INTEGRATED_GPU ?= false
|
||||
GRAPHICS_MEMORY_DUMP ?= false
|
||||
PROFILER ?= false
|
||||
FORCE_WAYLAND ?= false
|
||||
@@ -36,9 +38,6 @@ GCH = runtime/Includes/PreCompiled.h.gch
|
||||
CCH = runtime/Includes/PreCompiled.h.pch
|
||||
PCH =
|
||||
|
||||
# Personal path, should be overriden with env var
|
||||
UNIT_TESTS_PATH = ../UnitTester/build/Bin/linux_x86_64/MacroUnitTest
|
||||
|
||||
NZSLC ?= nzslc
|
||||
|
||||
ifeq ($(TOOLCHAIN), gcc)
|
||||
@@ -63,6 +62,14 @@ else
|
||||
CXXFLAGS += -O3
|
||||
endif
|
||||
|
||||
ifeq ($(FORCE_INTEGRATED_GPU), true)
|
||||
_ENABLEDFLAGS += FORCE_INTEGRATED_GPU
|
||||
endif
|
||||
|
||||
ifeq ($(IMAGES_OPTIMIZED), true)
|
||||
_ENABLEDFLAGS += IMAGE_OPTIMIZED
|
||||
endif
|
||||
|
||||
ifeq ($(GRAPHICS_MEMORY_DUMP), true)
|
||||
_ENABLEDFLAGS += GRAPHICS_MEMORY_DUMP
|
||||
endif
|
||||
@@ -154,9 +161,6 @@ clean-shaders:
|
||||
|
||||
shaders: clean-shaders $(SPVS)
|
||||
|
||||
tests: debug
|
||||
@$(UNIT_TESTS_PATH) --headless --path="./$(NAME)"
|
||||
|
||||
clean:
|
||||
@$(RM) $(OBJ_DIR)
|
||||
@printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n"
|
||||
|
||||
@@ -3,18 +3,15 @@
|
||||
<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_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 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>
|
||||
</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>
|
||||
|
||||
###### 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
|
||||
|
||||
@@ -24,6 +21,9 @@ Built on top of Vulkan, the MacroLibX takes advantage of its very low-level natu
|
||||
### 💻 Cross-Platform
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
@@ -7,5 +7,6 @@
|
||||
-DMLX_BUILD
|
||||
-DSDL_MAIN_HANDLED
|
||||
-DDEBUG
|
||||
-DIMAGE_OPTIMIZED
|
||||
-D_REENTRANT
|
||||
-isystem/usr/include/SDL2
|
||||
|
||||
+2
-7
@@ -44,16 +44,11 @@ void update(void* param)
|
||||
mlx_set_font(mlx->mlx, "default");
|
||||
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;
|
||||
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, 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
||||
*
|
||||
* @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();
|
||||
|
||||
@@ -122,7 +122,7 @@ typedef struct mlx_window_create_info
|
||||
* @param mlx Internal MLX application
|
||||
* @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);
|
||||
|
||||
@@ -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 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);
|
||||
|
||||
@@ -338,9 +338,9 @@ MLX_API mlx_image mlx_new_image(mlx_context mlx, int width, int height);
|
||||
* @param mlx Internal MLX application
|
||||
* @param filename Path to the png file
|
||||
* @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);
|
||||
|
||||
@@ -361,6 +361,14 @@ MLX_API void mlx_destroy_image(mlx_context mlx, mlx_image image);
|
||||
* @param y Y coordinate in the image
|
||||
*
|
||||
* @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);
|
||||
|
||||
@@ -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 y Y coordinate in the image
|
||||
* @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);
|
||||
|
||||
@@ -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`
|
||||
*
|
||||
* @param mlx Internal MLX application
|
||||
* @param win Internal window
|
||||
* @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);
|
||||
@@ -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
|
||||
*
|
||||
* @param mlx Internal MLX application
|
||||
* @param win Internal window
|
||||
* @param filepath Filepath to the font or "default" to reset to the embedded font
|
||||
* @param scale Scale to apply to the font
|
||||
*/
|
||||
|
||||
+17
-10
@@ -6,7 +6,7 @@
|
||||
/* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
||||
* 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);
|
||||
|
||||
@@ -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
|
||||
* 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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
* @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
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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_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, 2, 4)
|
||||
#define MLX_VERSION MLX_MAKE_VERSION(2, 0, 0)
|
||||
#define MLX_TARGET_VULKAN_API_VERSION MLX_MAKE_VERSION(1, 0, 0)
|
||||
|
||||
// Checking common assumptions
|
||||
|
||||
-107
@@ -1,107 +0,0 @@
|
||||
project('MacroLibX',
|
||||
['c', 'cpp'],
|
||||
version : '2.2.4',
|
||||
license : 'MIT',
|
||||
meson_version : '>= 1.9.0',
|
||||
default_options : ['warning_level=2', 'optimization=3', 'cpp_std=c++20'])
|
||||
|
||||
add_project_arguments('-Wno-error=', language : 'c')
|
||||
add_project_arguments('-fPIC', language : 'c')
|
||||
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'),
|
||||
include_directories('runtime/Includes'),
|
||||
include_directories('runtime/Sources'),
|
||||
include_directories('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 AddPreRenderHook(void(*f)(VkCommandBuffer, void*), void* param);
|
||||
|
||||
[[nodiscard]] MLX_FORCEINLINE bool HasWindow() const noexcept { return m_has_window; }
|
||||
[[nodiscard]] MLX_FORCEINLINE Renderer& GetRenderer() { return m_renderer; }
|
||||
[[nodiscard]] MLX_FORCEINLINE Scene& GetScene() { return *p_scene; }
|
||||
|
||||
~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:
|
||||
Renderer m_renderer;
|
||||
SceneRenderer m_scene_renderer;
|
||||
PutPixelManager m_put_pixel_manager;
|
||||
std::vector<Hook> m_hooks;
|
||||
std::shared_ptr<Window> p_window;
|
||||
std::unique_ptr<Scene> p_scene;
|
||||
|
||||
|
||||
@@ -8,9 +8,4 @@ namespace mlx
|
||||
MLX_PROFILE_FUNCTION();
|
||||
p_scene->TryEraseSpriteFromTexture(texture);
|
||||
}
|
||||
|
||||
void GraphicsSupport::AddPreRenderHook(void(*f)(VkCommandBuffer, void*), void* param)
|
||||
{
|
||||
m_hooks.emplace_back(f, param);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,10 +14,7 @@ namespace mlx
|
||||
Handle CreateWindow(const mlx_window_create_info* info, std::int32_t& id, bool hidden);
|
||||
void DestroyWindow(Handle window) noexcept;
|
||||
|
||||
SDL_Window* GetRawWindow(Handle window) noexcept;
|
||||
|
||||
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;
|
||||
std::vector<const char*> GetRequiredVulkanInstanceExtentions(Handle window) const noexcept;
|
||||
@@ -53,7 +50,6 @@ namespace mlx
|
||||
private:
|
||||
static SDLManager* s_instance;
|
||||
|
||||
std::function<void(SDL_Event*)> m_binding_hook;
|
||||
std::unordered_set<Handle> m_windows_registry;
|
||||
bool m_drop_sdl_responsability = false;
|
||||
};
|
||||
|
||||
@@ -7,7 +7,9 @@ namespace mlx
|
||||
{
|
||||
public:
|
||||
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:
|
||||
std::uint64_t m_uuid;
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace mlx
|
||||
|
||||
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;
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace mlx
|
||||
class PutPixelManager
|
||||
{
|
||||
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
|
||||
NonOwningPtr<Texture> DrawPixel(int x, int y, std::uint64_t draw_layer, mlx_color color);
|
||||
@@ -20,7 +20,6 @@ namespace mlx
|
||||
|
||||
private:
|
||||
NonOwningPtr<Texture> GetLayer(std::uint64_t draw_layer, bool& is_newlayer);
|
||||
std::unique_ptr<Texture> NewTexture();
|
||||
|
||||
private:
|
||||
std::unordered_map<std::uint64_t, NonOwningPtr<Texture>> m_placements;
|
||||
|
||||
@@ -38,8 +38,6 @@ namespace mlx
|
||||
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); }
|
||||
|
||||
[[nodiscard]] inline Handle GetRawHandle() const noexcept { return p_window; }
|
||||
|
||||
void Destroy() noexcept;
|
||||
|
||||
~Window() { Destroy(); }
|
||||
|
||||
@@ -17,21 +17,8 @@
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#if __has_include(<SDL2/SDL.h>)
|
||||
#include <SDL2/SDL.h>
|
||||
#elif __has_include(<SDL.h>)
|
||||
#include <SDL.h>
|
||||
#else
|
||||
#error Failed to find SDL2 headers
|
||||
#endif
|
||||
|
||||
#if __has_include(<SDL2/SDL_vulkan.h>)
|
||||
#include <SDL2/SDL_vulkan.h>
|
||||
#elif __has_include(<SDL_vulkan.h>)
|
||||
#include <SDL_vulkan.h>
|
||||
#else
|
||||
#error Failed to find SDL2 Vulkan headers
|
||||
#endif
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_vulkan.h>
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
@@ -65,6 +52,15 @@
|
||||
#include <ostream>
|
||||
#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
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace mlx
|
||||
|
||||
std::shared_ptr<class DescriptorSet> RequestDescriptorSet(const ShaderSetLayout& layout, ShaderType shader_type);
|
||||
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]] MLX_FORCEINLINE std::size_t GetNumberOfSetsAllocated() const noexcept { return m_allocation_count; }
|
||||
|
||||
~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_used_sets;
|
||||
VkDescriptorPool m_pool;
|
||||
std::size_t m_allocation_count = 0;
|
||||
};
|
||||
|
||||
class DescriptorPoolManager
|
||||
@@ -43,13 +44,13 @@ namespace mlx
|
||||
public:
|
||||
DescriptorPoolManager() = default;
|
||||
|
||||
DescriptorPool& GetAvailablePool(const ShaderSetLayout& layout, ShaderType shader_type);
|
||||
DescriptorPool& GetAvailablePool();
|
||||
void Destroy();
|
||||
|
||||
~DescriptorPoolManager() = default;
|
||||
|
||||
private:
|
||||
std::vector<std::unique_ptr<DescriptorPool>> m_pools;
|
||||
std::vector<DescriptorPool> m_pools;
|
||||
};
|
||||
|
||||
class DescriptorSet : public std::enable_shared_from_this<DescriptorSet>
|
||||
|
||||
@@ -89,13 +89,7 @@ namespace mlx
|
||||
mlx_color GetPixel(int x, int y) noexcept;
|
||||
void GetRegion(int x, int y, int w, int h, mlx_color* dst) noexcept;
|
||||
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);
|
||||
|
||||
~Texture() override { Destroy(); }
|
||||
|
||||
@@ -38,8 +38,8 @@ namespace mlx
|
||||
|
||||
private:
|
||||
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_render_finished_semaphores;
|
||||
std::array<VkCommandBuffer, MAX_FRAMES_IN_FLIGHT> m_cmd_buffers;
|
||||
std::array<VkFence, MAX_FRAMES_IN_FLIGHT> m_cmd_fences;
|
||||
NonOwningPtr<Window> p_window;
|
||||
|
||||
@@ -2,11 +2,10 @@
|
||||
|
||||
#include <Core/Application.h>
|
||||
#include <Core/SDLManager.h>
|
||||
#include <Renderer/RenderCore.h>
|
||||
#include <mlx.h>
|
||||
#include <mlx_extended.h>
|
||||
#include <Core/Memory.h>
|
||||
#include <Core/Handles.h>
|
||||
#include <Renderer/RenderCore.h>
|
||||
|
||||
static mlx::Application* __internal_application_ptr = nullptr;
|
||||
|
||||
@@ -225,17 +224,17 @@ extern "C"
|
||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||
if (filename == nullptr)
|
||||
{
|
||||
mlx::Error("Image loader: filename is NULL");
|
||||
mlx::Error("PNG loader: filename is NULL");
|
||||
return nullptr;
|
||||
}
|
||||
std::filesystem::path file(filename);
|
||||
if(file.extension() != ".png" &&
|
||||
if( file.extension() != ".png" &&
|
||||
file.extension() != ".jpg" &&
|
||||
file.extension() != ".jpeg" &&
|
||||
file.extension() != ".bmp" &&
|
||||
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 mlx->app->NewStbTexture(filename, width, height);
|
||||
@@ -304,14 +303,7 @@ extern "C"
|
||||
mlx::Error("Font loader: filepath is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
std::filesystem::path file(filepath);
|
||||
if (std::strcmp(filepath, "default") != 0 && !std::filesystem::exists(file))
|
||||
{
|
||||
mlx::Error("TTF loader: unable to find file '%'", filepath);
|
||||
return;
|
||||
}
|
||||
|
||||
if(std::strcmp(filepath, "default") != 0 && file.extension() != ".ttf" && file.extension() != ".tte")
|
||||
{
|
||||
mlx::Error("TTF loader: not a truetype font file '%'", filepath);
|
||||
@@ -331,14 +323,7 @@ extern "C"
|
||||
mlx::Error("Font loader: filepath is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
std::filesystem::path file(filepath);
|
||||
if (std::strcmp(filepath, "default") != 0 && !std::filesystem::exists(file))
|
||||
{
|
||||
mlx::Error("TTF loader: unable to find file '%'", filepath);
|
||||
return;
|
||||
}
|
||||
|
||||
if(std::strcmp(filepath, "default") != 0 && file.extension() != ".ttf" && file.extension() != ".tte")
|
||||
{
|
||||
mlx::Error("TTF loader: not a truetype font file '%'", filepath);
|
||||
@@ -441,165 +426,4 @@ extern "C"
|
||||
return;
|
||||
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_draw_layer = 0;
|
||||
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();
|
||||
#ifdef GRAPHICS_MEMORY_DUMP
|
||||
// Dump memory usage to file every two seconds
|
||||
|
||||
@@ -22,8 +22,8 @@ namespace mlx
|
||||
using namespace std::literals;
|
||||
|
||||
#ifndef DEBUG
|
||||
if(type == LogType::Debug && std::getenv("MLX_DEBUG_LOGS") == nullptr)
|
||||
return;
|
||||
if(type == LogType::Debug)
|
||||
return;
|
||||
#endif
|
||||
|
||||
std::string code_infos;
|
||||
|
||||
@@ -21,14 +21,14 @@ namespace mlx
|
||||
|
||||
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*))
|
||||
alignment = sizeof(void*);
|
||||
if(size % alignment != 0)
|
||||
size += alignment - (size % alignment);
|
||||
if(alignment < sizeof(void*))
|
||||
alignment = sizeof(void*);
|
||||
if(size % alignment != 0)
|
||||
size += alignment - (size % alignment);
|
||||
|
||||
#ifdef MLX_COMPILER_MSVC
|
||||
void* ptr = _aligned_malloc(alignment, size);
|
||||
#else
|
||||
void* ptr = std::aligned_alloc(alignment, size);
|
||||
#endif
|
||||
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; });
|
||||
|
||||
#ifdef MLX_PLAT_WINDOWS
|
||||
void* ptr2 = _aligned_realloc(ptr, size, alignment);
|
||||
#ifdef MLX_COMPILER_MSVC
|
||||
void* ptr2 = _aligned_realloc(ptr, alignment, size);
|
||||
if(it != s_blocks.end())
|
||||
s_blocks.erase(it);
|
||||
#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; });
|
||||
if(it == s_blocks.end())
|
||||
return;
|
||||
#ifdef MLX_PLAT_WINDOWS
|
||||
#ifdef MLX_COMPILER_MSVC
|
||||
if(it->aligned)
|
||||
_aligned_free(it->ptr);
|
||||
else
|
||||
@@ -105,7 +105,7 @@ namespace mlx
|
||||
{
|
||||
for(const Descriptor& desc : s_blocks)
|
||||
{
|
||||
#ifdef MLX_PLAT_WINDOWS
|
||||
#ifdef MLX_COMPILER_MSVC
|
||||
if(desc.aligned)
|
||||
_aligned_free(desc.ptr);
|
||||
else
|
||||
|
||||
@@ -22,17 +22,15 @@ namespace mlx
|
||||
MLX_PROFILE_FUNCTION();
|
||||
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
|
||||
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
|
||||
SDL_SetHint(SDL_HINT_VIDEODRIVER, "wayland,x11");
|
||||
#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)
|
||||
FatalError("SDL: unable to init all subsystems; %", SDL_GetError());
|
||||
DebugLog("SDL Manager initialized");
|
||||
@@ -80,12 +78,6 @@ namespace mlx
|
||||
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 surface;
|
||||
@@ -224,11 +216,6 @@ namespace mlx
|
||||
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)
|
||||
{
|
||||
SDL_Event event;
|
||||
@@ -265,7 +252,6 @@ namespace mlx
|
||||
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_FOCUS_LOST: functor(MLX_WINDOW_EVENT, id, 7); break;
|
||||
case SDL_WINDOWEVENT_SIZE_CHANGED: functor(MLX_WINDOW_EVENT, id, 8); break;
|
||||
|
||||
default : break;
|
||||
}
|
||||
@@ -274,9 +260,6 @@ namespace mlx
|
||||
|
||||
default: break;
|
||||
}
|
||||
|
||||
if(m_binding_hook)
|
||||
m_binding_hook(&event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,14 +7,7 @@ namespace mlx
|
||||
static std::random_device random_device;
|
||||
static std::mt19937_64 engine(random_device());
|
||||
static std::uniform_int_distribution<std::uint64_t> uniform_distribution;
|
||||
static std::unordered_set<std::uint64_t> registry;
|
||||
|
||||
UUID::UUID()
|
||||
{
|
||||
do
|
||||
{
|
||||
m_uuid = uniform_distribution(engine);
|
||||
} while(registry.contains(m_uuid));
|
||||
registry.emplace(m_uuid);
|
||||
}
|
||||
UUID::UUID() : m_uuid(uniform_distribution(engine)) {}
|
||||
UUID::UUID(std::uint64_t uuid) : m_uuid(uuid) {}
|
||||
}
|
||||
|
||||
@@ -6,29 +6,6 @@
|
||||
|
||||
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)
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
@@ -76,8 +53,21 @@ namespace mlx
|
||||
is_newlayer = true;
|
||||
|
||||
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
|
||||
{
|
||||
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()
|
||||
{
|
||||
m_placements.clear();
|
||||
|
||||
@@ -1,19 +1,11 @@
|
||||
#include <PreCompiled.h>
|
||||
|
||||
#include <mlx.h>
|
||||
#include <Platform/Inputs.h>
|
||||
#include <Core/SDLManager.h>
|
||||
#include <Core/EventBus.h>
|
||||
|
||||
namespace mlx
|
||||
{
|
||||
namespace Internal
|
||||
{
|
||||
struct ResizeEventBroadcast : public EventBase
|
||||
{
|
||||
Event What() const override { return Event::ResizeEventCode; }
|
||||
};
|
||||
}
|
||||
|
||||
void Inputs::FetchInputs()
|
||||
{
|
||||
SDLManager::Get().InputsFetcher([this](mlx_event_type event, int window_id, int code)
|
||||
@@ -22,8 +14,6 @@ namespace mlx
|
||||
return;
|
||||
if(!m_events_hooks.contains(window_id) || m_events_hooks[window_id][event].empty())
|
||||
return;
|
||||
if(event == MLX_WINDOW_EVENT && code == 8)
|
||||
EventBus::SendBroadcast(Internal::ResizeEventBroadcast{});
|
||||
for(const auto& hook : m_events_hooks[window_id][event])
|
||||
{
|
||||
if(hook.fn)
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace mlx
|
||||
|
||||
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||
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);
|
||||
VkFence fence = kvfCreateFence(RenderCore::Get().GetDevice());
|
||||
kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -26,19 +26,19 @@ namespace mlx
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
VkDescriptorPoolSize pool_sizes[] = {
|
||||
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, MAX_FRAMES_IN_FLIGHT * MAX_SETS_PER_POOL },
|
||||
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, MAX_FRAMES_IN_FLIGHT * MAX_SETS_PER_POOL },
|
||||
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, MAX_FRAMES_IN_FLIGHT * MAX_SETS_PER_POOL }
|
||||
{ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, MAX_SETS_PER_POOL },
|
||||
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, MAX_SETS_PER_POOL },
|
||||
{ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, MAX_SETS_PER_POOL }
|
||||
};
|
||||
|
||||
VkDescriptorPoolCreateInfo pool_info{};
|
||||
pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
pool_info.poolSizeCount = sizeof(pool_sizes) / sizeof(pool_sizes[0]);
|
||||
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;
|
||||
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
|
||||
@@ -52,6 +52,7 @@ namespace mlx
|
||||
kvfDestroyDescriptorSetLayout(RenderCore::Get().GetDevice(), set->m_set_layout);
|
||||
RenderCore::Get().vkDestroyDescriptorPool(RenderCore::Get().GetDevice(), m_pool, nullptr);
|
||||
m_pool = VK_NULL_HANDLE;
|
||||
m_allocation_count = 0;
|
||||
m_free_sets.clear();
|
||||
m_used_sets.clear();
|
||||
}
|
||||
@@ -102,6 +103,7 @@ namespace mlx
|
||||
alloc_info.pSetLayouts = &vulkan_layout;
|
||||
VkDescriptorSet vulkan_set;
|
||||
kvfCheckVk(RenderCore::Get().vkAllocateDescriptorSets(RenderCore::Get().GetDevice(), &alloc_info, &vulkan_set));
|
||||
m_allocation_count++;
|
||||
vulkan_sets[i] = vulkan_set;
|
||||
}
|
||||
|
||||
@@ -110,9 +112,9 @@ namespace mlx
|
||||
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;
|
||||
});
|
||||
@@ -122,34 +124,23 @@ namespace mlx
|
||||
m_free_sets.push_back(set);
|
||||
}
|
||||
|
||||
bool DescriptorPool::CanAllocate(const ShaderSetLayout& layout, ShaderType shader_type) const
|
||||
{
|
||||
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)
|
||||
DescriptorPool& DescriptorPoolManager::GetAvailablePool()
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
for(auto& pool : m_pools)
|
||||
{
|
||||
if(pool->CanAllocate(layout, shader_type))
|
||||
return *pool;
|
||||
if(pool.GetNumberOfSetsAllocated() < MAX_SETS_PER_POOL)
|
||||
return pool;
|
||||
}
|
||||
m_pools.emplace_back(std::make_unique<DescriptorPool>())->Init();
|
||||
return *m_pools.back();
|
||||
m_pools.emplace_back().Init();
|
||||
return m_pools.back();
|
||||
}
|
||||
|
||||
void DescriptorPoolManager::Destroy()
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
for(auto& pool : m_pools)
|
||||
pool->Destroy();
|
||||
pool.Destroy();
|
||||
m_pools.clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,9 +22,15 @@
|
||||
#include <stb_image.h>
|
||||
#endif
|
||||
|
||||
#ifdef IMAGE_OPTIMIZED
|
||||
#define TILING VK_IMAGE_TILING_OPTIMAL
|
||||
#else
|
||||
#define TILING VK_IMAGE_TILING_LINEAR
|
||||
#endif
|
||||
|
||||
namespace mlx
|
||||
{
|
||||
MLX_FORCEINLINE mlx_color ReverseColor(mlx_color color)
|
||||
mlx_color ReverseColor(mlx_color color)
|
||||
{
|
||||
mlx_color reversed_color;
|
||||
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)
|
||||
{
|
||||
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::CreateSampler();
|
||||
if(pixels)
|
||||
@@ -212,7 +218,7 @@ namespace mlx
|
||||
void Texture::SetPixel(int x, int y, mlx_color color) noexcept
|
||||
{
|
||||
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;
|
||||
if(!m_staging_buffer.has_value())
|
||||
OpenCPUBuffer();
|
||||
@@ -226,7 +232,7 @@ namespace mlx
|
||||
void Texture::SetRegion(int x, int y, int w, int h, mlx_color* pixels) noexcept
|
||||
{
|
||||
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;
|
||||
if(w < 0 || h < 0)
|
||||
return;
|
||||
@@ -237,9 +243,9 @@ namespace mlx
|
||||
if(moving_x >= static_cast<std::uint32_t>(x + w) || moving_x >= m_width)
|
||||
{
|
||||
moving_x = x;
|
||||
moving_y++;
|
||||
if(moving_y >= static_cast<std::uint32_t>(y + h) || moving_y >= m_height)
|
||||
break;
|
||||
moving_y++;
|
||||
}
|
||||
if constexpr(std::endian::native == std::endian::little)
|
||||
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
|
||||
{
|
||||
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;
|
||||
if(!m_staging_buffer.has_value())
|
||||
OpenCPUBuffer();
|
||||
@@ -276,7 +282,7 @@ namespace mlx
|
||||
mlx_color Texture::GetPixel(int x, int y) noexcept
|
||||
{
|
||||
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 };
|
||||
if(!m_staging_buffer.has_value())
|
||||
OpenCPUBuffer();
|
||||
@@ -289,7 +295,7 @@ namespace mlx
|
||||
void Texture::GetRegion(int x, int y, int w, int h, mlx_color* dst) noexcept
|
||||
{
|
||||
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;
|
||||
if(!m_staging_buffer.has_value())
|
||||
OpenCPUBuffer();
|
||||
@@ -298,9 +304,9 @@ namespace mlx
|
||||
if(moving_x >= static_cast<std::uint32_t>(x + w) || moving_x >= m_width)
|
||||
{
|
||||
moving_x = x;
|
||||
moving_y++;
|
||||
if(moving_y >= static_cast<std::uint32_t>(y + h) || moving_y >= m_height)
|
||||
break;
|
||||
moving_y++;
|
||||
}
|
||||
if constexpr(std::endian::native == std::endian::little)
|
||||
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, {}, {});
|
||||
#endif
|
||||
|
||||
SyncCPUBuffer();
|
||||
}
|
||||
|
||||
void Texture::SyncCPUBuffer(VkCommandBuffer cmd)
|
||||
{
|
||||
if(!m_staging_buffer.has_value())
|
||||
return;
|
||||
VkImageLayout old_layout = m_layout;
|
||||
if(cmd == VK_NULL_HANDLE)
|
||||
cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
||||
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 });
|
||||
@@ -383,105 +381,6 @@ namespace mlx
|
||||
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)
|
||||
{
|
||||
using namespace std::literals;
|
||||
@@ -493,12 +392,12 @@ namespace mlx
|
||||
|
||||
if(!std::filesystem::exists(file))
|
||||
{
|
||||
Error("Image loader: file not found %", file);
|
||||
Error("Image: file not found %", file);
|
||||
return nullptr;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,17 +55,17 @@ namespace mlx
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
void VKAPI_PTR VulkanFreeFunction(void*, void* ptr)
|
||||
void VulkanFreeFunction(void*, void* ptr)
|
||||
{
|
||||
MemManager::Free(ptr);
|
||||
}
|
||||
@@ -87,24 +87,15 @@ namespace mlx
|
||||
kvfSetValidationErrorCallback(&ValidationErrorCallback);
|
||||
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{};
|
||||
info.title = "";
|
||||
info.width = 1;
|
||||
info.height = 1;
|
||||
window = std::make_unique<Window>(&info, true);
|
||||
instance_extensions = window->GetRequiredVulkanInstanceExtentions();
|
||||
#ifdef MLX_PLAT_MACOS
|
||||
instance_extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
|
||||
#endif
|
||||
}
|
||||
mlx_window_create_info info{};
|
||||
info.title = "";
|
||||
info.width = 1;
|
||||
info.height = 1;
|
||||
Window window(&info, true);
|
||||
std::vector<const char*> instance_extensions = window.GetRequiredVulkanInstanceExtentions();
|
||||
#ifdef MLX_PLAT_MACOS
|
||||
instance_extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
|
||||
#endif
|
||||
|
||||
m_instance = kvfCreateInstance(instance_extensions.data(), instance_extensions.size());
|
||||
DebugLog("Vulkan: instance created");
|
||||
@@ -112,34 +103,25 @@ namespace mlx
|
||||
loader->LoadInstance(m_instance);
|
||||
LoadKVFInstanceVulkanFunctionPointers();
|
||||
|
||||
if(!is_headless)
|
||||
{
|
||||
surface = window->CreateVulkanSurface(m_instance);
|
||||
m_physical_device = kvfPickGoodDefaultPhysicalDevice(m_instance, surface);
|
||||
}
|
||||
else
|
||||
m_physical_device = kvfPickGoodPhysicalDevice(m_instance, VK_NULL_HANDLE, nullptr, 0);
|
||||
VkSurfaceKHR surface = window.CreateVulkanSurface(m_instance);
|
||||
|
||||
Verify(m_physical_device != VK_NULL_HANDLE, "Could not find a suitable physical device");
|
||||
m_physical_device = kvfPickGoodDefaultPhysicalDevice(m_instance, surface);
|
||||
|
||||
// just for style
|
||||
VkPhysicalDeviceProperties props;
|
||||
vkGetPhysicalDeviceProperties(m_physical_device, &props);
|
||||
DebugLog("Vulkan: physical device picked '%'", props.deviceName);
|
||||
|
||||
std::vector<const char*> device_extensions;
|
||||
if(!is_headless)
|
||||
device_extensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
||||
const char* device_extensions[] = { VK_KHR_SWAPCHAIN_EXTENSION_NAME };
|
||||
VkPhysicalDeviceFeatures 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");
|
||||
|
||||
loader->LoadDevice(m_device);
|
||||
LoadKVFDeviceVulkanFunctionPointers();
|
||||
|
||||
if(surface != VK_NULL_HANDLE)
|
||||
vkDestroySurfaceKHR(m_instance, surface, nullptr);
|
||||
vkDestroySurfaceKHR(m_instance, surface, nullptr);
|
||||
|
||||
VkAllocationCallbacks callbacks;
|
||||
callbacks.pUserData = nullptr;
|
||||
|
||||
@@ -52,8 +52,8 @@ namespace mlx
|
||||
};
|
||||
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_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_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().RequestDescriptorSet(p_fragment_shader->GetShaderLayout().set_layouts[0].second, ShaderType::Fragment);
|
||||
|
||||
p_viewer_data_buffer = std::make_shared<UniformBuffer>();
|
||||
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)) });
|
||||
|
||||
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)
|
||||
|
||||
@@ -20,42 +20,29 @@ namespace mlx
|
||||
MLX_PROFILE_FUNCTION();
|
||||
p_window = 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)
|
||||
{
|
||||
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;
|
||||
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");
|
||||
}
|
||||
p_render_target = render_target;
|
||||
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());
|
||||
@@ -79,15 +66,14 @@ namespace mlx
|
||||
void Renderer::EndFrame()
|
||||
{
|
||||
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 };
|
||||
kvfEndCommandBuffer(m_cmd_buffers[m_current_frame_index]);
|
||||
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
|
||||
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)
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -95,16 +81,12 @@ namespace mlx
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
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++)
|
||||
{
|
||||
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_image_available_semaphores[i]);
|
||||
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]);
|
||||
DebugLog("Vulkan: command buffer destroyed");
|
||||
kvfDestroyFence(RenderCore::Get().GetDevice(), m_cmd_fences[i]);
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "kvf.h"
|
||||
#include <PreCompiled.h>
|
||||
|
||||
#include <Platform/Window.h>
|
||||
@@ -15,159 +16,11 @@ namespace mlx
|
||||
Event What() const override { return Event::ResizeEventCode; }
|
||||
};
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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();
|
||||
m_resize = false;
|
||||
}
|
||||
|
||||
void Swapchain::AquireFrame(VkSemaphore signal)
|
||||
@@ -178,7 +31,6 @@ namespace mlx
|
||||
Destroy();
|
||||
CreateSwapchain();
|
||||
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);
|
||||
@@ -228,7 +80,7 @@ namespace mlx
|
||||
|
||||
m_surface = p_window->CreateVulkanSurface(RenderCore::Get().GetInstance());
|
||||
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_min_images_count = kvfGetSwapchainMinImagesCount(m_swapchain);
|
||||
@@ -238,13 +90,12 @@ namespace mlx
|
||||
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
||||
extent = kvfGetSwapchainImagesSize(m_swapchain); // fix the extent
|
||||
VkFormat format = kvfGetSwapchainImagesFormat(m_swapchain);
|
||||
for(std::size_t i = 0; i < m_images_count; i++)
|
||||
{
|
||||
#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
|
||||
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
|
||||
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);
|
||||
@@ -254,6 +105,7 @@ namespace mlx
|
||||
kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence);
|
||||
kvfDestroyFence(RenderCore::Get().GetDevice(), fence);
|
||||
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)
|
||||
{
|
||||
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);
|
||||
if(!function)
|
||||
FatalError("Vulkan Loader: could not load '%'", name);
|
||||
@@ -41,10 +37,6 @@ namespace mlx
|
||||
|
||||
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);
|
||||
if(!function)
|
||||
FatalError("Vulkan Loader: could not load '%'", name);
|
||||
|
||||
@@ -21,6 +21,6 @@ rm vulkan-headers.zip
|
||||
|
||||
# Update KVF
|
||||
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
|
||||
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
+19
-100
@@ -1,7 +1,7 @@
|
||||
/***
|
||||
* 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
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -51,7 +51,7 @@
|
||||
#ifndef 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
|
||||
#endif
|
||||
|
||||
@@ -104,7 +104,6 @@ void kvfSetValidationWarningCallback(KvfErrorCallback callback);
|
||||
void kvfAddLayer(const char* layer);
|
||||
|
||||
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);
|
||||
|
||||
// If surfaces given to theses functions are VK_NULL_HANDLE no present queues will be searched and thus kvfQueuePresentKHR will not work
|
||||
@@ -142,7 +141,7 @@ VkSemaphore kvfCreateSemaphore(VkDevice device);
|
||||
void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore);
|
||||
|
||||
#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);
|
||||
uint32_t kvfGetSwapchainImagesCount(VkSwapchainKHR swapchain);
|
||||
uint32_t kvfGetSwapchainMinImagesCount(VkSwapchainKHR swapchain);
|
||||
@@ -152,8 +151,6 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore);
|
||||
|
||||
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 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);
|
||||
VkImageView kvfCreateImageView(VkDevice device, VkImage image, VkFormat format, VkImageViewType type, VkImageAspectFlags aspect, int layer_count);
|
||||
void kvfDestroyImageView(VkDevice device, VkImageView image_view);
|
||||
@@ -162,7 +159,7 @@ VkSampler kvfCreateSampler(VkDevice device, VkFilter filters, VkSamplerAddressMo
|
||||
void kvfDestroySampler(VkDevice device, VkSampler sampler);
|
||||
|
||||
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 kvfDestroyBuffer(VkDevice device, VkBuffer buffer);
|
||||
|
||||
@@ -238,7 +235,6 @@ VkPipeline kvfCreateGraphicsPipeline(VkDevice device, VkPipelineCache cache, VkP
|
||||
void kvfDestroyPipeline(VkDevice device, VkPipeline pipeline);
|
||||
|
||||
void kvfCheckVk(VkResult result);
|
||||
int32_t kvfFindMemoryType(VkPhysicalDevice physical_device, uint32_t type_filter, VkMemoryPropertyFlags properties);
|
||||
|
||||
#ifdef KVF_IMPL_VK_NO_PROTOTYPES
|
||||
#ifdef KVF_DEFINE_VULKAN_FUNCTION_PROTOTYPE
|
||||
@@ -378,12 +374,12 @@ int32_t kvfFindMemoryType(VkPhysicalDevice physical_device, uint32_t type_filter
|
||||
#ifdef KVF_DESCRIPTOR_POOL_CAPACITY
|
||||
#undef KVF_DESCRIPTOR_POOL_CAPACITY
|
||||
#endif
|
||||
#define KVF_DESCRIPTOR_POOL_CAPACITY 1024
|
||||
#define KVF_DESCRIPTOR_POOL_CAPACITY 512
|
||||
|
||||
#ifdef KVF_COMMAND_POOL_CAPACITY
|
||||
#undef KVF_COMMAND_POOL_CAPACITY
|
||||
#endif
|
||||
#define KVF_COMMAND_POOL_CAPACITY 1024
|
||||
#define KVF_COMMAND_POOL_CAPACITY 512
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -523,19 +519,6 @@ void kvfCheckVk(VkResult 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)
|
||||
{
|
||||
KVF_ASSERT(device != VK_NULL_HANDLE);
|
||||
@@ -577,7 +560,6 @@ void __kvfCompleteDevice(VkPhysicalDevice physical, VkDevice device)
|
||||
|
||||
kvf_device->device = device;
|
||||
kvf_device->cmd_pool = pool;
|
||||
kvf_device->callbacks = NULL;
|
||||
kvf_device->sets_pools = NULL;
|
||||
kvf_device->sets_pools_size = 0;
|
||||
kvf_device->cmd_buffers_size = 0;
|
||||
@@ -1168,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_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_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";
|
||||
}
|
||||
@@ -1312,11 +1294,6 @@ void kvfAddLayer(const char* layer)
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -1327,7 +1304,7 @@ VkInstance kvfCreateInstanceNext(const char** extensions_enabled, uint32_t exten
|
||||
create_info.ppEnabledExtensionNames = extensions_enabled;
|
||||
create_info.enabledLayerCount = 0;
|
||||
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)
|
||||
create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
|
||||
#else
|
||||
@@ -1346,8 +1323,6 @@ VkInstance kvfCreateInstanceNext(const char** extensions_enabled, uint32_t exten
|
||||
memcpy(new_extension_set, extensions_enabled, sizeof(char*) * extensions_count);
|
||||
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.ppEnabledExtensionNames = new_extension_set;
|
||||
create_info.enabledLayerCount = __kvf_extra_layers_count;
|
||||
@@ -1499,6 +1474,9 @@ int32_t __kvfScorePhysicalDevice(VkPhysicalDevice device, VkSurfaceKHR surface,
|
||||
if(device_props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
|
||||
score += 1000;
|
||||
|
||||
if(!device_features.geometryShader)
|
||||
return -1;
|
||||
|
||||
score += device_props.limits.maxImageDimension2D;
|
||||
score += device_props.limits.maxBoundDescriptorSets;
|
||||
|
||||
@@ -1888,7 +1866,6 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
|
||||
KVF_GET_DEVICE_FUNCTION(vkDestroySemaphore)(device, semaphore, kvf_device->callbacks);
|
||||
}
|
||||
|
||||
#include <stdio.h>
|
||||
#ifndef KVF_NO_KHR
|
||||
__KvfSwapchainSupportInternal __kvfQuerySwapchainSupport(VkPhysicalDevice physical, VkSurfaceKHR surface)
|
||||
{
|
||||
@@ -1914,56 +1891,12 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
|
||||
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++)
|
||||
{
|
||||
if(srgb)
|
||||
{
|
||||
if(__kvfIsformatSRGB(support->formats[i].format) && support->formats[i].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR)
|
||||
return support->formats[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
if(__kvfIsformatUNORM(support->formats[i].format))
|
||||
return support->formats[i];
|
||||
}
|
||||
if(support->formats[i].format == VK_FORMAT_R8G8B8A8_SRGB && support->formats[i].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR)
|
||||
return support->formats[i];
|
||||
}
|
||||
return support->formats[0];
|
||||
}
|
||||
@@ -1994,13 +1927,13 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
|
||||
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);
|
||||
VkSwapchainKHR swapchain;
|
||||
__KvfSwapchainSupportInternal support = __kvfQuerySwapchainSupport(physical, surface);
|
||||
|
||||
VkSurfaceFormatKHR surfaceFormat = __kvfChooseSwapSurfaceFormat(&support, srgb);
|
||||
VkSurfaceFormatKHR surfaceFormat = __kvfChooseSwapSurfaceFormat(&support);
|
||||
VkPresentModeKHR present_mode = __kvfChooseSwapPresentMode(&support, try_vsync);
|
||||
|
||||
uint32_t image_count = support.capabilities.minImageCount + 1;
|
||||
@@ -2149,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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if(image == VK_NULL_HANDLE)
|
||||
@@ -2311,7 +2232,7 @@ VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize
|
||||
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(dst != VK_NULL_HANDLE);
|
||||
@@ -2322,8 +2243,6 @@ void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size
|
||||
#endif
|
||||
VkBufferCopy copy_region = {};
|
||||
copy_region.size = size;
|
||||
copy_region.srcOffset = src_offset;
|
||||
copy_region.dstOffset = dst_offset;
|
||||
KVF_GET_DEVICE_FUNCTION(vkCmdCopyBuffer)(cmd, src, dst, 1, ©_region);
|
||||
}
|
||||
|
||||
@@ -2352,7 +2271,7 @@ void kvfCopyBufferToImage(VkCommandBuffer cmd, VkImage dst, VkBuffer src, size_t
|
||||
|
||||
void kvfDestroyBuffer(VkDevice device, VkBuffer buffer)
|
||||
{
|
||||
if(buffer == VK_NULL_HANDLE)
|
||||
if(buffer != VK_NULL_HANDLE)
|
||||
return;
|
||||
KVF_ASSERT(device != VK_NULL_HANDLE);
|
||||
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
|
||||
@@ -2579,7 +2498,7 @@ VkAttachmentDescription kvfBuildAttachmentDescription(KvfImageType type, VkForma
|
||||
__KvfSwapchain* kvf_swapchain = __kvfGetKvfSwapchainFromVkSwapchainKHR(swapchain);
|
||||
KVF_ASSERT(kvf_swapchain != NULL);
|
||||
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
|
||||
|
||||
|
||||
+23
-23
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -22,27 +22,27 @@ extern "C" {
|
||||
// vulkan_video_codec_av1std is a preprocessor guard. Do not pass it to API calls.
|
||||
#define vulkan_video_codec_av1std 1
|
||||
#include "vulkan_video_codecs_common.h"
|
||||
#define STD_VIDEO_AV1_NUM_REF_FRAMES 8U
|
||||
#define STD_VIDEO_AV1_REFS_PER_FRAME 7U
|
||||
#define STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME 8U
|
||||
#define STD_VIDEO_AV1_MAX_TILE_COLS 64U
|
||||
#define STD_VIDEO_AV1_MAX_TILE_ROWS 64U
|
||||
#define STD_VIDEO_AV1_MAX_SEGMENTS 8U
|
||||
#define STD_VIDEO_AV1_SEG_LVL_MAX 8U
|
||||
#define STD_VIDEO_AV1_PRIMARY_REF_NONE 7U
|
||||
#define STD_VIDEO_AV1_SELECT_INTEGER_MV 2U
|
||||
#define STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS 2U
|
||||
#define STD_VIDEO_AV1_SKIP_MODE_FRAMES 2U
|
||||
#define STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS 4U
|
||||
#define STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS 2U
|
||||
#define STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS 8U
|
||||
#define STD_VIDEO_AV1_MAX_NUM_PLANES 3U
|
||||
#define STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS 6U
|
||||
#define STD_VIDEO_AV1_MAX_NUM_Y_POINTS 14U
|
||||
#define STD_VIDEO_AV1_MAX_NUM_CB_POINTS 10U
|
||||
#define STD_VIDEO_AV1_MAX_NUM_CR_POINTS 10U
|
||||
#define STD_VIDEO_AV1_MAX_NUM_POS_LUMA 24U
|
||||
#define STD_VIDEO_AV1_MAX_NUM_POS_CHROMA 25U
|
||||
#define STD_VIDEO_AV1_NUM_REF_FRAMES 8
|
||||
#define STD_VIDEO_AV1_REFS_PER_FRAME 7
|
||||
#define STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME 8
|
||||
#define STD_VIDEO_AV1_MAX_TILE_COLS 64
|
||||
#define STD_VIDEO_AV1_MAX_TILE_ROWS 64
|
||||
#define STD_VIDEO_AV1_MAX_SEGMENTS 8
|
||||
#define STD_VIDEO_AV1_SEG_LVL_MAX 8
|
||||
#define STD_VIDEO_AV1_PRIMARY_REF_NONE 7
|
||||
#define STD_VIDEO_AV1_SELECT_INTEGER_MV 2
|
||||
#define STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS 2
|
||||
#define STD_VIDEO_AV1_SKIP_MODE_FRAMES 2
|
||||
#define STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS 4
|
||||
#define STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS 2
|
||||
#define STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS 8
|
||||
#define STD_VIDEO_AV1_MAX_NUM_PLANES 3
|
||||
#define STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS 6
|
||||
#define STD_VIDEO_AV1_MAX_NUM_Y_POINTS 14
|
||||
#define STD_VIDEO_AV1_MAX_NUM_CB_POINTS 10
|
||||
#define STD_VIDEO_AV1_MAX_NUM_CR_POINTS 10
|
||||
#define STD_VIDEO_AV1_MAX_NUM_POS_LUMA 24
|
||||
#define STD_VIDEO_AV1_MAX_NUM_POS_CHROMA 25
|
||||
|
||||
typedef enum StdVideoAV1Profile {
|
||||
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_EBU_3213 = 22,
|
||||
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_MAX_ENUM = 0x7FFFFFFF
|
||||
} StdVideoAV1ColorPrimaries;
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
|
||||
+9
-9
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -22,14 +22,14 @@ extern "C" {
|
||||
// vulkan_video_codec_h264std is a preprocessor guard. Do not pass it to API calls.
|
||||
#define vulkan_video_codec_h264std 1
|
||||
#include "vulkan_video_codecs_common.h"
|
||||
#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32U
|
||||
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6U
|
||||
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16U
|
||||
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 6U
|
||||
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64U
|
||||
#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32U
|
||||
#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2U
|
||||
#define STD_VIDEO_H264_NO_REFERENCE_PICTURE 0xFFU
|
||||
#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32
|
||||
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6
|
||||
#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16
|
||||
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 6
|
||||
#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64
|
||||
#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32
|
||||
#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2
|
||||
#define STD_VIDEO_H264_NO_REFERENCE_PICTURE 0xFF
|
||||
|
||||
typedef enum StdVideoH264ChromaFormatIdc {
|
||||
STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -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_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 {
|
||||
STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
|
||||
+24
-24
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -22,29 +22,29 @@ extern "C" {
|
||||
// vulkan_video_codec_h265std is a preprocessor guard. Do not pass it to API calls.
|
||||
#define vulkan_video_codec_h265std 1
|
||||
#include "vulkan_video_codecs_common.h"
|
||||
#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32U
|
||||
#define STD_VIDEO_H265_SUBLAYERS_LIST_SIZE 7U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2U
|
||||
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64U
|
||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6U
|
||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19U
|
||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21U
|
||||
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3U
|
||||
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128U
|
||||
#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15U
|
||||
#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2U
|
||||
#define STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS 64U
|
||||
#define STD_VIDEO_H265_MAX_DPB_SIZE 16U
|
||||
#define STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS 32U
|
||||
#define STD_VIDEO_H265_MAX_LONG_TERM_PICS 16U
|
||||
#define STD_VIDEO_H265_MAX_DELTA_POC 48U
|
||||
#define STD_VIDEO_H265_NO_REFERENCE_PICTURE 0xFFU
|
||||
#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32
|
||||
#define STD_VIDEO_H265_SUBLAYERS_LIST_SIZE 7
|
||||
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6
|
||||
#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16
|
||||
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6
|
||||
#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64
|
||||
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6
|
||||
#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64
|
||||
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2
|
||||
#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64
|
||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6
|
||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19
|
||||
#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21
|
||||
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3
|
||||
#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128
|
||||
#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15
|
||||
#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2
|
||||
#define STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS 64
|
||||
#define STD_VIDEO_H265_MAX_DPB_SIZE 16
|
||||
#define STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS 32
|
||||
#define STD_VIDEO_H265_MAX_LONG_TERM_PICS 16
|
||||
#define STD_VIDEO_H265_MAX_DELTA_POC 48
|
||||
#define STD_VIDEO_H265_NO_REFERENCE_PICTURE 0xFF
|
||||
|
||||
typedef enum StdVideoH265ChromaFormatIdc {
|
||||
STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -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_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 {
|
||||
uint32_t IrapPicFlag : 1;
|
||||
uint32_t IdrPicFlag : 1;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
|
||||
-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
|
||||
|
||||
/*
|
||||
** Copyright 2015-2026 The Khronos Group Inc.
|
||||
** Copyright 2015-2024 The Khronos Group Inc.
|
||||
**
|
||||
** SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
Vendored
+361
-784
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);
|
||||
// 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.
|
||||
#ifndef IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
||||
#ifndef PFN_GetPhysicalDeviceProcAddr
|
||||
typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
|
||||
#define IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
||||
#endif
|
||||
|
||||
// Typedefs for loader/ICD interface
|
||||
|
||||
Vendored
-3
@@ -27,10 +27,7 @@
|
||||
#define VK_CURRENT_CHAIN_VERSION 1
|
||||
|
||||
// Typedef for use in the interfaces below
|
||||
#ifndef IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
||||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
|
||||
#define IS_DEFINED_PFN_GetPhysicalDeviceProcAddr
|
||||
#endif
|
||||
|
||||
// Version negotiation values
|
||||
typedef enum VkNegotiateLayerStructType {
|
||||
|
||||
Vendored
+1
-1
@@ -2,7 +2,7 @@
|
||||
// File: vk_platform.h
|
||||
//
|
||||
/*
|
||||
** Copyright 2014-2026 The Khronos Group Inc.
|
||||
** Copyright 2014-2024 The Khronos Group Inc.
|
||||
**
|
||||
** SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
Vendored
+364
-3003
File diff suppressed because it is too large
Load Diff
Vendored
+1
-5
@@ -2,7 +2,7 @@
|
||||
#define VULKAN_H_ 1
|
||||
|
||||
/*
|
||||
** Copyright 2015-2026 The Khronos Group Inc.
|
||||
** Copyright 2015-2024 The Khronos Group Inc.
|
||||
**
|
||||
** SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -96,8 +96,4 @@
|
||||
#include "vulkan_beta.h"
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_OHOS
|
||||
#include "vulkan_ohos.h"
|
||||
#endif
|
||||
|
||||
#endif // VULKAN_H_
|
||||
|
||||
Vendored
+2392
-6537
File diff suppressed because it is too large
Load Diff
Vendored
+1
-7
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -35,14 +35,12 @@ typedef struct VkAndroidSurfaceCreateInfoKHR {
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// 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);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
|
||||
VkDevice device,
|
||||
const struct AHardwareBuffer* buffer,
|
||||
VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
|
||||
VkDevice device,
|
||||
const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
|
||||
struct AHardwareBuffer** pBuffer);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// VK_ANDROID_external_format_resolve is a preprocessor guard. Do not pass it to API calls.
|
||||
|
||||
Vendored
+2
-151
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -120,7 +120,7 @@ typedef struct VkPipelineShaderStageNodeCreateInfoAMDX {
|
||||
uint32_t index;
|
||||
} VkPipelineShaderStageNodeCreateInfoAMDX;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateExecutionGraphPipelinesAMDX)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateExecutionGraphPipelinesAMDX)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineScratchSizeAMDX)(VkDevice device, VkPipeline executionGraph, VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineNodeIndexAMDX)(VkDevice device, VkPipeline executionGraph, const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo, uint32_t* pNodeIndex);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdInitializeGraphScratchMemoryAMDX)(VkCommandBuffer commandBuffer, VkPipeline executionGraph, VkDeviceAddress scratch, VkDeviceSize scratchSize);
|
||||
@@ -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);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX(
|
||||
VkDevice device,
|
||||
VkPipelineCache pipelineCache,
|
||||
@@ -137,159 +136,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX(
|
||||
const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkPipeline* pPipelines);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineScratchSizeAMDX(
|
||||
VkDevice device,
|
||||
VkPipeline executionGraph,
|
||||
VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineNodeIndexAMDX(
|
||||
VkDevice device,
|
||||
VkPipeline executionGraph,
|
||||
const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo,
|
||||
uint32_t* pNodeIndex);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdInitializeGraphScratchMemoryAMDX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipeline executionGraph,
|
||||
VkDeviceAddress scratch,
|
||||
VkDeviceSize scratchSize);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphAMDX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkDeviceAddress scratch,
|
||||
VkDeviceSize scratchSize,
|
||||
const VkDispatchGraphCountInfoAMDX* pCountInfo);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectAMDX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkDeviceAddress scratch,
|
||||
VkDeviceSize scratchSize,
|
||||
const VkDispatchGraphCountInfoAMDX* pCountInfo);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectCountAMDX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkDeviceAddress scratch,
|
||||
VkDeviceSize scratchSize,
|
||||
VkDeviceAddress countInfo);
|
||||
#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.
|
||||
@@ -337,37 +219,6 @@ typedef struct 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
|
||||
}
|
||||
#endif
|
||||
|
||||
Vendored
+2152
-6201
File diff suppressed because it is too large
Load Diff
Vendored
+1
-5
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -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);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT(
|
||||
VkInstance instance,
|
||||
const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
IDirectFB* dfb);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Vendored
+1558
-3557
File diff suppressed because it is too large
Load Diff
+674
-1468
File diff suppressed because it is too large
Load Diff
+4443
-7425
File diff suppressed because it is too large
Load Diff
Vendored
+1
-21
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -34,14 +34,12 @@ typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA {
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
|
||||
VkInstance instance,
|
||||
const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// 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);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA(
|
||||
VkDevice device,
|
||||
const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
|
||||
zx_handle_t* pZirconHandle);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(
|
||||
VkDevice device,
|
||||
VkExternalMemoryHandleTypeFlagBits handleType,
|
||||
zx_handle_t zirconHandle,
|
||||
VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// 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);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
|
||||
VkDevice device,
|
||||
const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
|
||||
VkDevice device,
|
||||
const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
|
||||
zx_handle_t* pZirconHandle);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// 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);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA(
|
||||
VkDevice device,
|
||||
const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkBufferCollectionFUCHSIA* pCollection);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA(
|
||||
VkDevice device,
|
||||
VkBufferCollectionFUCHSIA collection,
|
||||
const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
|
||||
VkDevice device,
|
||||
VkBufferCollectionFUCHSIA collection,
|
||||
const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
|
||||
VkDevice device,
|
||||
VkBufferCollectionFUCHSIA collection,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA(
|
||||
VkDevice device,
|
||||
VkBufferCollectionFUCHSIA collection,
|
||||
VkBufferCollectionPropertiesFUCHSIA* pProperties);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Vendored
+13353
-17130
File diff suppressed because it is too large
Load Diff
Vendored
+1
-3
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -34,14 +34,12 @@ typedef struct VkStreamDescriptorSurfaceCreateInfoGGP {
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
|
||||
VkInstance instance,
|
||||
const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// VK_GGP_frame_token is a preprocessor guard. Do not pass it to API calls.
|
||||
|
||||
+8278
-13222
File diff suppressed because it is too large
Load Diff
Vendored
+252
-3578
File diff suppressed because it is too large
Load Diff
+34
-45
@@ -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
|
||||
//
|
||||
@@ -35,18 +35,6 @@
|
||||
# include <ciso646>
|
||||
#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_NO_SMART_HANDLE )
|
||||
# define VULKAN_HPP_NO_SMART_HANDLE
|
||||
@@ -91,16 +79,16 @@
|
||||
# define __has_include( x ) false
|
||||
#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
|
||||
#endif
|
||||
|
||||
#if defined( __cpp_lib_span ) && ( 201803 <= __cpp_lib_span )
|
||||
#if ( 201803 <= __cpp_lib_span )
|
||||
# define VULKAN_HPP_SUPPORT_SPAN
|
||||
#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." )
|
||||
#if defined( __cpp_lib_modules ) && !defined( VULKAN_HPP_STD_MODULE ) && defined( VULKAN_HPP_ENABLE_STD_MODULE )
|
||||
# define VULKAN_HPP_STD_MODULE std.compat
|
||||
#endif
|
||||
|
||||
#ifndef VK_USE_64_BIT_PTR_DEFINES
|
||||
@@ -170,11 +158,6 @@ VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ name
|
||||
# else
|
||||
# define VULKAN_HPP_CONSTEXPR_14
|
||||
# endif
|
||||
# if 201603 <= __cpp_constexpr
|
||||
# define VULKAN_HPP_CONSTEXPR_17 constexpr
|
||||
# else
|
||||
# define VULKAN_HPP_CONSTEXPR_17
|
||||
# endif
|
||||
# if ( 201907 <= __cpp_constexpr ) && ( !defined( __GNUC__ ) || ( 110400 < GCC_VERSION ) )
|
||||
# define VULKAN_HPP_CONSTEXPR_20 constexpr
|
||||
# else
|
||||
@@ -237,6 +220,10 @@ VULKAN_HPP_COMPILE_WARNING( "This is a non-conforming implementation of C++ name
|
||||
# define VULKAN_HPP_NAMESPACE vk
|
||||
#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( VK_NO_PROTOTYPES )
|
||||
# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
|
||||
@@ -282,21 +269,6 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
} // namespace detail
|
||||
} // namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
#if !defined( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC_TYPE )
|
||||
# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC_TYPE VULKAN_HPP_NAMESPACE::detail::DispatchLoaderDynamic
|
||||
#endif
|
||||
#if !defined( VULKAN_HPP_DISPATCH_LOADER_STATIC_TYPE )
|
||||
# define VULKAN_HPP_DISPATCH_LOADER_STATIC_TYPE VULKAN_HPP_NAMESPACE::detail::DispatchLoaderStatic
|
||||
#endif
|
||||
|
||||
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER_TYPE )
|
||||
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
|
||||
# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE VULKAN_HPP_DISPATCH_LOADER_DYNAMIC_TYPE
|
||||
# else
|
||||
# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE VULKAN_HPP_DISPATCH_LOADER_STATIC_TYPE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER )
|
||||
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
|
||||
# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::detail::defaultDispatchLoaderDynamic
|
||||
@@ -314,14 +286,25 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined( VULKAN_HPP_NO_DEFAULT_DISPATCHER )
|
||||
# define VULKAN_HPP_DEFAULT_ASSIGNMENT( assignment )
|
||||
#else
|
||||
# define VULKAN_HPP_DEFAULT_ASSIGNMENT( assignment ) = assignment
|
||||
#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
|
||||
# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderStatic
|
||||
# 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_NO_DEFAULT_DISPATCHER )
|
||||
# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT
|
||||
# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT
|
||||
# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT
|
||||
#else
|
||||
# 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
|
||||
|
||||
#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 ) )
|
||||
# include <expected>
|
||||
# endif
|
||||
@@ -330,8 +313,14 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
#endif
|
||||
|
||||
#if !defined( VULKAN_HPP_RAII_NAMESPACE )
|
||||
# define VULKAN_HPP_RAII_NAMESPACE raii
|
||||
# define VULKAN_HPP_RAII_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE )
|
||||
# define VULKAN_HPP_RAII_NAMESPACE raii
|
||||
#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
|
||||
Vendored
+1
-3
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -34,14 +34,12 @@ typedef struct VkIOSSurfaceCreateInfoMVK {
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
|
||||
VkInstance instance,
|
||||
const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Vendored
+1
-3
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -34,14 +34,12 @@ typedef struct VkMacOSSurfaceCreateInfoMVK {
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
|
||||
VkInstance instance,
|
||||
const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Vendored
+1
-50
@@ -2,7 +2,7 @@
|
||||
#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
|
||||
*/
|
||||
@@ -40,14 +40,12 @@ typedef struct VkMetalSurfaceCreateInfoEXT {
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
|
||||
VkInstance instance,
|
||||
const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// 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);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT(
|
||||
VkDevice device,
|
||||
VkExportMetalObjectsInfoEXT* pMetalObjectsInfo);
|
||||
#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
|
||||
}
|
||||
|
||||
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
|
||||
Vendored
+8763
-12554
File diff suppressed because it is too large
Load Diff
Vendored
+1
-7
@@ -2,7 +2,7 @@
|
||||
#define VULKAN_SCREEN_H_ 1
|
||||
|
||||
/*
|
||||
** Copyright 2015-2026 The Khronos Group Inc.
|
||||
** Copyright 2015-2024 The Khronos Group Inc.
|
||||
**
|
||||
** SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -36,21 +36,17 @@ typedef VkResult (VKAPI_PTR *PFN_vkCreateScreenSurfaceQNX)(VkInstance instance,
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX(
|
||||
VkInstance instance,
|
||||
const VkScreenSurfaceCreateInfoQNX* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
struct _screen_window* window);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// VK_QNX_external_memory_screen_buffer is a preprocessor guard. Do not pass it to API calls.
|
||||
@@ -99,13 +95,11 @@ typedef struct VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX {
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetScreenBufferPropertiesQNX)(VkDevice device, const struct _screen_buffer* buffer, VkScreenBufferPropertiesQNX* pProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetScreenBufferPropertiesQNX(
|
||||
VkDevice device,
|
||||
const struct _screen_buffer* buffer,
|
||||
VkScreenBufferPropertiesQNX* pProperties);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Vendored
+117
-155
@@ -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
|
||||
//
|
||||
@@ -10,13 +10,14 @@
|
||||
|
||||
#include <vulkan/vulkan.hpp>
|
||||
|
||||
#if !defined( VULKAN_HPP_CXX_MODULE )
|
||||
#if !( defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) )
|
||||
# include <atomic> // std::atomic_size_t
|
||||
#endif
|
||||
|
||||
namespace VULKAN_HPP_NAMESPACE
|
||||
{
|
||||
#if !defined( VULKAN_HPP_NO_SMART_HANDLE )
|
||||
|
||||
template <typename HandleType>
|
||||
class SharedHandleTraits;
|
||||
|
||||
@@ -84,7 +85,7 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
template <typename DestructorType, typename Deleter>
|
||||
struct SharedHeader
|
||||
{
|
||||
SharedHeader( SharedHandle<DestructorType> parent, Deleter deleter VULKAN_HPP_DEFAULT_ASSIGNMENT( Deleter() ) ) VULKAN_HPP_NOEXCEPT
|
||||
SharedHeader( SharedHandle<DestructorType> parent, Deleter deleter = Deleter() ) VULKAN_HPP_NOEXCEPT
|
||||
: parent( std::move( parent ) )
|
||||
, deleter( std::move( deleter ) )
|
||||
{
|
||||
@@ -97,7 +98,7 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
template <typename Deleter>
|
||||
struct SharedHeader<NoDestructor, Deleter>
|
||||
{
|
||||
SharedHeader( Deleter deleter VULKAN_HPP_DEFAULT_ASSIGNMENT( Deleter() ) ) VULKAN_HPP_NOEXCEPT : deleter( std::move( deleter ) ) {}
|
||||
SharedHeader( Deleter deleter = Deleter() ) VULKAN_HPP_NOEXCEPT : deleter( std::move( deleter ) ) {}
|
||||
|
||||
Deleter deleter;
|
||||
};
|
||||
@@ -131,7 +132,7 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
public:
|
||||
std::atomic_size_t m_ref_cnt{ 1 };
|
||||
HeaderType m_header;
|
||||
HeaderType m_header{};
|
||||
};
|
||||
|
||||
//=====================================================================================================================
|
||||
@@ -282,9 +283,7 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
SharedHandle() = default;
|
||||
|
||||
template <typename T = HandleType, typename = typename std::enable_if<HasDestructor<T>::value && !HasPoolType<T>::value>::type>
|
||||
explicit SharedHandle( HandleType handle,
|
||||
SharedHandle<DestructorTypeOf<HandleType>> parent,
|
||||
DeleterType deleter VULKAN_HPP_DEFAULT_ASSIGNMENT( DeleterType() ) ) VULKAN_HPP_NOEXCEPT
|
||||
explicit SharedHandle( HandleType handle, SharedHandle<DestructorTypeOf<HandleType>> parent, DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT
|
||||
: BaseType( handle, std::move( parent ), std::move( deleter ) )
|
||||
{
|
||||
}
|
||||
@@ -301,8 +300,7 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
}
|
||||
|
||||
template <typename T = HandleType, typename = typename std::enable_if<!HasDestructor<T>::value>::type>
|
||||
explicit SharedHandle( HandleType handle, DeleterType deleter VULKAN_HPP_DEFAULT_ASSIGNMENT( DeleterType() ) ) VULKAN_HPP_NOEXCEPT
|
||||
: BaseType( handle, std::move( deleter ) )
|
||||
explicit SharedHandle( HandleType handle, DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT : BaseType( handle, std::move( deleter ) )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -312,21 +310,20 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
namespace detail
|
||||
{
|
||||
|
||||
// Silence the function cast warnings.
|
||||
# if defined( __GNUC__ ) && !defined( __clang__ ) && !defined( __INTEL_COMPILER )
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wcast-function-type"
|
||||
# elif defined( __clang__ ) && ( __clang_major__ >= 13 ) && !defined( __INTEL_COMPILER )
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wcast-function-type"
|
||||
# endif
|
||||
|
||||
template <typename HandleType, typename Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
template <typename HandleType>
|
||||
class ObjectDestroyShared
|
||||
{
|
||||
public:
|
||||
using DestructorType = typename SharedHandleTraits<HandleType>::DestructorType;
|
||||
|
||||
template <class Dispatcher>
|
||||
using DestroyFunctionPointerType =
|
||||
typename std::conditional<HasDestructor<HandleType>::value,
|
||||
void ( DestructorType::* )( HandleType, const AllocationCallbacks *, const Dispatcher & ) const,
|
||||
@@ -334,9 +331,10 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SelectorType = typename std::conditional<HasDestructor<HandleType>::value, DestructorType, HandleType>::type;
|
||||
|
||||
ObjectDestroyShared( Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ASSIGNMENT( nullptr ),
|
||||
template <typename Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
ObjectDestroyShared( Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
|
||||
const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType>( &SelectorType::destroy ) ) )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &SelectorType::destroy ) ) )
|
||||
, m_dispatch( &dispatch )
|
||||
, m_allocationCallbacks( allocationCallbacks )
|
||||
{
|
||||
@@ -358,22 +356,24 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
}
|
||||
|
||||
private:
|
||||
DestroyFunctionPointerType m_destroy = nullptr;
|
||||
const Dispatcher * m_dispatch = nullptr;
|
||||
Optional<const AllocationCallbacks> m_allocationCallbacks = nullptr;
|
||||
DestroyFunctionPointerType<detail::DispatchLoaderBase> m_destroy = nullptr;
|
||||
const detail::DispatchLoaderBase * m_dispatch = nullptr;
|
||||
Optional<const AllocationCallbacks> m_allocationCallbacks = nullptr;
|
||||
};
|
||||
|
||||
template <typename HandleType, typename Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
template <typename HandleType>
|
||||
class ObjectFreeShared
|
||||
{
|
||||
public:
|
||||
using DestructorType = typename SharedHandleTraits<HandleType>::DestructorType;
|
||||
|
||||
template <class Dispatcher>
|
||||
using DestroyFunctionPointerType = void ( DestructorType::* )( HandleType, const AllocationCallbacks *, const Dispatcher & ) const;
|
||||
|
||||
ObjectFreeShared( Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ASSIGNMENT( nullptr ),
|
||||
template <class Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
ObjectFreeShared( Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
|
||||
const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType>( &DestructorType::free ) ) )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &DestructorType::free ) ) )
|
||||
, m_dispatch( &dispatch )
|
||||
, m_allocationCallbacks( allocationCallbacks )
|
||||
{
|
||||
@@ -387,21 +387,24 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
}
|
||||
|
||||
private:
|
||||
DestroyFunctionPointerType m_destroy = nullptr;
|
||||
const Dispatcher * m_dispatch = nullptr;
|
||||
Optional<const AllocationCallbacks> m_allocationCallbacks = nullptr;
|
||||
DestroyFunctionPointerType<detail::DispatchLoaderBase> m_destroy = nullptr;
|
||||
const detail::DispatchLoaderBase * m_dispatch = nullptr;
|
||||
Optional<const AllocationCallbacks> m_allocationCallbacks = nullptr;
|
||||
};
|
||||
|
||||
template <typename HandleType, typename Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
template <typename HandleType>
|
||||
class ObjectReleaseShared
|
||||
{
|
||||
public:
|
||||
using DestructorType = typename SharedHandleTraits<HandleType>::DestructorType;
|
||||
|
||||
template <class Dispatcher>
|
||||
using DestroyFunctionPointerType = void ( DestructorType::* )( HandleType, const Dispatcher & ) const;
|
||||
|
||||
template <class Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
ObjectReleaseShared( const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType>( &DestructorType::release ) ) ), m_dispatch( &dispatch )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &DestructorType::release ) ) )
|
||||
, m_dispatch( &dispatch )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -413,11 +416,11 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
}
|
||||
|
||||
private:
|
||||
DestroyFunctionPointerType m_destroy = nullptr;
|
||||
const Dispatcher * m_dispatch = nullptr;
|
||||
DestroyFunctionPointerType<detail::DispatchLoaderBase> m_destroy = nullptr;
|
||||
const detail::DispatchLoaderBase * m_dispatch = nullptr;
|
||||
};
|
||||
|
||||
template <typename HandleType, typename PoolType, typename Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
template <typename HandleType, typename PoolType>
|
||||
class PoolFreeShared
|
||||
{
|
||||
public:
|
||||
@@ -425,14 +428,17 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using PoolTypeExport = PoolType;
|
||||
|
||||
template <class Dispatcher>
|
||||
using ReturnType = decltype( std::declval<DestructorType>().free( PoolType(), 0u, nullptr, Dispatcher() ) );
|
||||
|
||||
using DestroyFunctionPointerType = ReturnType ( DestructorType::* )( PoolType, uint32_t, const HandleType *, const Dispatcher & ) const;
|
||||
template <class Dispatcher>
|
||||
using DestroyFunctionPointerType = ReturnType<Dispatcher> ( DestructorType::* )( PoolType, uint32_t, const HandleType *, const Dispatcher & ) const;
|
||||
|
||||
PoolFreeShared() = default;
|
||||
|
||||
template <class Dispatcher = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
|
||||
PoolFreeShared( SharedHandle<PoolType> pool, const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType>( &DestructorType::free ) ) )
|
||||
: m_destroy( reinterpret_cast<decltype( m_destroy )>( static_cast<DestroyFunctionPointerType<Dispatcher>>( &DestructorType::free ) ) )
|
||||
, m_dispatch( &dispatch )
|
||||
, m_pool( std::move( pool ) )
|
||||
{
|
||||
@@ -446,16 +452,15 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
}
|
||||
|
||||
private:
|
||||
DestroyFunctionPointerType m_destroy = nullptr;
|
||||
const Dispatcher * m_dispatch = nullptr;
|
||||
SharedHandle<PoolType> m_pool{};
|
||||
DestroyFunctionPointerType<detail::DispatchLoaderBase> m_destroy = nullptr;
|
||||
const detail::DispatchLoaderBase * m_dispatch = nullptr;
|
||||
SharedHandle<PoolType> m_pool{};
|
||||
};
|
||||
|
||||
# if defined( __GNUC__ ) && !defined( __clang__ ) && !defined( __INTEL_COMPILER )
|
||||
# pragma GCC diagnostic pop
|
||||
# elif defined( __clang__ ) && ( __clang_major__ >= 13 ) && !defined( __INTEL_COMPILER )
|
||||
# pragma clang diagnostic pop
|
||||
# endif
|
||||
|
||||
} // namespace detail
|
||||
|
||||
//======================
|
||||
@@ -513,6 +518,16 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedSemaphore = SharedHandle<Semaphore>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<Event>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<Event>;
|
||||
};
|
||||
|
||||
using SharedEvent = SharedHandle<Event>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<QueryPool>
|
||||
{
|
||||
@@ -533,6 +548,16 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedBuffer = SharedHandle<Buffer>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<BufferView>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<BufferView>;
|
||||
};
|
||||
|
||||
using SharedBufferView = SharedHandle<BufferView>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<Image>
|
||||
{
|
||||
@@ -553,46 +578,6 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedImageView = SharedHandle<ImageView>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<CommandPool>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<CommandPool>;
|
||||
};
|
||||
|
||||
using SharedCommandPool = SharedHandle<CommandPool>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<CommandBuffer>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::PoolFreeShared<CommandBuffer, CommandPool>;
|
||||
};
|
||||
|
||||
using SharedCommandBuffer = SharedHandle<CommandBuffer>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<Event>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<Event>;
|
||||
};
|
||||
|
||||
using SharedEvent = SharedHandle<Event>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<BufferView>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<BufferView>;
|
||||
};
|
||||
|
||||
using SharedBufferView = SharedHandle<BufferView>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<ShaderModule>
|
||||
{
|
||||
@@ -693,18 +678,27 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedRenderPass = SharedHandle<RenderPass>;
|
||||
|
||||
//=== VK_VERSION_1_1 ===
|
||||
template <>
|
||||
class SharedHandleTraits<DescriptorUpdateTemplate>
|
||||
class SharedHandleTraits<CommandPool>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<DescriptorUpdateTemplate>;
|
||||
using deleter = detail::ObjectDestroyShared<CommandPool>;
|
||||
};
|
||||
|
||||
using SharedDescriptorUpdateTemplate = SharedHandle<DescriptorUpdateTemplate>;
|
||||
using SharedDescriptorUpdateTemplateKHR = SharedHandle<DescriptorUpdateTemplate>;
|
||||
using SharedCommandPool = SharedHandle<CommandPool>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<CommandBuffer>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::PoolFreeShared<CommandBuffer, CommandPool>;
|
||||
};
|
||||
|
||||
using SharedCommandBuffer = SharedHandle<CommandBuffer>;
|
||||
|
||||
//=== VK_VERSION_1_1 ===
|
||||
template <>
|
||||
class SharedHandleTraits<SamplerYcbcrConversion>
|
||||
{
|
||||
@@ -716,6 +710,17 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
using SharedSamplerYcbcrConversion = SharedHandle<SamplerYcbcrConversion>;
|
||||
using SharedSamplerYcbcrConversionKHR = SharedHandle<SamplerYcbcrConversion>;
|
||||
|
||||
template <>
|
||||
class SharedHandleTraits<DescriptorUpdateTemplate>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<DescriptorUpdateTemplate>;
|
||||
};
|
||||
|
||||
using SharedDescriptorUpdateTemplate = SharedHandle<DescriptorUpdateTemplate>;
|
||||
using SharedDescriptorUpdateTemplateKHR = SharedHandle<DescriptorUpdateTemplate>;
|
||||
|
||||
//=== VK_VERSION_1_3 ===
|
||||
template <>
|
||||
class SharedHandleTraits<PrivateDataSlot>
|
||||
@@ -825,17 +830,6 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedDebugUtilsMessengerEXT = SharedHandle<DebugUtilsMessengerEXT>;
|
||||
|
||||
//=== VK_EXT_descriptor_heap ===
|
||||
template <>
|
||||
class SharedHandleTraits<TensorARM>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<TensorARM>;
|
||||
};
|
||||
|
||||
using SharedTensorARM = SharedHandle<TensorARM>;
|
||||
|
||||
//=== VK_KHR_acceleration_structure ===
|
||||
template <>
|
||||
class SharedHandleTraits<AccelerationStructureKHR>
|
||||
@@ -949,17 +943,6 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedMicromapEXT = SharedHandle<MicromapEXT>;
|
||||
|
||||
//=== VK_ARM_tensors ===
|
||||
template <>
|
||||
class SharedHandleTraits<TensorViewARM>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<TensorViewARM>;
|
||||
};
|
||||
|
||||
using SharedTensorViewARM = SharedHandle<TensorViewARM>;
|
||||
|
||||
//=== VK_NV_optical_flow ===
|
||||
template <>
|
||||
class SharedHandleTraits<OpticalFlowSessionNV>
|
||||
@@ -993,28 +976,6 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedPipelineBinaryKHR = SharedHandle<PipelineBinaryKHR>;
|
||||
|
||||
//=== VK_ARM_data_graph ===
|
||||
template <>
|
||||
class SharedHandleTraits<DataGraphPipelineSessionARM>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<DataGraphPipelineSessionARM>;
|
||||
};
|
||||
|
||||
using SharedDataGraphPipelineSessionARM = SharedHandle<DataGraphPipelineSessionARM>;
|
||||
|
||||
//=== VK_NV_external_compute_queue ===
|
||||
template <>
|
||||
class SharedHandleTraits<ExternalComputeQueueNV>
|
||||
{
|
||||
public:
|
||||
using DestructorType = Device;
|
||||
using deleter = detail::ObjectDestroyShared<ExternalComputeQueueNV>;
|
||||
};
|
||||
|
||||
using SharedExternalComputeQueueNV = SharedHandle<ExternalComputeQueueNV>;
|
||||
|
||||
//=== VK_EXT_device_generated_commands ===
|
||||
template <>
|
||||
class SharedHandleTraits<IndirectCommandsLayoutEXT>
|
||||
@@ -1036,19 +997,20 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
using SharedIndirectExecutionSetEXT = SharedHandle<IndirectExecutionSetEXT>;
|
||||
|
||||
// a number of SharedHandle specializations
|
||||
enum class SwapchainOwns
|
||||
{
|
||||
no,
|
||||
yes,
|
||||
};
|
||||
|
||||
struct ImageHeader : SharedHeader<DestructorTypeOf<Image>, typename SharedHandleTraits<Image>::deleter>
|
||||
struct ImageHeader : SharedHeader<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>, typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter>
|
||||
{
|
||||
ImageHeader( SharedHandle<DestructorTypeOf<Image>> parent,
|
||||
typename SharedHandleTraits<Image>::deleter deleter VULKAN_HPP_DEFAULT_ASSIGNMENT( typename SharedHandleTraits<Image>::deleter() ),
|
||||
SwapchainOwns swapchainOwned = SwapchainOwns::no ) VULKAN_HPP_NOEXCEPT
|
||||
: SharedHeader<DestructorTypeOf<Image>, typename SharedHandleTraits<Image>::deleter>( std::move( parent ), std::move( deleter ) )
|
||||
ImageHeader(
|
||||
SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>> parent,
|
||||
typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter deleter = typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter(),
|
||||
SwapchainOwns swapchainOwned = SwapchainOwns::no ) VULKAN_HPP_NOEXCEPT
|
||||
: SharedHeader<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>, typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter>( std::move( parent ),
|
||||
std::move( deleter ) )
|
||||
, swapchainOwned( swapchainOwned )
|
||||
{
|
||||
}
|
||||
@@ -1057,25 +1019,25 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
};
|
||||
|
||||
template <>
|
||||
class SharedHandle<Image> : public SharedHandleBase<Image, ImageHeader>
|
||||
class SharedHandle<VULKAN_HPP_NAMESPACE::Image> : public SharedHandleBase<VULKAN_HPP_NAMESPACE::Image, ImageHeader>
|
||||
{
|
||||
using BaseType = SharedHandleBase<Image, ImageHeader>;
|
||||
using DeleterType = typename SharedHandleTraits<Image>::deleter;
|
||||
using BaseType = SharedHandleBase<VULKAN_HPP_NAMESPACE::Image, ImageHeader>;
|
||||
using DeleterType = typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::Image>::deleter;
|
||||
friend BaseType;
|
||||
|
||||
public:
|
||||
SharedHandle() = default;
|
||||
|
||||
explicit SharedHandle( Image handle,
|
||||
SharedHandle<DestructorTypeOf<Image>> parent,
|
||||
SwapchainOwns swapchain_owned VULKAN_HPP_DEFAULT_ASSIGNMENT( SwapchainOwns::no ),
|
||||
DeleterType deleter VULKAN_HPP_DEFAULT_ASSIGNMENT( DeleterType() ) ) VULKAN_HPP_NOEXCEPT
|
||||
explicit SharedHandle( VULKAN_HPP_NAMESPACE::Image handle,
|
||||
SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::Image>> parent,
|
||||
SwapchainOwns swapchain_owned = SwapchainOwns::no,
|
||||
DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT
|
||||
: BaseType( handle, std::move( parent ), std::move( deleter ), swapchain_owned )
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
static void internalDestroy( const ImageHeader & control, Image handle ) VULKAN_HPP_NOEXCEPT
|
||||
static void internalDestroy( const ImageHeader & control, VULKAN_HPP_NAMESPACE::Image handle ) VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
if ( control.swapchainOwned == SwapchainOwns::no )
|
||||
{
|
||||
@@ -1086,41 +1048,41 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
struct SwapchainHeader
|
||||
{
|
||||
SwapchainHeader( SharedHandle<SurfaceKHR> surface,
|
||||
SharedHandle<DestructorTypeOf<SwapchainKHR>> parent,
|
||||
typename SharedHandleTraits<SwapchainKHR>::deleter deleter
|
||||
VULKAN_HPP_DEFAULT_ASSIGNMENT( typename SharedHandleTraits<SwapchainKHR>::deleter() ) ) VULKAN_HPP_NOEXCEPT
|
||||
SwapchainHeader( SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR> surface,
|
||||
SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::SwapchainKHR>> parent,
|
||||
typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter deleter =
|
||||
typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter() ) VULKAN_HPP_NOEXCEPT
|
||||
: surface( std::move( surface ) )
|
||||
, parent( std::move( parent ) )
|
||||
, deleter( std::move( deleter ) )
|
||||
{
|
||||
}
|
||||
|
||||
SharedHandle<SurfaceKHR> surface;
|
||||
SharedHandle<DestructorTypeOf<SwapchainKHR>> parent;
|
||||
typename SharedHandleTraits<SwapchainKHR>::deleter deleter;
|
||||
SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR> surface{};
|
||||
SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::SwapchainKHR>> parent{};
|
||||
typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter deleter{};
|
||||
};
|
||||
|
||||
template <>
|
||||
class SharedHandle<SwapchainKHR> : public SharedHandleBase<SwapchainKHR, SwapchainHeader>
|
||||
class SharedHandle<VULKAN_HPP_NAMESPACE::SwapchainKHR> : public SharedHandleBase<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainHeader>
|
||||
{
|
||||
using BaseType = SharedHandleBase<SwapchainKHR, SwapchainHeader>;
|
||||
using DeleterType = typename SharedHandleTraits<SwapchainKHR>::deleter;
|
||||
using BaseType = SharedHandleBase<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainHeader>;
|
||||
using DeleterType = typename SharedHandleTraits<VULKAN_HPP_NAMESPACE::SwapchainKHR>::deleter;
|
||||
friend BaseType;
|
||||
|
||||
public:
|
||||
SharedHandle() = default;
|
||||
|
||||
explicit SharedHandle( SwapchainKHR handle,
|
||||
SharedHandle<DestructorTypeOf<SwapchainKHR>> parent,
|
||||
SharedHandle<SurfaceKHR> surface,
|
||||
DeleterType deleter VULKAN_HPP_DEFAULT_ASSIGNMENT( DeleterType() ) ) VULKAN_HPP_NOEXCEPT
|
||||
explicit SharedHandle( VULKAN_HPP_NAMESPACE::SwapchainKHR handle,
|
||||
SharedHandle<DestructorTypeOf<VULKAN_HPP_NAMESPACE::SwapchainKHR>> parent,
|
||||
SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR> surface,
|
||||
DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT
|
||||
: BaseType( handle, std::move( surface ), std::move( parent ), std::move( deleter ) )
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
const SharedHandle<SurfaceKHR> & getSurface() const VULKAN_HPP_NOEXCEPT
|
||||
const SharedHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR> & getSurface() const VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
return getHeader().surface;
|
||||
}
|
||||
|
||||
+1126
-2814
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user