summaryrefslogtreecommitdiff
path: root/src/gpu/gpu.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-03-12 17:14:57 +0100
committerskal <pascal.massimino@gmail.com>2026-03-12 17:14:57 +0100
commitefad11008616d30f685752fc70aa05be524c1a78 (patch)
tree3a2dad4e054749af900c03800b3868d7a26a7678 /src/gpu/gpu.cc
parentce032eb25a480c086edcd7bbfa4a742e5e44a6a7 (diff)
fix(win): update wgpu-native to v27, unify Windows/macOS API paths
- fetch_win_deps.sh: update wgpu-native v0.19.4.1 → v27.0.4.0 (same as macOS) - platform.h: remove v0.19 compat shims, Windows now uses WGPUStringView API - gpu.cc/gpu.h: remove DEMO_CROSS_COMPILE_WIN32 old-API branches - texture_readback.cc, visual_debug.cc, hybrid3d_effect.cc: same cleanup - rotating_cube_effect.cc: remove #ifdef guard for depthSlice - glfw3webgpu.c: remove old WGPUSurfaceDescriptorFromWindowsHWND branch - asset_manager.cc: fix DEMO_STRIP_ALL→STRIP_ALL guard (vs_main was missing in STRIP_ALL Windows builds because disk-loading path ran on embedded data) - tracker.cc: skip MP3 assets gracefully in STRIP_ALL builds instead of fatal handoff(Gemini): Windows .exe now runs under Wine. demo64k.exe renders frames and progresses through audio timeline. Pre-existing test failures unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src/gpu/gpu.cc')
-rw-r--r--src/gpu/gpu.cc70
1 files changed, 12 insertions, 58 deletions
diff --git a/src/gpu/gpu.cc b/src/gpu/gpu.cc
index e743bf7..a463a10 100644
--- a/src/gpu/gpu.cc
+++ b/src/gpu/gpu.cc
@@ -325,30 +325,6 @@ ComputePass gpu_create_compute_pass(WGPUDevice device, const char* shader_code,
// --- Main Init/Draw ---
#if !defined(STRIP_ALL)
-#if defined(DEMO_CROSS_COMPILE_WIN32)
-static void handle_request_adapter(WGPURequestAdapterStatus status,
- WGPUAdapter adapter, const char* message,
- void* userdata) {
- if (status == WGPURequestAdapterStatus_Success) {
- *((WGPUAdapter*)userdata) = adapter;
- } else {
- printf("Request adapter failed: %s\n", message ? message : "Unknown");
- }
-}
-static void handle_request_device(WGPURequestDeviceStatus status,
- WGPUDevice device, const char* message,
- void* userdata) {
- if (status == WGPURequestDeviceStatus_Success) {
- *((WGPUDevice*)userdata) = device;
- } else {
- printf("Request device failed: %s\n", message ? message : "Unknown");
- }
-}
-static void handle_device_error(WGPUErrorType type, const char* message,
- void* userdata) {
- printf("WebGPU Error: %s\n", message ? message : "Unknown");
-}
-#else
static void handle_request_adapter(WGPURequestAdapterStatus status,
WGPUAdapter adapter, WGPUStringView message,
void* userdata, void* userdata2) {
@@ -377,29 +353,13 @@ static void handle_device_error(const WGPUDevice* device, WGPUErrorType type,
(void)userdata2;
printf("WebGPU Error: %.*s\n", (int)message.length, message.data);
}
-#endif /* defined(DEMO_CROSS_COMPILE_WIN32) */
#else
// STRIP_ALL versions
-#if defined(DEMO_CROSS_COMPILE_WIN32)
-static void handle_request_adapter(WGPURequestAdapterStatus status,
- WGPUAdapter adapter, const char* message,
- void* userdata) {
- if (status == WGPURequestAdapterStatus_Success) {
- *((WGPUAdapter*)userdata) = adapter;
- }
-}
-static void handle_request_device(WGPURequestDeviceStatus status,
- WGPUDevice device, const char* message,
- void* userdata) {
- if (status == WGPURequestDeviceStatus_Success) {
- *((WGPUDevice*)userdata) = device;
- }
-}
-#else
static void handle_request_adapter(WGPURequestAdapterStatus status,
WGPUAdapter adapter, WGPUStringView message,
void* userdata, void* userdata2) {
(void)userdata2;
+ (void)message;
if (status == WGPURequestAdapterStatus_Success) {
*((WGPUAdapter*)userdata) = adapter;
}
@@ -408,58 +368,52 @@ static void handle_request_device(WGPURequestDeviceStatus status,
WGPUDevice device, WGPUStringView message,
void* userdata, void* userdata2) {
(void)userdata2;
+ (void)message;
if (status == WGPURequestDeviceStatus_Success) {
*((WGPUDevice*)userdata) = device;
}
}
-#endif /* defined(DEMO_CROSS_COMPILE_WIN32) */
#endif /* !defined(STRIP_ALL) */
void gpu_init(PlatformState* platform_state) {
+#if defined(DEMO_CROSS_COMPILE_WIN32)
+ // Exclude GL backend: wgpu's WGL pixel-format selection panics under Wine.
+ WGPUInstanceExtras win_extras = {};
+ win_extras.chain.sType = (WGPUSType)WGPUSType_InstanceExtras;
+ win_extras.backends = WGPUInstanceBackend_Primary; // Vulkan + DX12, no GL
+ WGPUInstanceDescriptor win_desc = {};
+ win_desc.nextInChain = (WGPUChainedStruct*)&win_extras;
+ g_instance = wgpuCreateInstance(&win_desc);
+#else
g_instance = wgpuCreateInstance(nullptr);
+#endif
g_surface = platform_create_wgpu_surface(g_instance, platform_state);
WGPURequestAdapterOptions adapter_opts = {};
adapter_opts.compatibleSurface = g_surface;
adapter_opts.powerPreference = WGPUPowerPreference_HighPerformance;
-#if defined(DEMO_CROSS_COMPILE_WIN32)
- wgpuInstanceRequestAdapter(g_instance, &adapter_opts, handle_request_adapter,
- &g_adapter);
-#else
WGPURequestAdapterCallbackInfo adapter_cb = {};
adapter_cb.mode = WGPUCallbackMode_WaitAnyOnly;
adapter_cb.callback = handle_request_adapter;
adapter_cb.userdata1 = &g_adapter;
wgpuInstanceRequestAdapter(g_instance, &adapter_opts, adapter_cb);
-#endif /* defined(DEMO_CROSS_COMPILE_WIN32) */
while (!g_adapter)
platform_wgpu_wait_any(g_instance);
WGPUDeviceDescriptor device_desc = {};
#if !defined(STRIP_ALL)
-#if !defined(DEMO_CROSS_COMPILE_WIN32)
device_desc.uncapturedErrorCallbackInfo.callback = handle_device_error;
-#endif /* !defined(DEMO_CROSS_COMPILE_WIN32) */
#endif /* !defined(STRIP_ALL) */
-#if defined(DEMO_CROSS_COMPILE_WIN32)
- wgpuAdapterRequestDevice(g_adapter, &device_desc, handle_request_device,
- &g_device);
-#else
WGPURequestDeviceCallbackInfo device_cb = {};
device_cb.mode = WGPUCallbackMode_WaitAnyOnly;
device_cb.callback = handle_request_device;
device_cb.userdata1 = &g_device;
wgpuAdapterRequestDevice(g_adapter, &device_desc, device_cb);
-#endif /* defined(DEMO_CROSS_COMPILE_WIN32) */
while (!g_device)
platform_wgpu_wait_any(g_instance);
-#if defined(DEMO_CROSS_COMPILE_WIN32) && !defined(STRIP_ALL)
- platform_wgpu_set_error_callback(g_device, handle_device_error);
-#endif /* defined(DEMO_CROSS_COMPILE_WIN32) && !defined(STRIP_ALL) */
-
g_queue = wgpuDeviceGetQueue(g_device);
WGPUSurfaceCapabilities caps = {};