Skip to content

Validation Error for creating a 3D texture that is too large #863

@sharon92

Description

@sharon92

While creating a surface plot for an image with dimensions (3,3344,5822), a GPUValidationError is thrown.

The limits seems to be set at 2048, could this be changed dynamically?

Code Snippet:

        geometry = gfx.Geometry(grid=arr.astype(np.float32))
        material = gfx.VolumeIsoMaterial(clim=(0, 2000), threshold=1000)

        vol1 = gfx.Volume(geometry, material)
        self._scene.add(vol1)

Traceback:

Device::create_texture error: Dimension X value 5822 exceeds the limit of 2048
Draw error
Traceback (most recent call last):
  File "C:\Py312\Lib\site-packages\wgpu\gui\_gui_utils.py", line 77, in log_exception
    yield
  File "C:\Py312\Lib\site-packages\wgpu\gui\base.py", line 135, in _draw_frame_and_present
    self.draw_frame()
  File "c:\projekte\tutorial\stars_extract.py", line 69, in animate
    self._renderer.render(self._scene, self._camera)
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\renderer.py", line 511, in render
    container_group = get_pipeline_container_group(wobject, environment)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\pipeline.py", line 159, in get_pipeline_container_group
    pipeline_container_group.update(wobject, environment, changed_labels)
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\pipeline.py", line 239, in update
    container.update(wobject, environment, env_hash, changed)
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\pipeline.py", line 314, in update
    raise err
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\pipeline.py", line 311, in update
    self.update_shader_data(wobject, changed)
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\pipeline.py", line 347, in update_shader_data
    self.update_bind_groups()
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\pipeline.py", line 442, in update_bind_groups
    binding_des, binding_layout_des = binding.get_bind_group_descriptors(
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\binding.py", line 134, in get_bind_group_descriptors
    "resource": ensure_wgpu_object(resource),
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\update.py", line 153, in ensure_wgpu_object
    wgpu_texture = ensure_wgpu_object(resource.texture)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Py312\Lib\site-packages\pygfx\renderers\wgpu\engine\update.py", line 141, in ensure_wgpu_object
    resource._wgpu_object = device.create_texture(
                            ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Py312\Lib\site-packages\wgpu\backends\wgpu_native\_api.py", line 1149, in create_texture
    id = libf.wgpuDeviceCreateTexture(self._internal, struct)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Py312\Lib\site-packages\wgpu\backends\wgpu_native\_helpers.py", line 329, in proxy_func
    raise wgpu_error  # the frame above is more interesting ↑↑
    ^^^^^^^^^^^^^^^^
wgpu._classes.GPUValidationError: Validation Error

Caused by:
  In wgpuDeviceCreateTexture
    Dimension X value 5822 exceeds the limit of 2048

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions