summaryrefslogtreecommitdiff
path: root/src/gpu/gpu.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-08 09:12:48 +0100
committerskal <pascal.massimino@gmail.com>2026-02-08 09:12:48 +0100
commitec98466b62797fe7e71f35f009a891e72f4ae85a (patch)
tree0f86391c020a6d223ccd4a46ccc9c45aa87fe866 /src/gpu/gpu.cc
parent16c2cdce6ad1d89d3c537f2c2cff743449925125 (diff)
Revert "feat(platform): Centralize platform-specific WebGPU code and improve shader composition"
This reverts commit 16c2cdce6ad1d89d3c537f2c2cff743449925125.
Diffstat (limited to 'src/gpu/gpu.cc')
-rw-r--r--src/gpu/gpu.cc111
1 files changed, 104 insertions, 7 deletions
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);