packages feed

mischief-render-0.1.0.0: cbits/wrapper.c

#include "wrapper.h"
#include "webgpu.h"
#include <stdio.h>
// #include <unistd.h>

struct adapterBox {
  WGPUAdapter adapter; 
};

struct deviceBox {
  WGPUDevice device; 
};


static void handle_request_adapter(WGPURequestAdapterStatus status,
                                   WGPUAdapter adapter, WGPUStringView message,
                                   void *userdata1, void *userdata2) {

  if (status == WGPURequestAdapterStatus_Success) {
    struct adapterBox *box = userdata1;
    box->adapter = adapter;
  } else {
    printf(" request_adapter status=%#.8x message=%.*s\n", status,
           (int) message.length, message.data);
  }
}

static void handle_request_device(WGPURequestDeviceStatus status,
                                  WGPUDevice device, WGPUStringView message,
                                  void *userdata1, void *userdata2) {
  if (status == WGPURequestDeviceStatus_Success) {
    struct deviceBox *box = userdata1;
    box->device = device;
  } else {
    printf(" request_device status=%#.8x message=%.*s\n", status,
           (int) message.length, message.data);
  }
}

WGPUDevice hs_wgpuAdapterRequestDevice(
    WGPUAdapter adapter
) {
    struct deviceBox deviceBox = {0};

    wgpuAdapterRequestDevice(adapter, NULL, 
                          (const WGPURequestDeviceCallbackInfo){ 
                              .callback = handle_request_device,
                              .userdata1 = &deviceBox
                          });
    // sleep(2);
    return deviceBox.device;
}

WGPUAdapter hs_wgpuInstanceRequestAdapter(
  WGPUInstance instance, 
  WGPUSurface surface
) {
    struct adapterBox adapterBox = {0};

    wgpuInstanceRequestAdapter(instance,
      &(const WGPURequestAdapterOptions){
          .compatibleSurface = surface,
      },
      (const WGPURequestAdapterCallbackInfo){
          .callback = handle_request_adapter,
          .userdata1 = &adapterBox 
      });
    
    // sleep(2);
    return adapterBox.adapter;
}