From ec98466b62797fe7e71f35f009a891e72f4ae85a Mon Sep 17 00:00:00 2001 From: skal Date: Sun, 8 Feb 2026 09:12:48 +0100 Subject: Revert "feat(platform): Centralize platform-specific WebGPU code and improve shader composition" This reverts commit 16c2cdce6ad1d89d3c537f2c2cff743449925125. --- src/gpu/gpu.cc | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 104 insertions(+), 7 deletions(-) (limited to 'src/gpu/gpu.cc') diff --git a/src/gpu/gpu.cc b/src/gpu/gpu.cc index c61c605..9776eac 100644 --- a/src/gpu/gpu.cc +++ b/src/gpu/gpu.cc @@ -57,7 +57,11 @@ RenderPass gpu_create_render_pass(WGPUDevice device, WGPUTextureFormat format, RenderPass pass = {}; // Create Shader Module - WGPUShaderModuleDescriptor shader_desc = platform_create_shader_module_descriptor(shader_code); + WGPUShaderSourceWGSL wgsl_src = {}; + wgsl_src.chain.sType = WGPUSType_ShaderSourceWGSL; + wgsl_src.code = str_view(shader_code); + WGPUShaderModuleDescriptor shader_desc = {}; + shader_desc.nextInChain = &wgsl_src.chain; WGPUShaderModule shader_module = wgpuDeviceCreateShaderModule(device, &shader_desc); @@ -141,7 +145,7 @@ RenderPass gpu_create_render_pass(WGPUDevice device, WGPUTextureFormat format, depth_stencil.format = WGPUTextureFormat_Depth24Plus; depth_stencil.depthWriteEnabled = WGPUOptionalBool_False; depth_stencil.depthCompare = WGPUCompareFunction_Always; - PLATFORM_SET_PIPELINE_DEPTH_STENCIL(pipeline_desc, &depth_stencil); + pipeline_desc.depthStencil = &depth_stencil; pass.pipeline = wgpuDeviceCreateRenderPipeline(device, &pipeline_desc); @@ -153,7 +157,11 @@ ComputePass gpu_create_compute_pass(WGPUDevice device, const char* shader_code, int num_bindings) { ComputePass pass = {}; - WGPUShaderModuleDescriptor shader_desc = platform_create_shader_module_descriptor(shader_code); + WGPUShaderSourceWGSL wgsl_src = {}; + wgsl_src.chain.sType = WGPUSType_ShaderSourceWGSL; + wgsl_src.code = str_view(shader_code); + WGPUShaderModuleDescriptor shader_desc = {}; + shader_desc.nextInChain = &wgsl_src.chain; WGPUShaderModule shader_module = wgpuDeviceCreateShaderModule(device, &shader_desc); @@ -206,11 +214,49 @@ ComputePass gpu_create_compute_pass(WGPUDevice device, const char* shader_code, #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) { + (void)userdata2; + if (status == WGPURequestAdapterStatus_Success) { + *((WGPUAdapter*)userdata) = adapter; + } else { + printf("Request adapter failed: %.*s\n", (int)message.length, message.data); + } +} +static void handle_request_device(WGPURequestDeviceStatus status, + WGPUDevice device, WGPUStringView message, + void* userdata, void* userdata2) { + (void)userdata2; + if (status == WGPURequestDeviceStatus_Success) { + *((WGPUDevice*)userdata) = device; + } else { + printf("Request device failed: %.*s\n", (int)message.length, message.data); + } +} static void handle_device_error(const WGPUDevice* device, WGPUErrorType type, WGPUStringView message, void* userdata, void* userdata2) { @@ -220,6 +266,41 @@ static void handle_device_error(const WGPUDevice* device, WGPUErrorType type, 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; + if (status == WGPURequestAdapterStatus_Success) { + *((WGPUAdapter*)userdata) = adapter; + } +} +static void handle_request_device(WGPURequestDeviceStatus status, + WGPUDevice device, WGPUStringView message, + void* userdata, void* userdata2) { + (void)userdata2; + if (status == WGPURequestDeviceStatus_Success) { + *((WGPUDevice*)userdata) = device; + } +} +#endif /* defined(DEMO_CROSS_COMPILE_WIN32) */ #endif /* !defined(STRIP_ALL) */ void gpu_init(PlatformState* platform_state) { @@ -230,8 +311,16 @@ void gpu_init(PlatformState* platform_state) { adapter_opts.compatibleSurface = g_surface; adapter_opts.powerPreference = WGPUPowerPreference_HighPerformance; - platform_wgpu_request_adapter(g_instance, &adapter_opts, &g_adapter); - +#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); @@ -242,8 +331,16 @@ void gpu_init(PlatformState* platform_state) { #endif /* !defined(DEMO_CROSS_COMPILE_WIN32) */ #endif /* !defined(STRIP_ALL) */ - platform_wgpu_request_device(g_adapter, &device_desc, &g_device); - +#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); -- cgit v1.2.3