Commit graph

331 commits

Author SHA1 Message Date
InKryption
f8e14dabc6 Run zig fmt
>> Zig master changed `c_void` to `anyopaque`, and zig fmt helps to change code as appropriate
2021-12-19 16:15:32 -07:00
Stephen Gutekanst
398b289941 glfw: mention Matrix chat room
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-14 18:16:45 -08:00
Ali Chraghi
595cf48450
glfw: replace isize, usize with i32, u32 where appropriate (#126)
Fixes hexops/mach#114
2021-12-14 09:20:14 -07:00
Stephen Gutekanst
3ec74222e6 glfw: reduce compilation units to bring iteration time down to ~90ms
This consistently shaves off about 40ms (~130ms -> ~90ms, 30% reduction) from build times when iterating.

On Windows, I suspect the result will be much greater due to slow filesystem perf there and the fact
that this reduces the # of files read.

This was originally brought to my attention as a possibility by @meshula in hexops/dawn#2, the way this
works is by reducing compilation units so that C headers only need to be read/parsed/interpreted once
rather than once per individual C source file we are compiling.

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-10 03:52:41 -08:00
Stephen Gutekanst
77d2e8a9a3 glfw: improve consecutive build times by 4-12x
This substantially reduces consecutive build times when using mach/glfw.

`system_sdk.getSdkPath` is frequently invoked as part of the build process, and previously it was
doing some fairly involved work (ensuring the native SDK is at the right revision, needless
`git fetch` in native SDKs to check for updates, etc.)

We now do far less work in `getSdkPath`, and additionally cache the result in-memory. This improves
build times substantially, but especially so with consecutive (non-cold-cache) build times:

* For `mach/glfw`: ~2s before, ~160ms after
* For `mach/gpu`: , ~16s before, ~3.6s after

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-10 03:40:00 -08:00
InKryption
a9d378583d glfw: rename capture appropriately 2021-12-09 19:42:28 -08:00
InKryption
f8be8582af glfw: replace `glfw.dont_care as sentinel value
Apply same pattern to other hints which can take on the value of `glfw.dont_care`.
2021-12-09 19:42:28 -08:00
InKryption
4252ee0b1f glfw: replace glfw.dont_care as sentinel value
Also change logic inside `Hints.set` to account for this special case
2021-12-09 19:42:28 -08:00
InKryption
f906bd6c79 glfw: remove accidental re-addition of TODO 2021-12-09 19:42:28 -08:00
InKryption
f953621a40 glfw: add doc-comment
Add comment for new `glfw.Window.SizeOptional` struct

Co-authored-by: Stephen Gutekanst <stephen.gutekanst@gmail.com>
2021-12-09 19:42:28 -08:00
InKryption
b50b56760e glfw: replace usage of glfw.dont_care as sentinel value for parameters in some glfw.Window functions 2021-12-09 19:42:28 -08:00
InKryption
b8c913cd6c glfw: remove TODOs 2021-12-08 19:30:01 -08:00
Stephen Gutekanst
9ea4d2aa6f glfw: correctly @errorSetCast when returning errors from createWindowSurface
Fixes an issue where `createWindowSurface` would not compile (found when
updating https://github.com/hexops/mach-glfw-vulkan-example to latest.)

Introduced in hexops/mach#115

cc @InKryption

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-06 22:16:06 -07:00
InKryption
3648d6b9c4
glfw: Denormalize errors (#115)
Closes hexops/mach#96

Co-authored-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-06 21:52:15 -07:00
Stephen Gutekanst
32a5addcbb glfw: update CI to latest Zig master
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-06 20:03:38 -08:00
BratishkaErik
784aa40093 glfw: update system_sdk.zig to latest Zig master 2021-12-06 20:03:38 -08:00
Stephen Gutekanst
d8d0c85572 glfw: make getProcAddress ABI compatible with C implementation
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-05 04:22:21 +00:00
Stephen Gutekanst
0fc2876e41 glfw: update Linux SDK (enforce static linkage of libvulkan and libX11-xcb)
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-12-01 04:04:19 +00:00
Stephen Gutekanst
77a4b5239b glfw: update Linux system SDK
Helps hexops/mach#87

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-30 16:56:15 -07:00
Stephen Gutekanst
6c93a9d5a4 glfw: add build-system TODOs
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-30 11:29:56 -07:00
Stephen Gutekanst
cbf88d7669 glfw: update system SDKs for macOS 11 cross compilation
Fixes hexops/mach#108

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-29 21:24:22 -07:00
Stephen Gutekanst
87ad07a9bf glfw: CI: re-enable x86_64-macos -> aarch64-macos cross compilation
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-29 21:24:22 -07:00
Stephen Gutekanst
256fea8e5f glfw: do not pin SDK version when using custom dev SDK path
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-29 21:24:22 -07:00
InKryption
cb4f911782 glfw: Fix pointer cast
The GLFW implementation takes a constant pointer to a `VkAllocationCallbacks` struct; casting it to a mutable pointer equivalent here doesn't break anything, but does prevent passing a valid const pointer, which is often what one should prefer to do.
As well, the `@alignOf` builtin takes the alignment expected of the type directly, so `@alignOf(*T)` returns the alignment of `*T`, not `T`, so that has also been corrected.
2021-11-29 12:52:46 -07:00
Stephen Gutekanst
979a8bc978 glfw: make system_sdk pin versions, auto-update
Prior to this change, an older commit of Mach or mach-glfw would use the latest
version of the native system SDKs, which would sometimes be incompatible. Better
is to ensure that we actually pin the revision we're using, so a given revision
of mach or mach-glfw is using a specific revision of the native SDKs.

Similarly, we previously had no mechanism for updating SDKs: it was either cloned,
or it wasn't. This introduces a simple `git fetch` prior to hard-resetting the SDK
to the target pinned revision - effectively giving us automatic updates for anyone
using an older revision.

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-28 18:43:58 -07:00
Stephen Gutekanst
ace36d0542 glfw: rename system_sdk.Options.linux_x86_64_sdk for consistency
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-28 18:43:58 -07:00
Stephen Gutekanst
8447c2fb2a glfw: correct Apple SDK license prompt
Prior to this the Apple SDK license agreement prompt would appear for 11.3 but
not 12.0 by accident. This fixes the issue.

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-28 18:43:58 -07:00
Stephen Gutekanst
eb44c884e4 glfw: CI: disable x86_64-macos -> aarch64-macos cross compilation
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-27 00:15:15 -07:00
Stephen Gutekanst
8221a531aa glfw: update CI to latest Zig master version
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-27 00:15:15 -07:00
Stephen Gutekanst
9b9b53312b Revert "glfw: patch GLFW sources to workaround a bug where Zig and Mach C headers conflict"
This reverts commit 7d47233d7a.

See hexops/mach#102
2021-11-27 00:15:15 -07:00
Stephen Gutekanst
1df13d0509 glfw: update system_sdk to match latest Zig master macOS version targeting
The latest Zig master supports specifying a specific macOS version for libc, via
the target triple (ziglang/zig#10215):

* x86_64-macos.10 (Catalina)
* x86_64-macos.11 (Big Sur)
* x86_64-macos.12 (Monterey)
* aarch64-macos.11 (Big Sur)
* aarch64-macos.12 (Monterey)

Mach's `system_sdk.zig` can now download the relevant XCode framework stubs
for Big Sur (11) and Monterey (12). Although we don't have an SDK for Catalina (10)
currently, we use the Big Sur (11) SDK in that case and it generally works fine.
By default, Zig targets the N-3 version (e.g. `x86_64-macos` defaults to `x86_64-macos.10`).

Targeting the minimum supported version is useful for compatability, it guarantees the produced
binary will run on any later macOS version. Targeting the newer version can be useful if you
wish to use newer APIs not available in previous versions.

Fixes hexops/mach#102

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-27 00:15:15 -07:00
Stephen Gutekanst
f91ceef291 glfw: support building with latest Zig master
This removes a linker hack which was preventing building with the latest
Zig master version. Of particular note, anyone wishing to use this library
will need to ensure they are up to date with latest master.

The binary releases available at https://ziglang.org/download/ (1783+eec825c and
beyond) are sufficient (really, anything released after today.)

Fixes hexops/mach#103

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2021-11-26 22:29:58 -07:00
InKryption
7b9b0469cb glfw: un-hardcode constant
Make the constant extracted from GLFW source into `time.setTime`, into a better-documented set of comptime instructions
2021-11-26 22:13:47 -07:00
InKryption
1d648c2256 glfw: Eliminate Error.InvalidValue 2021-11-26 20:50:38 -07:00
InKryption
683c60bdfe glfw: run zig fmt 2021-11-24 05:14:48 -07:00
InKryption
a6b30b98e2 glfw: add runtime assertion to Window.setInputMode
Assertion to ensure that the value of 'mode' matches the type of 'value'
2021-11-24 05:14:48 -07:00
InKryption
f9ecc8e1f8 glfw: Finalize removal of 'InvalidEnum' error 2021-11-24 05:14:48 -07:00
InKryption
fb0c695bd1 glfw: Eliminate InvalidEnum 2021-11-24 05:14:48 -07:00
InKryption
a465d2e021 glfw: add 'assertInitialized' 2021-11-23 12:12:55 -07:00
InKryption
c95bc37306 glfw: make comment into doc comment 2021-11-23 12:12:55 -07:00
InKryption
77eeadd407 glfw: update possible errors comment
Add 'FormatUnavailable' as a possible error to the 'getClipboardString' comment, which can set it on wayland
2021-11-23 11:07:14 -07:00
InKryption
6127fa267f glfw: re-instate prong
Bring back the 'c.GLFW_NOT_INITIALIZED' prong in 'convertError', such that if it is ever passed that error code, we can differentiate it from just an invalid input; because it is a valid input, we just guarantee that it won't occur.
2021-11-23 11:06:19 -07:00
InKryption
b35a7b4fad glfw: Change error unions into normal returns, in accordance with the new guarantee to never encounter 'GLFW_NOT_INITIALIZED', and update tests 2021-11-22 12:59:11 -07:00
InKryption
88e0d37325 glfw: enum-ify 'Joystick.jid', set 'InvalidEnum' as unreachable, and run zig fmt 2021-11-22 12:59:11 -07:00
InKryption
aae3ea8577 constify unmutated variables in build files 2021-11-22 12:59:11 -07:00
InKryption
d9e2505b59 glfw: amend and update various TODOs pertaining to force-init changes 2021-11-22 12:59:11 -07:00
InKryption
da392d89a7 glfw: assert initialized in proc address getter functions 2021-11-22 12:59:11 -07:00
InKryption
43b2502e3a glfw: fix for getClipboardString reaching unreachable prong on linux CI 2021-11-22 12:59:11 -07:00
InKryption
ef7ada052c glfw: Revert error denormalization 2021-11-22 12:59:11 -07:00
InKryption
44fee8f1f1 glfw: force init error type work around 2021-11-22 12:59:11 -07:00