Skip to content

Commit 55eec80

Browse files
[rs] Merge gfx-rs#360
360: Implement TEXTURE_BINDING_ARRAY extension r=kvark a=cwfitzgerald This extends gfx-rs#711 into wgpu-rs. Notable changes: - Added an example showing off both this extension and the future descriptor indexing extension. - Changed the framework so there is a static function showing what extensions you need. This is provided by the trait,, which defaults to no extensions, so existing examples and new ones don't have to care about extensions. Co-authored-by: Connor Fitzgerald <[email protected]>
2 parents 9842d20 + 200025e commit 55eec80

File tree

16 files changed

+419
-190
lines changed

16 files changed

+419
-190
lines changed

wgpu/Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,20 @@ vulkan = ["wgc/gfx-backend-vulkan"]
2828
package = "wgpu-core"
2929
version = "0.5"
3030
git = "https://github.com/gfx-rs/wgpu"
31-
rev = "eaf8f4af87237373105b016832662e7943b3899c"
31+
rev = "64ae59072db443eb1e47ee14d77370eec9f4b012"
3232
features = ["raw-window-handle"]
3333

3434
[dependencies.wgt]
3535
package = "wgpu-types"
3636
version = "0.5"
3737
git = "https://github.com/gfx-rs/wgpu"
38-
rev = "eaf8f4af87237373105b016832662e7943b3899c"
38+
rev = "64ae59072db443eb1e47ee14d77370eec9f4b012"
3939

4040
[dependencies]
4141
arrayvec = "0.5"
4242
futures = "0.3"
4343
smallvec = "1"
44+
typed-arena = "2.0.1"
4445
raw-window-handle = "0.3"
4546
parking_lot = "0.10"
4647

@@ -72,6 +73,7 @@ test = true
7273
#gfx-backend-vulkan = { version = "0.5.0", path = "../gfx/src/backend/vulkan" }
7374
#gfx-backend-dx12 = { version = "0.5.0", path = "../gfx/src/backend/dx12" }
7475
#gfx-backend-dx11 = { version = "0.5.0", path = "../gfx/src/backend/dx11" }
76+
#gfx-backend-metal = { version = "0.5.0", path = "../gfx/src/backend/dx11" }
7577
#gfx-descriptor = { version = "0.1.0", path = "../gfx-extras/gfx-descriptor" }
7678
#gfx-memory = { version = "0.1.0", path = "../gfx-extras/gfx-memory" }
7779

wgpu/examples/boids/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ impl framework::Example for Example {
5757
binding: 0,
5858
visibility: wgpu::ShaderStage::COMPUTE,
5959
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
60+
..Default::default()
6061
},
6162
wgpu::BindGroupLayoutEntry {
6263
binding: 1,
@@ -65,6 +66,7 @@ impl framework::Example for Example {
6566
dynamic: false,
6667
readonly: false,
6768
},
69+
..Default::default()
6870
},
6971
wgpu::BindGroupLayoutEntry {
7072
binding: 2,
@@ -73,6 +75,7 @@ impl framework::Example for Example {
7375
dynamic: false,
7476
readonly: false,
7577
},
78+
..Default::default()
7679
},
7780
],
7881
label: None,

wgpu/examples/cube/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ impl framework::Example for Example {
139139
binding: 0,
140140
visibility: wgpu::ShaderStage::VERTEX,
141141
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
142+
..Default::default()
142143
},
143144
wgpu::BindGroupLayoutEntry {
144145
binding: 1,
@@ -148,11 +149,13 @@ impl framework::Example for Example {
148149
component_type: wgpu::TextureComponentType::Float,
149150
dimension: wgpu::TextureViewDimension::D2,
150151
},
152+
..Default::default()
151153
},
152154
wgpu::BindGroupLayoutEntry {
153155
binding: 2,
154156
visibility: wgpu::ShaderStage::FRAGMENT,
155157
ty: wgpu::BindingType::Sampler { comparison: false },
158+
..Default::default()
156159
},
157160
],
158161
});

wgpu/examples/framework.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ pub enum ShaderStage {
3030
}
3131

