Leo Kettmeir
6066e069d1
fix(ext/webgpu): invalidate GPUAdapter when a device is created ( #23752 )
...
This removes the need for using `Deno.resources` to close the gpuadapter
resource, while being more spec compliant.
2024-05-10 04:10:22 -07:00
Leo Kettmeir
cd12d41627
chore: update wgpu ( #23684 )
2024-05-05 07:22:18 -07:00
David Sherret
ad6b00a2bf
chore: enable clippy unused_async rule ( #22834 )
2024-03-11 23:48:00 -04:00
Divy Srivastava
40febd9dd1
feat:: External webgpu surfaces / BYOW ( #21835 )
...
This PR contains the implementation of the External webgpu surfaces /
BYOW proposal. BYOW stands for "Bring your own window".
Closes #21713
Adds `Deno.UnsafeWindowSurface` ( `--unstable-webgpu` API) to the `Deno`
namespace:
```typescript
class UnsafeWindowSurface {
constructor(
system: "cocoa" | "x11" | "win32",
winHandle: Deno.PointerValue,
displayHandle: Deno.PointerValue | null
);
getContext(type: "webgpu"): GPUCanvasContext;
present(): void;
}
```
For the initial pass, I've opted to support the three major windowing
systems. The parameters correspond to the table below:
| system | winHandle | displayHandle |
| ----------------- | ---------- | ------- |
| "cocoa" (macOS) | `NSView*` | - |
| "win32" (Windows) | `HWND` | `HINSTANCE` |
| "x11" (Linux) | Xlib `Window` | Xlib `Display*` |
Ecosystem support:
- [x] deno_sdl2 (sdl2) -
[mod.ts#L1209](7e177bc652/mod.ts (L1209)
)
- [x] dwm (glfw) - https://github.com/deno-windowing/dwm/issues/29
- [ ] pane (winit)
<details>
<summary>Example</summary>
```typescript
// A simple clear screen pass, colors based on mouse position.
import { EventType, WindowBuilder } from "https://deno.land/x/sdl2@0.7.0/mod.ts ";
const window = new WindowBuilder("sdl2 + deno + webgpu", 640, 480).build();
const [system, windowHandle, displayHandle] = window.rawHandle();
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const context = Deno.createWindowSurface(system, windowHandle, displayHandle);
context.configure({
device: device,
format: "bgra8unorm",
height: 480,
width: 640,
});
let r = 0.0;
let g = 0.0;
let b = 0.0;
for (const event of window.events()) {
if (event.type === EventType.Quit) {
break;
} else if (event.type === EventType.Draw) {
const textureView = context.getCurrentTexture().createView();
const renderPassDescriptor: GPURenderPassDescriptor = {
colorAttachments: [
{
view: textureView,
clearValue: { r, g, b, a: 1.0 },
loadOp: "clear",
storeOp: "store",
},
],
};
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
Deno.presentGPUCanvasContext(context);
}
if (event.type === EventType.MouseMotion) {
r = event.x / 640;
g = event.y / 480;
b = 1.0 - r - g;
}
}
```
You can find more examples in the linked tracking issue.
</details>
---------
Signed-off-by: Divy Srivastava <dj.srivastava23@gmail.com>
2024-01-19 22:49:14 +05:30
Divy Srivastava
9f86705fa6
chore(ext/webgpu): include GPUCanvasContext in snapshot ( #21773 )
...
Part 1 of #21713
Changes:
- Remove `.present()` and add a `presentGPUCanvasContext` (not exposed
yet to users)
- Move lazy load logic to `00_init.js`. This can be used to use webgpu
on-demand from future code (OffScreenCanvas)
2024-01-05 19:55:01 +05:30
David Sherret
7e72f3af61
chore: update copyright to 2024 ( #21753 )
2024-01-01 19:58:21 +00:00
Leo Kettmeir
393abed387
feat: bring back WebGPU ( #20812 )
...
Signed-off-by: Leo Kettmeir <crowlkats@toaxl.com>
Co-authored-by: Kenta Moriuchi <moriken@kimamass.com>
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2023-12-09 01:19:16 +01:00
Leo Kettmeir
35196eab27
BREAKING(unstable): remove WebGPU ( #18094 )
...
This PR _**temporarily**_ removes WebGPU (which has behind the
`--unstable` flag in Deno), due to performance complications due to its
presence.
It will be brought back in the future; as a point of reference, Chrome
will ship WebGPU to stable on 26/04/2023.
---------
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2023-03-17 00:29:32 +01:00
David Sherret
fb021d7cef
refactor: remove usages of map_or
/ map_or_else
( #18212 )
...
These methods are confusing because the arguments are backwards. I feel
like they should have never been added to `Option<T>` and that clippy
should suggest rewriting to
`map(...).unwrap_or(...)`/`map(...).unwrap_or_else(|| ...)`
https://github.com/rust-lang/rfcs/issues/1025
2023-03-15 17:46:36 -04:00
Bartek Iwańczuk
8f207c0f3f
refactor: Split extension registration for runtime and snapshotting ( #18095 )
...
This commit splits "<ext_name>::init" functions into "init_ops" and
"init_ops_and_esm". That way we don't have to construct list of
ESM sources on each startup if we're running with a snapshot.
In a follow up commit "deno_core" will be changed to not have a split
between "extensions" and "extensions_with_js" - it will be embedders'
responsibility to pass appropriately configured extensions.
Prerequisite for https://github.com/denoland/deno/pull/18080
2023-03-09 14:56:19 +00:00
Bartek Iwańczuk
c3cba7f22c
refactor(core): Extension::builder_with_deps ( #18093 )
...
Prerequisite for https://github.com/denoland/deno/pull/18080
2023-03-09 12:10:54 +00:00
Bartek Iwańczuk
b32a6f8ad2
refactor(core): don't use Result in ExtensionBuilder::state ( #18066 )
...
There's no point for this API to expect result. If something fails it should
result in a panic during build time to signal to embedder that setup is
wrong.
2023-03-07 22:37:37 +01:00
Leo Kettmeir
a16c11c5d1
refactor: move webgpu files to ext root ( #17832 )
...
Required for #17826
2023-02-20 16:48:02 +00:00
Aaron O'Mullan
bd5d445da9
chore: re-enable wgpu_sync ( #13453 )
2022-01-24 23:47:05 +01:00
Aaron O'Mullan
3ab68bd0a2
revert( #13402 ): experiment: wgpu sync ( #13439 )
2022-01-20 15:23:53 +01:00
Aaron O'Mullan
2ab21dafa7
experiment: wgpu sync ( #13402 )
2022-01-19 13:38:51 +01:00
Ryan Dahl
1fb5858009
chore: update copyright to 2022 ( #13306 )
...
Co-authored-by: Erfan Safari <erfanshield@outlook.com>
2022-01-07 22:09:52 -05:00
Luca Casonato
4853be20f2
refactor(webgpu): use op interface idiomatically ( #11835 )
2021-08-24 20:32:25 +02:00
Leo K
f4a9db350f
chore(ext/webgpu): update wgpu to 0.10.0 ( #11781 )
...
Co-authored-by: Luca Casonato <hello@lcas.dev>
2021-08-24 13:29:42 +02:00
Aaron O'Mullan
2ca454b402
refactor(ops): return BadResource errors in ResourceTable calls ( #11710 )
...
* refactor(ops): return BadResource errors in ResourceTable calls
Instead of relying on callers to map Options to Results via `.ok_or_else(bad_resource_id)` at over 176 different call sites ...
2021-08-15 13:29:19 +02:00
Ryan Dahl
a0285e2eb8
Rename extensions/ directory to ext/ ( #11643 )
2021-08-11 12:27:05 +02:00