Open1

Rustクレート リーディングリスト+α

mars2nicomars2nico

wgpu

https://docs.rs/wgpu/0.19.3/wgpu/

wgpu-hal

  • trait Adapter
  • trait Api
  • trait CommandEncoder
  • trait Device
  • trait Instance
  • trait Queue
  • trait Surface

wgpu-hal - DirectX API対応関係メモ

wgpu-hal DirectX|DXGI 備考
Adapter::open ID3D12Device::CreateCommandQueue
Adapter::texture_format_capabilities ID3D12Device::CheckFeatureSupport D3D12_FEATURE::D3D12_FEATURE_FORMAT_SUPPORT
Adapter::surface_capabilities N/A
Adapter::get_presentation_timestamp N/A
Instance::init todo:dxgi LoadLibraryAもここで実行する バックエンドがDX12(OpenGL)の場合はd3d12.dll(opengl32.dll)
Instance::create_surface todo:dxgi
Instance::destroy_surface - NOP
Instance::enumerate_adapters todo:dxgi
Queue::submit ID3D12CommandQueue::ExecuteCommandLists
Queue::present IDXGISwapchain3::Present
Queue::get_timestamp_period ID3D12CommandQueue::GetTimestampFrequency
Surface::configure IDXGISwapChain::ResizeBuffers
Surface::unconfigure ID3D12Fence::GetCompletedValue, ID3D12CommandQueue::Signal 解放する前に待つ
Surface::acquire_texture IDXGISwapChain3::GetCurrentBackBufferIndex ここらへんの理解が特にあいまい
Surface::discard_texture - ここらへんの理解が特にあいまい

その他メモ

  • このクレートではランタイム時にプラットフォーム固有コードの呼び出しを決定する。wgpu-halモジュールを直接使うことで、いくつかの制約が課されるも、コンパイル時に決定することができそう。

    • Fully unsafe: zero overhead, zero validation.
    • Compile-time backend selection via traits.
      etc...

    -- https://docs.rs/wgpu/0.19.3/wgpu/hal/

  • Clone(Drop)トレイトの実装をWindows API(COM API)のIUnknownインターフェイスのAddRef(Release)と対応させている

    -- https://docs.rs/d3d12/0.19.0/d3d12/

  • OpenGLESバックエンドのときは自身のAPIとglowをつなぎこんでいるかもしれない