diff options
Diffstat (limited to 'src/gpu/gpu.cc')
| -rw-r--r-- | src/gpu/gpu.cc | 70 |
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 = {}; |
