[rs] Move get_swap_chain_preferred_format from device to adapter

Squashed commit of the following:

commit 260976b10e3a54b253768d71e5e47c51b976c25c
Author: Niklas Korz <niklas@niklaskorz.de>
Date:   Mon Jan 11 20:23:31 2021 +0100

    Formatting

commit e3f837e1b6a81c8c7a9566ba6a2c6dd8adfbbde7
Author: Niklas Korz <niklas@niklaskorz.de>
Date:   Mon Jan 11 20:20:37 2021 +0100

    Update examples

commit b0774c0aa56fbdfe741dd6c0e86d55b8c6b42de3
Author: Niklas Korz <niklas@niklaskorz.de>
Date:   Mon Jan 11 19:31:29 2021 +0100

    Use adapter.get_swap_chain_preferred_format
This commit is contained in:
Niklas Korz
2021-01-11 20:32:03 +01:00
parent 1e3a93a632
commit 4d2bec6cab
7 changed files with 40 additions and 31 deletions

View File

@@ -26,20 +26,20 @@ webgl = ["wgc"]
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.wgc]
package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu"
rev = "5b9cfeb9413175de366ec1e3d64ec6ee2feffa0e"
rev = "ae3e5057aff64a8e6f13e75be661c0f8a98abcd5"
features = ["raw-window-handle"]
[target.'cfg(target_arch = "wasm32")'.dependencies.wgc]
package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu"
rev = "5b9cfeb9413175de366ec1e3d64ec6ee2feffa0e"
rev = "ae3e5057aff64a8e6f13e75be661c0f8a98abcd5"
features = ["raw-window-handle"]
optional = true
[dependencies.wgt]
package = "wgpu-types"
git = "https://github.com/gfx-rs/wgpu"
rev = "5b9cfeb9413175de366ec1e3d64ec6ee2feffa0e"
rev = "ae3e5057aff64a8e6f13e75be661c0f8a98abcd5"
[dependencies]
arrayvec = "0.5"

View File

