Skip to content

Commit 77cfd2d

Browse files
Implement wgpuCreateInstance (#19762)
1 parent ddb15c1 commit 77cfd2d

File tree

2 files changed

+13
-21
lines changed

2 files changed

+13
-21
lines changed

src/library_webgpu.js

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2332,27 +2332,20 @@ var LibraryWebGPU = {
23322332
// Instance
23332333

23342334
wgpuCreateInstance: function() {
2335-
#if ASSERTIONS
2336-
// Once implemented, Instance should create and own the object management tables.
2337-
abort('TODO: wgpuCreateInstance unimplemented');
2338-
#endif
2335+
return 1;
23392336
},
23402337

23412338
wgpuInstanceReference: function() {
2342-
#if ASSERTIONS
2343-
abort('TODO: no WGPUInstance object should exist');
2344-
#endif
2339+
// no-op
23452340
},
23462341
wgpuInstanceRelease: function() {
2347-
#if ASSERTIONS
2348-
abort('TODO: no WGPUInstance object should exist');
2349-
#endif
2342+
// no-op
23502343
},
23512344

23522345
wgpuInstanceCreateSurface__deps: ['$findCanvasEventTarget'],
23532346
wgpuInstanceCreateSurface: function(instanceId, descriptor) {
23542347
{{{ gpu.makeCheck('descriptor') }}}
2355-
{{{ gpu.makeCheck('instanceId === 0, "WGPUInstance is ignored"') }}}
2348+
{{{ gpu.makeCheck('instanceId === 1, "WGPUInstance must be created by wgpuCreateInstance"') }}}
23562349
var nextInChainPtr = {{{ makeGetValue('descriptor', C_STRUCTS.WGPUSurfaceDescriptor.nextInChain, '*') }}};
23572350
#if ASSERTIONS
23582351
assert(nextInChainPtr !== 0);
@@ -2386,7 +2379,7 @@ var LibraryWebGPU = {
23862379

23872380
wgpuInstanceRequestAdapter__deps: ['$callUserCallback', '$stringToUTF8OnStack'],
23882381
wgpuInstanceRequestAdapter: function(instanceId, options, callback, userdata) {
2389-
{{{ gpu.makeCheck('instanceId === 0, "WGPUInstance is ignored"') }}}
2382+
{{{ gpu.makeCheck('instanceId === 1, "WGPUInstance must be created by wgpuCreateInstance"') }}}
23902383

23912384
var opts;
23922385
if (options) {

test/webgpu_basic_rendering.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,12 @@
1717
#include <emscripten/html5.h>
1818
#include <emscripten/html5_webgpu.h>
1919

20-
void GetDevice(void (*callback)(wgpu::Device)) {
21-
// Left as null (until supported in Emscripten)
22-
static const WGPUInstance instance = nullptr;
20+
static const wgpu::Instance instance = wgpuCreateInstance(nullptr);
2321

24-
wgpuInstanceRequestAdapter(instance, nullptr, [](WGPURequestAdapterStatus status, WGPUAdapter adapter, const char* message, void* userdata) {
22+
void GetDevice(void (*callback)(wgpu::Device)) {
23+
instance.RequestAdapter(nullptr, [](WGPURequestAdapterStatus status, WGPUAdapter cAdapter, const char* message, void* userdata) {
2524
if (message) {
26-
printf("wgpuInstanceRequestAdapter: %s\n", message);
25+
printf("RequestAdapter: %s\n", message);
2726
}
2827
if (status == WGPURequestAdapterStatus_Unavailable) {
2928
printf("WebGPU unavailable; exiting cleanly\n");
@@ -32,13 +31,14 @@ void GetDevice(void (*callback)(wgpu::Device)) {
3231
}
3332
assert(status == WGPURequestAdapterStatus_Success);
3433

35-
wgpuAdapterRequestDevice(adapter, nullptr, [](WGPURequestDeviceStatus status, WGPUDevice dev, const char* message, void* userdata) {
34+
wgpu::Adapter adapter = wgpu::Adapter::Acquire(cAdapter);
35+
adapter.RequestDevice(nullptr, [](WGPURequestDeviceStatus status, WGPUDevice cDevice, const char* message, void* userdata) {
3636
if (message) {
37-
printf("wgpuAdapterRequestDevice: %s\n", message);
37+
printf("RequestDevice: %s\n", message);
3838
}
3939
assert(status == WGPURequestDeviceStatus_Success);
4040

41-
wgpu::Device device = wgpu::Device::Acquire(dev);
41+
wgpu::Device device = wgpu::Device::Acquire(cDevice);
4242
reinterpret_cast<void (*)(wgpu::Device)>(userdata)(device);
4343
}, userdata);
4444
}, reinterpret_cast<void*>(callback));
@@ -377,7 +377,6 @@ void run() {
377377

378378
wgpu::SurfaceDescriptor surfDesc{};
379379
surfDesc.nextInChain = &canvasDesc;
380-
wgpu::Instance instance{}; // null instance
381380
wgpu::Surface surface = instance.CreateSurface(&surfDesc);
382381

383382
wgpu::SwapChainDescriptor scDesc{};

0 commit comments

Comments
 (0)