Skip to content

Commit a88bd70

Browse files
authored
Make canvas arg in request_adapter() optional (#415)
* Make canvas arg in request_adapter optional * Update examples and tests
1 parent f701760 commit a88bd70

File tree

11 files changed

+26
-43
lines changed

11 files changed

+26
-43
lines changed

docs/guide.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ you can obtain a device.
4343

4444
.. code-block:: py
4545
46-
adapter = wgpu.gpu.request_adapter(canvas=canvas, power_preference="high-performance")
46+
adapter = wgpu.gpu.request_adapter(power_preference="high-performance")
4747
device = adapter.request_device()
4848
4949
The ``wgpu.gpu`` object is the API entrypoint (:class:`wgpu.GPU`). It contains just a handful of functions,

examples/cube.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
canvas = WgpuCanvas(title="wgpu cube")
1717

1818
# Create a wgpu device
19-
adapter = wgpu.gpu.request_adapter(canvas=canvas, power_preference="high-performance")
19+
adapter = wgpu.gpu.request_adapter(power_preference="high-performance")
2020
device = adapter.request_device()
2121

2222
# Prepare present context

examples/triangle.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,14 @@
6262

6363
def main(canvas, power_preference="high-performance", limits=None):
6464
"""Regular function to setup a viz on the given canvas."""
65-
# Note: passing the canvas here can (oddly enough) prevent the
66-
# adapter from being found. Seen with wx/Linux.
67-
adapter = wgpu.gpu.request_adapter(canvas=None, power_preference=power_preference)
65+
adapter = wgpu.gpu.request_adapter(power_preference=power_preference)
6866
device = adapter.request_device(required_limits=limits)
6967
return _main(canvas, device)
7068

7169

7270
async def main_async(canvas):
7371
"""Async function to setup a viz on the given canvas."""
74-
adapter = await wgpu.gpu.request_adapter_async(
75-
canvas=canvas, power_preference="high-performance"
76-
)
72+
adapter = await wgpu.gpu.request_adapter_async(power_preference="high-performance")
7773
device = await adapter.request_device_async(required_limits={})
7874
return _main(canvas, device)
7975

examples/triangle_glsl.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,14 @@
4747

4848
def main(canvas, power_preference="high-performance", limits=None):
4949
"""Regular function to setup a viz on the given canvas."""
50-
# Note: passing the canvas here can (oddly enough) prevent the
51-
# adapter from being found. Seen with wx/Linux.
52-
adapter = wgpu.gpu.request_adapter(canvas=None, power_preference=power_preference)
50+
adapter = wgpu.gpu.request_adapter(power_preference=power_preference)
5351
device = adapter.request_device(required_limits=limits)
5452
return _main(canvas, device)
5553

5654

5755
async def main_async(canvas):
5856
"""Async function to setup a viz on the given canvas."""
59-
adapter = await wgpu.gpu.request_adapter_async(
60-
canvas=canvas, power_preference="high-performance"
61-
)
57+
adapter = await wgpu.gpu.request_adapter_async(power_preference="high-performance")
6258
device = await adapter.request_device_async(required_limits={})
6359
return _main(canvas, device)
6460

tests/test_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def test_base_wgpu_api():
107107
@mark.skipif(not can_use_wgpu_lib, reason="Needs wgpu lib")
108108
def test_backend_is_selected_automatically():
109109
# Test this in a subprocess to have a clean wgpu with no backend imported yet
110-
code = "import wgpu; print(wgpu.gpu.request_adapter(canvas=None))"
110+
code = "import wgpu; print(wgpu.gpu.request_adapter())"
111111
result = subprocess.run(
112112
[sys.executable, "-c", code],
113113
stdout=subprocess.PIPE,

tests/test_gui_glfw.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,7 @@ def test_glfw_canvas_render():
112112

113113
canvas = WgpuCanvas(max_fps=9999)
114114

115-
# wgpu.utils.get_default_device()
116-
adapter = wgpu.gpu.request_adapter(
117-
canvas=canvas, power_preference="high-performance"
118-
)
119-
device = adapter.request_device()
115+
device = wgpu.utils.get_default_device()
120116
draw_frame1 = _get_draw_function(device, canvas)
121117

122118
frame_counter = 0
@@ -203,6 +199,7 @@ def get_context(self):
203199

204200
canvas = CustomCanvas()
205201

202+
# Also pass canvas here, to touch that code somewhere
206203
adapter = wgpu.gpu.request_adapter(
207204
canvas=canvas, power_preference="high-performance"
208205
)

tests/test_wgpu_native_basics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ def test_shader_module_creation_spirv():
180180

181181
@mark.skipif(not can_use_wgpu_lib, reason="Needs wgpu lib")
182182
def test_adapter_destroy():
183-
adapter = wgpu.gpu.request_adapter(canvas=None, power_preference="high-performance")
183+
adapter = wgpu.gpu.request_adapter(power_preference="high-performance")
184184
assert adapter._internal is not None
185185
adapter.__del__()
186186
assert adapter._internal is None

tests_mem/test_objects.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
def test_release_adapter(n):
2121
yield {}
2222
for i in range(n):
23-
yield wgpu.gpu.request_adapter(canvas=None, power_preference="high-performance")
23+
yield wgpu.gpu.request_adapter(power_preference="high-performance")
2424

2525

2626
@create_and_release

wgpu/backends/wgpu_native/_api.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -177,21 +177,19 @@ def check_struct(struct_name, d):
177177

178178
class GPU(base.GPU):
179179
def request_adapter(
180-
self, *, canvas, power_preference=None, force_fallback_adapter=False
180+
self, *, power_preference=None, force_fallback_adapter=False, canvas=None
181181
):
182182
"""Create a `GPUAdapter`, the object that represents an abstract wgpu
183183
implementation, from which one can request a `GPUDevice`.
184184
185-
This is the implementation based on the Rust wgpu-native library.
185+
This is the implementation based on wgpu-native.
186186
187187
Arguments:
188-
canvas (WgpuCanvas): The canvas that the adapter should be able to
189-
render to (to create a swap chain for, to be precise). Can be None
190-
if you're not rendering to screen (or if you're confident that the
191-
returned adapter will work just fine).
192-
power_preference(PowerPreference): "high-performance" or "low-power".
188+
power_preference (PowerPreference): "high-performance" or "low-power".
193189
force_fallback_adapter (bool): whether to use a (probably CPU-based)
194190
fallback adapter.
191+
canvas (WgpuCanvasInterface): The canvas that the adapter should
192+
be able to render to. This can typically be left to None.
195193
"""
196194

197195
# ----- Surface ID
@@ -335,15 +333,15 @@ def to_py_str(key):
335333
return GPUAdapter(adapter_id, features, limits, adapter_info)
336334

337335
async def request_adapter_async(
338-
self, *, canvas, power_preference=None, force_fallback_adapter=False
336+
self, *, power_preference=None, force_fallback_adapter=False, canvas=None
339337
):
340338
"""Async version of ``request_adapter()``.
341-
This function uses the Rust WGPU library.
339+
This is the implementation based on wgpu-native.
342340
"""
343341
return self.request_adapter(
344-
canvas=canvas,
345342
power_preference=power_preference,
346343
force_fallback_adapter=force_fallback_adapter,
344+
canvas=canvas,
347345
) # no-cover
348346

349347

wgpu/base.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,39 +82,37 @@ class GPU:
8282
# IDL: Promise<GPUAdapter?> requestAdapter(optional GPURequestAdapterOptions options = {});
8383
@apidiff.change("arguments include a canvas object")
8484
def request_adapter(
85-
self, *, canvas, power_preference=None, force_fallback_adapter=False
85+
self, *, power_preference=None, force_fallback_adapter=False, canvas=None
8686
):
8787
"""Create a `GPUAdapter`, the object that represents an abstract wgpu
8888
implementation, from which one can request a `GPUDevice`.
8989
9090
Arguments:
91-
canvas (WgpuCanvasInterface): The canvas that the adapter should
92-
be able to render to (to create a swap chain for, to be precise).
93-
Can be None if you're not rendering to screen (or if you're
94-
confident that the returned adapter will work just fine).
9591
power_preference (PowerPreference): "high-performance" or "low-power".
9692
force_fallback_adapter (bool): whether to use a (probably CPU-based)
9793
fallback adapter.
94+
canvas (WgpuCanvasInterface): The canvas that the adapter should
95+
be able to render to. This can typically be left to None.
9896
"""
9997
# If this method gets called, no backend has been loaded yet, let's do that now!
10098
from .backends.auto import gpu # noqa
10199

102100
return gpu.request_adapter(
103-
canvas=canvas,
104101
power_preference=power_preference,
105102
force_fallback_adapter=force_fallback_adapter,
103+
canvas=canvas,
106104
)
107105

108106
# IDL: Promise<GPUAdapter?> requestAdapter(optional GPURequestAdapterOptions options = {});
109107
@apidiff.change("arguments include a canvas object")
110108
async def request_adapter_async(
111-
self, *, canvas, power_preference=None, force_fallback_adapter=False
109+
self, *, power_preference=None, force_fallback_adapter=False, canvas=None
112110
):
113111
"""Async version of `request_adapter()`."""
114112
return self.request_adapter(
115-
canvas=canvas,
116113
power_preference=power_preference,
117114
force_fallback_adapter=force_fallback_adapter,
115+
canvas=canvas,
118116
)
119117

120118
# IDL: GPUTextureFormat getPreferredCanvasFormat();

wgpu/utils/device.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ def get_default_device():
1212
if _default_device is None:
1313
import wgpu.backends.auto # noqa
1414

15-
adapter = wgpu.gpu.request_adapter(
16-
canvas=None, power_preference="high-performance"
17-
)
15+
adapter = wgpu.gpu.request_adapter(power_preference="high-performance")
1816
_default_device = adapter.request_device()
1917
return _default_device

0 commit comments

Comments
 (0)