@@ -201,7 +201,7 @@ fn start<E: Example>(
let spawner = Spawner::new();
let mut sc_desc = wgpu::SwapChainDescriptor {
usage: wgpu::TextureUsage::RENDER_ATTACHMENT,
format: device.get_swap_chain_preferred_format(),
format: adapter.get_swap_chain_preferred_format(&surface),
width: size.width,
height: size.height,
present_mode: wgpu::PresentMode::Mailbox,

View File

@@ -44,7 +44,7 @@ async fn run(event_loop: EventLoop<()>, window: Window) {
push_constant_ranges: &[],
});
let swapchain_format = device.get_swap_chain_preferred_format();
let swapchain_format = adapter.get_swap_chain_preferred_format(&surface);
let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
label: None,

View File

@@ -27,12 +27,12 @@ impl ViewportDesc {
}
}
fn build(self, device: &wgpu::Device) -> Viewport {
fn build(self, adapter: &wgpu::Adapter, device: &wgpu::Device) -> Viewport {
let size = self.window.inner_size();
let sc_desc = wgpu::SwapChainDescriptor {
usage: wgpu::TextureUsage::RENDER_ATTACHMENT,
format: device.get_swap_chain_preferred_format(),
format: adapter.get_swap_chain_preferred_format(&self.surface),
width: size.width,
height: size.height,
present_mode: wgpu::PresentMode::Fifo,
@@ -92,7 +92,7 @@ async fn run(event_loop: EventLoop<()>, viewports: Vec<(Window, wgpu::Color)>) {
let mut viewports: HashMap<WindowId, Viewport> = viewports
.into_iter()
.map(|desc| (desc.window.id(), desc.build(&device)))
.map(|desc| (desc.window.id(), desc.build(&adapter, &device)))
.collect();
event_loop.run(move |event, _, control_flow| {

View File

@@ -673,6 +673,19 @@ impl crate::Context for Context {
ready(Ok((device, device_id)))
}
fn adapter_get_swap_chain_preferred_format(
&self,
adapter: &Self::AdapterId,
surface: &Self::SurfaceId,
) -> TextureFormat {
let global = &self.0;
match wgc::gfx_select!(adapter => global.adapter_get_swap_chain_preferred_format(*adapter, *surface))
{
Ok(swap_chain_preferred_format) => swap_chain_preferred_format,
Err(err) => self.handle_error_fatal(err, "Adapter::get_swap_chain_preferred_format"),
}
}
fn adapter_features(&self, adapter: &Self::AdapterId) -> Features {
let global = &self.0;
match wgc::gfx_select!(*adapter => global.adapter_features(*adapter)) {
@@ -713,15 +726,6 @@ impl crate::Context for Context {
}
}
fn device_get_swap_chain_preferred_format(&self, device: &Self::DeviceId) -> TextureFormat {
let global = &self.0;
match wgc::gfx_select!(device.id => global.device_get_swap_chain_preferred_format(device.id))
{
Ok(swap_chain_preferred_format) => swap_chain_preferred_format,
Err(err) => self.handle_error_fatal(err, "Device::get_swap_chain_preferred_format"),
}
}
fn device_create_swap_chain(
&self,
device: &Self::DeviceId,

View File

@@ -954,6 +954,15 @@ impl crate::Context for Context {
)
}
fn adapter_get_swap_chain_preferred_format(
&self,
adapter: &Self::AdapterId,
surface: &Self::SurfaceId,
) -> wgt::TextureFormat {
// TODO: web-sys bindings need to be updated to not return a promise
wgt::TextureFormat::Bgra8Unorm
}
fn adapter_features(&self, _adapter: &Self::AdapterId) -> wgt::Features {
// TODO: web-sys has no way of getting extensions on adapters
wgt::Features::empty()
@@ -985,14 +994,6 @@ impl crate::Context for Context {
wgt::Limits::default()
}
fn device_get_swap_chain_preferred_format(
&self,
device: &Self::DeviceId,
) -> wgt::TextureFormat {
// TODO: web-sys bindings need to be updated to not return a promise
wgt::TextureFormat::Bgra8Unorm
}
fn device_create_swap_chain(
&self,
device: &Self::DeviceId,

View File

@@ -189,13 +189,17 @@ trait Context: Debug + Send + Sized + Sync {
desc: &DeviceDescriptor,
trace_dir: Option<&std::path::Path>,
) -> Self::RequestDeviceFuture;
fn adapter_get_swap_chain_preferred_format(
&self,
adapter: &Self::AdapterId,
surface: &Self::SurfaceId,
) -> TextureFormat;
fn adapter_features(&self, adapter: &Self::AdapterId) -> Features;
fn adapter_limits(&self, adapter: &Self::AdapterId) -> Limits;
fn adapter_get_info(&self, adapter: &Self::AdapterId) -> AdapterInfo;
fn device_features(&self, device: &Self::DeviceId) -> Features;
fn device_limits(&self, device: &Self::DeviceId) -> Limits;
fn device_get_swap_chain_preferred_format(&self, device: &Self::DeviceId) -> TextureFormat;
fn device_create_swap_chain(
&self,
device: &Self::DeviceId,
@@ -1384,6 +1388,11 @@ impl Adapter {
}
}
/// Returns an optimal texture format to use for the [`SwapChain`] with this adapter.
pub fn get_swap_chain_preferred_format(&self, surface: &Surface) -> TextureFormat {
Context::adapter_get_swap_chain_preferred_format(&*self.context, &self.id, &surface.id)
}
/// List all features that are supported with this adapter.
///
/// Features must be explicitly requested in [`Adapter::request_device`] in order
@@ -1428,11 +1437,6 @@ impl Device {
Context::device_limits(&*self.context, &self.id)
}
/// Returns an optimal texture format to use for the [`SwapChain`] with this device.
pub fn get_swap_chain_preferred_format(&self) -> TextureFormat {
Context::device_get_swap_chain_preferred_format(&*self.context, &self.id)
}
/// Creates a shader module from either SPIR-V or WGSL source code.
pub fn create_shader_module(&self, desc: &ShaderModuleDescriptor) -> ShaderModule {
ShaderModule {