3232
pub trait Example: 'static + Sized {
33+
fn needed_extensions() -> (wgt::Extensions, wgt::UnsafeExtensions) {
34+
(wgpu::Extensions::empty(), wgt::UnsafeExtensions::disallow())
35+
}
3336
fn init(
3437
sc_desc: &wgpu::SwapChainDescriptor,
3538
device: &wgpu::Device,
@@ -60,23 +63,27 @@ async fn run_async<E: Example>(event_loop: EventLoop<()>, window: Window) {
6063
(size, surface)
6164
};
6265

66+
let (needed_extensions, unsafe_extensions) = E::needed_extensions();
67+
6368
let adapter = instance
6469
.request_adapter(
6570
&wgpu::RequestAdapterOptions {
6671
power_preference: wgpu::PowerPreference::Default,
6772
compatible_surface: Some(&surface),
6873
},
69-
wgpu::UnsafeExtensions::disallow(),
74+
unsafe_extensions,
7075
wgpu::BackendBit::PRIMARY,
7176
)
7277
.await
7378
.unwrap();
7479

80+
let adapter_extensions = adapter.extensions();
81+
7582
let trace_dir = std::env::var("WGPU_TRACE");
7683
let (device, queue) = adapter
7784
.request_device(
7885
&wgpu::DeviceDescriptor {
79-
extensions: wgpu::Extensions::empty(),
86+
extensions: adapter_extensions & needed_extensions,
8087
limits: wgpu::Limits::default(),
8188
shader_validation: true,
8289
},

wgpu/examples/hello-compute/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ async fn execute_gpu(numbers: Vec<u32>) -> Vec<u32> {
7272
dynamic: false,
7373
readonly: false,
7474
},
75+
..Default::default()
7576
}],
7677
});
7778

wgpu/examples/mipmap/main.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,13 @@ impl Example {
9292
component_type: wgpu::TextureComponentType::Float,
9393
dimension: wgpu::TextureViewDimension::D2,
9494
},
95+
..Default::default()
9596
},
9697
wgpu::BindGroupLayoutEntry {
9798
binding: 1,
9899
visibility: wgpu::ShaderStage::FRAGMENT,
99100
ty: wgpu::BindingType::Sampler { comparison: false },
101+
..Default::default()
100102
},
101103
],
102104
label: None,
@@ -231,6 +233,7 @@ impl framework::Example for Example {
231233
binding: 0,
232234
visibility: wgpu::ShaderStage::VERTEX,
233235
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
236+
..Default::default()
234237
},
235238
wgpu::BindGroupLayoutEntry {
236239
binding: 1,
@@ -240,11 +243,13 @@ impl framework::Example for Example {
240243
multisampled: false,
241244
dimension: wgpu::TextureViewDimension::D2,
242245
},
246+
..Default::default()
243247
},
244248
wgpu::BindGroupLayoutEntry {
245249
binding: 2,
246250
visibility: wgpu::ShaderStage::FRAGMENT,
247251
ty: wgpu::BindingType::Sampler { comparison: false },
252+
..Default::default()
248253
},
249254
],
250255
label: None,

wgpu/examples/shadow/main.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ impl framework::Example for Example {
248248
binding: 0,
249249
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
250250
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
251+
..Default::default()
251252
}],
252253
label: None,
253254
});
@@ -430,6 +431,7 @@ impl framework::Example for Example {
430431
binding: 0, // global
431432
visibility: wgpu::ShaderStage::VERTEX,
432433
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
434+
..Default::default()
433435
}],
434436
label: None,
435437
});
@@ -518,11 +520,13 @@ impl framework::Example for Example {
518520
binding: 0, // global
519521
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
520522
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
523+
..Default::default()
521524
},
522525
wgpu::BindGroupLayoutEntry {
523526
binding: 1, // lights
524527
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
525528
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
529+
..Default::default()
526530
},
527531
wgpu::BindGroupLayoutEntry {
528532
binding: 2,
@@ -532,11 +536,13 @@ impl framework::Example for Example {
532536
component_type: wgpu::TextureComponentType::Float,
533537
dimension: wgpu::TextureViewDimension::D2Array,
534538
},
539+
..Default::default()
535540
},
536541
wgpu::BindGroupLayoutEntry {
537542
binding: 3,
538543
visibility: wgpu::ShaderStage::FRAGMENT,
539544
ty: wgpu::BindingType::Sampler { comparison: true },
545+
..Default::default()
540546
},
541547
],
542548
label: None,

wgpu/examples/skybox/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ impl framework::Example for Skybox {
4646
binding: 0,
4747
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
4848
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
49+
..Default::default()
4950
},
5051
wgpu::BindGroupLayoutEntry {
5152
binding: 1,
@@ -55,11 +56,13 @@ impl framework::Example for Skybox {
5556
multisampled: false,
5657
dimension: wgpu::TextureViewDimension::Cube,
5758
},
59+
..Default::default()
5860
},
5961
wgpu::BindGroupLayoutEntry {
6062
binding: 2,
6163
visibility: wgpu::ShaderStage::FRAGMENT,
6264
ty: wgpu::BindingType::Sampler { comparison: false },
65+
..Default::default()
6366
},
6467
],
6568
label: None,

0 commit comments

Comments
 (0)