Skip to content

Commit a381a26

Browse files
bors[bot]kvark
andcommitted
Merge #2397
2397: Richer image view capabilities r=grovesNL a=kvark WIP steps towards #2396, exploiting CI to get it error-less. PR checklist: - [ ] `make` succeeds (on *nix) - [ ] `make reftests` succeeds - [ ] tested examples with the following backends: - [ ] `rustfmt` run on changed code Co-authored-by: Dzmitry Malyshau <[email protected]>
2 parents e7b3ede + 0fa3c03 commit a381a26

File tree

21 files changed

+159
-190
lines changed

21 files changed

+159
-190
lines changed

examples/colour-uniform/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,7 @@ impl<B: Backend> ImageState<B> {
10701070
ColorFormat::SELF,
10711071
i::Tiling::Optimal,
10721072
i::Usage::TRANSFER_DST | i::Usage::SAMPLED,
1073-
i::StorageFlags::empty(),
1073+
i::ViewCapabilities::empty(),
10741074
)
10751075
.unwrap(); // TODO: usage
10761076
let req = device.get_image_requirements(&unbound);

examples/quad/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ fn main() {
233233
ColorFormat::SELF,
234234
i::Tiling::Optimal,
235235
i::Usage::TRANSFER_DST | i::Usage::SAMPLED,
236-
i::StorageFlags::empty(),
236+
i::ViewCapabilities::empty(),
237237
)
238238
.unwrap(); // TODO: usage
239239
let image_req = device.get_image_requirements(&image_unbound);

src/backend/dx11/src/device.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ impl hal::Device<Backend> for Device {
12371237
format: format::Format,
12381238
tiling: image::Tiling,
12391239
usage: image::Usage,
1240-
flags: image::StorageFlags,
1240+
view_caps: image::ViewCapabilities,
12411241
) -> Result<UnboundImage, image::CreationError> {
12421242
use image::Usage;
12431243
//
@@ -1279,7 +1279,7 @@ impl hal::Device<Backend> for Device {
12791279
format,
12801280
tiling,
12811281
usage,
1282-
flags,
1282+
view_caps,
12831283
bind,
12841284
requirements: memory::Requirements {
12851285
size: size,
@@ -1398,7 +1398,7 @@ impl hal::Device<Backend> for Device {
13981398
Usage: usage,
13991399
BindFlags: bind,
14001400
CPUAccessFlags: cpu,
1401-
MiscFlags: if image.flags.contains(image::StorageFlags::CUBE_VIEW) {
1401+
MiscFlags: if image.view_caps.contains(image::ViewCapabilities::KIND_CUBE) {
14021402
d3d11::D3D11_RESOURCE_MISC_TEXTURECUBE
14031403
} else {
14041404
0
@@ -1475,7 +1475,7 @@ impl hal::Device<Backend> for Device {
14751475
let view = ViewInfo {
14761476
resource: resource.clone(),
14771477
kind: image.kind,
1478-
flags: image::StorageFlags::empty(),
1478+
caps: image::ViewCapabilities::empty(),
14791479
view_kind,
14801480
// TODO: we should be using `uav_format` rather than `copy_uav_format`, and share
14811481
// the UAVs when the formats are identical
@@ -1498,7 +1498,7 @@ impl hal::Device<Backend> for Device {
14981498
let mut view = ViewInfo {
14991499
resource: resource.clone(),
15001500
kind: image.kind,
1501-
flags: image::StorageFlags::empty(),
1501+
caps: image::ViewCapabilities::empty(),
15021502
view_kind,
15031503
format: decomposed.copy_srv.unwrap(),
15041504
range: image::SubresourceRange {
@@ -1537,7 +1537,7 @@ impl hal::Device<Backend> for Device {
15371537
let view = ViewInfo {
15381538
resource: resource.clone(),
15391539
kind: image.kind,
1540-
flags: image::StorageFlags::empty(),
1540+
caps: image::ViewCapabilities::empty(),
15411541
view_kind,
15421542
format: decomposed.rtv.unwrap(),
15431543
range: image::SubresourceRange {
@@ -1560,7 +1560,7 @@ impl hal::Device<Backend> for Device {
15601560
let view = ViewInfo {
15611561
resource: resource.clone(),
15621562
kind: image.kind,
1563-
flags: image::StorageFlags::empty(),
1563+
caps: image::ViewCapabilities::empty(),
15641564
view_kind: image::ViewKind::D2,
15651565
format: decomposed.dsv.unwrap(),
15661566
range: image::SubresourceRange {
@@ -1592,7 +1592,7 @@ impl hal::Device<Backend> for Device {
15921592
usage: image.usage,
15931593
format: image.format,
15941594
decomposed_format: decomposed,
1595-
storage_flags: image.flags,
1595+
view_caps: image.view_caps,
15961596
num_levels: image.kind.num_levels(),
15971597
num_mips: image.mip_levels as _,
15981598
internal,
@@ -1610,7 +1610,7 @@ impl hal::Device<Backend> for Device {
16101610
let info = ViewInfo {
16111611
resource: image.internal.raw.clone(),
16121612
kind: image.kind,
1613-
flags: image.storage_flags,
1613+
caps: image.view_caps,
16141614
view_kind,
16151615
format: conv::map_format(format)
16161616
.ok_or(image::ViewError::BadFormat)?,
@@ -1620,7 +1620,7 @@ impl hal::Device<Backend> for Device {
16201620
let srv_info = ViewInfo {
16211621
resource: image.internal.raw.clone(),
16221622
kind: image.kind,
1623-
flags: image.storage_flags,
1623+
caps: image.view_caps,
16241624
view_kind,
16251625
format: conv::viewable_format(info.format),
16261626
range,
@@ -2258,7 +2258,7 @@ impl hal::Device<Backend> for Device {
22582258
let mut view_info = ViewInfo {
22592259
resource: resource.clone(),
22602260
kind,
2261-
flags: image::StorageFlags::empty(),
2261+
caps: image::ViewCapabilities::empty(),
22622262
view_kind: image::ViewKind::D2,
22632263
format: decomposed.rtv.unwrap(),
22642264
// TODO: can these ever differ for backbuffer?
@@ -2292,7 +2292,7 @@ impl hal::Device<Backend> for Device {
22922292
kind,
22932293
usage: config.image_usage,
22942294
format: config.format,
2295-
storage_flags: image::StorageFlags::empty(),
2295+
view_caps: image::ViewCapabilities::empty(),
22962296
// NOTE: not the actual format of the backbuffer(s)
22972297
decomposed_format: decomposed.clone(),
22982298
num_levels: 1,

src/backend/dx11/src/lib.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub(crate) struct ViewInfo {
9595
#[derivative(Debug="ignore")]
9696
resource: ComPtr<d3d11::ID3D11Resource>,
9797
kind: image::Kind,
98-
flags: image::StorageFlags,
98+
caps: image::ViewCapabilities,
9999
view_kind: image::ViewKind,
100100
format: dxgiformat::DXGI_FORMAT,
101101
range: image::SubresourceRange,
@@ -538,7 +538,7 @@ impl hal::PhysicalDevice<Backend> for PhysicalDevice {
538538
dimensions: u8,
539539
tiling: image::Tiling,
540540
usage: image::Usage,
541-
storage_flags: image::StorageFlags,
541+
view_caps: image::ViewCapabilities,
542542
) -> Option<image::FormatProperties> {
543543
conv::map_format(format)?; //filter out unknown formats
544544

@@ -604,7 +604,7 @@ impl hal::PhysicalDevice<Backend> for PhysicalDevice {
604604
_ => return None,
605605
},
606606
sample_count_mask: if dimensions == 2
607-
&& !storage_flags.contains(image::StorageFlags::CUBE_VIEW)
607+
&& !view_caps.contains(image::ViewCapabilities::KIND_CUBE)
608608
&& (usage.contains(image::Usage::COLOR_ATTACHMENT)
609609
| usage.contains(image::Usage::DEPTH_STENCIL_ATTACHMENT))
610610
{
@@ -2491,7 +2491,7 @@ pub struct UnboundImage {
24912491
format: format::Format,
24922492
tiling: image::Tiling,
24932493
usage: image::Usage,
2494-
flags: image::StorageFlags,
2494+
view_caps: image::ViewCapabilities,
24952495
bind: d3d11::D3D11_BIND_FLAG,
24962496
requirements: memory::Requirements,
24972497
}
@@ -2502,7 +2502,7 @@ pub struct Image {
25022502
kind: image::Kind,
25032503
usage: image::Usage,
25042504
format: format::Format,
2505-
storage_flags: image::StorageFlags,
2505+
view_caps: image::ViewCapabilities,
25062506
decomposed_format: conv::DecomposedDxgiFormat,
25072507
num_levels: image::Level,
25082508
num_mips: image::Level,

src/backend/dx12/src/command.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,7 +1261,7 @@ impl com::RawCommandBuffer<Backend> for CommandBuffer {
12611261
let view_info = device::ViewInfo {
12621262
resource: attachment.resource,
12631263
kind: attachment.kind,
1264-
flags: image::StorageFlags::empty(),
1264+
caps: image::ViewCapabilities::empty(),
12651265
view_kind: image::ViewKind::D2Array,
12661266
format: attachment.dxgi_format,
12671267
range: image::SubresourceRange {
@@ -1302,7 +1302,7 @@ impl com::RawCommandBuffer<Backend> for CommandBuffer {
13021302
let view_info = device::ViewInfo {
13031303
resource: attachment.resource,
13041304
kind: attachment.kind,
1305-
flags: image::StorageFlags::empty(),
1305+
caps: image::ViewCapabilities::empty(),
13061306
view_kind: image::ViewKind::D2Array,
13071307
format: attachment.dxgi_format,
13081308
range: image::SubresourceRange {
@@ -1423,7 +1423,7 @@ impl com::RawCommandBuffer<Backend> for CommandBuffer {
14231423
&ViewInfo {
14241424
resource: src.resource,
14251425
kind: src.kind,
1426-
flags: src.storage_flags,
1426+
caps: src.view_caps,
14271427
view_kind: image::ViewKind::D2Array, // TODO
14281428
format: src.descriptor.Format,
14291429
range: image::SubresourceRange {

src/backend/dx12/src/device.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub(crate) fn shader_bytecode(shader: *mut d3dcommon::ID3DBlob) -> d3d12::D3D12_
7777
pub(crate) struct ViewInfo {
7878
pub(crate) resource: *mut d3d12::ID3D12Resource,
7979
pub(crate) kind: image::Kind,
80-
pub(crate) flags: image::StorageFlags,
80+
pub(crate) caps: image::ViewCapabilities,
8181
pub(crate) view_kind: image::ViewKind,
8282
pub(crate) format: dxgiformat::DXGI_FORMAT,
8383
pub(crate) range: image::SubresourceRange,
@@ -106,7 +106,7 @@ pub struct UnboundImage {
106106
kind: image::Kind,
107107
usage: image::Usage,
108108
tiling: image::Tiling,
109-
storage_flags: image::StorageFlags,
109+
view_caps: image::ViewCapabilities,
110110
//TODO: use hal::format::FormatDesc
111111
bytes_per_block: u8,
112112
// Dimension of a texel block (compressed formats).
@@ -834,7 +834,7 @@ impl Device {
834834

835835
assert!(info.range.layers.end <= info.kind.num_layers());
836836
let is_msaa = info.kind.num_samples() > 1;
837-
let is_cube = info.flags.contains(image::StorageFlags::CUBE_VIEW);
837+
let is_cube = info.caps.contains(image::ViewCapabilities::KIND_CUBE);
838838

839839
match info.view_kind {
840840
image::ViewKind::D1 => {
@@ -2133,7 +2133,7 @@ impl d::Device<B> for Device {
21332133
format: format::Format,
21342134
tiling: image::Tiling,
21352135
usage: image::Usage,
2136-
flags: image::StorageFlags,
2136+
view_caps: image::ViewCapabilities,
21372137
) -> Result<UnboundImage, image::CreationError> {
21382138
assert!(mip_levels <= kind.num_levels());
21392139

@@ -2209,7 +2209,7 @@ impl d::Device<B> for Device {
22092209
kind,
22102210
usage,
22112211
tiling,
2212-
storage_flags: flags,
2212+
view_caps,
22132213
bytes_per_block,
22142214
block_dim,
22152215
num_levels: mip_levels,
@@ -2290,7 +2290,7 @@ impl d::Device<B> for Device {
22902290
let info = ViewInfo {
22912291
resource: resource as *mut _,
22922292
kind: image.kind,
2293-
flags: image::StorageFlags::empty(),
2293+
caps: image::ViewCapabilities::empty(),
22942294
view_kind: match image.kind {
22952295
image::Kind::D1(..) => image::ViewKind::D1Array,
22962296
image::Kind::D2(..) => image::ViewKind::D2Array,
@@ -2331,7 +2331,7 @@ impl d::Device<B> for Device {
23312331
surface_type: image.format.base_format().0,
23322332
kind: image.kind,
23332333
usage: image.usage,
2334-
storage_flags: image.storage_flags,
2334+
view_caps: image.view_caps,
23352335
descriptor: image.desc,
23362336
bytes_per_block: image.bytes_per_block,
23372337
block_dim: image.block_dim,
@@ -2402,7 +2402,7 @@ impl d::Device<B> for Device {
24022402
let info = ViewInfo {
24032403
resource: image.resource,
24042404
kind: image.kind,
2405-
flags: image.storage_flags,
2405+
caps: image.view_caps,
24062406
view_kind,
24072407
format: conv::map_format(format).ok_or(image::ViewError::BadFormat)?,
24082408
range,
@@ -3207,7 +3207,7 @@ impl d::Device<B> for Device {
32073207
surface_type,
32083208
kind,
32093209
usage: config.image_usage,
3210-
storage_flags: image::StorageFlags::empty(),
3210+
view_caps: image::ViewCapabilities::empty(),
32113211
descriptor: d3d12::D3D12_RESOURCE_DESC {
32123212
Dimension: d3d12::D3D12_RESOURCE_DIMENSION_TEXTURE2D,
32133213
Alignment: 0,

src/backend/dx12/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ impl hal::PhysicalDevice<Backend> for PhysicalDevice {
330330
dimensions: u8,
331331
tiling: image::Tiling,
332332
usage: image::Usage,
333-
storage_flags: image::StorageFlags,
333+
view_caps: image::ViewCapabilities,
334334
) -> Option<image::FormatProperties> {
335335
conv::map_format(format)?; //filter out unknown formats
336336

@@ -396,7 +396,7 @@ impl hal::PhysicalDevice<Backend> for PhysicalDevice {
396396
_ => return None,
397397
},
398398
sample_count_mask: if dimensions == 2
399-
&& !storage_flags.contains(image::StorageFlags::CUBE_VIEW)
399+
&& !view_caps.contains(image::ViewCapabilities::KIND_CUBE)
400400
&& (usage.contains(image::Usage::COLOR_ATTACHMENT)
401401
| usage.contains(image::Usage::DEPTH_STENCIL_ATTACHMENT))
402402
{

src/backend/dx12/src/native.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ pub struct Image {
191191
pub(crate) surface_type: format::SurfaceType,
192192
pub(crate) kind: image::Kind,
193193
pub(crate) usage: image::Usage,
194-
pub(crate) storage_flags: image::StorageFlags,
194+
pub(crate) view_caps: image::ViewCapabilities,
195195
#[derivative(Debug="ignore")]
196196
pub(crate) descriptor: d3d12::D3D12_RESOURCE_DESC,
197197
pub(crate) bytes_per_block: u8,

src/backend/empty/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl hal::PhysicalDevice<Backend> for PhysicalDevice {
6868

6969
fn image_format_properties(
7070
&self, _: format::Format, _dim: u8, _: image:: Tiling,
71-
_: image::Usage, _: image::StorageFlags,
71+
_: image::Usage, _: image::ViewCapabilities,
7272
) -> Option<image::FormatProperties> {
7373
unimplemented!()
7474
}
@@ -205,7 +205,7 @@ impl hal::Device<Backend> for Device {
205205
_: format::Format,
206206
_: image::Tiling,
207207
_: image::Usage,
208-
_: image::StorageFlags,
208+
_: image::ViewCapabilities,
209209
) -> Result<(), image::CreationError> {
210210
unimplemented!()
211211
}

src/backend/gl/src/device.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ impl d::Device<B> for Device {
10421042
format: Format,
10431043
_tiling: i::Tiling,
10441044
usage: i::Usage,
1045-
_flags: i::StorageFlags,
1045+
_view_caps: i::ViewCapabilities,
10461046
) -> Result<UnboundImage, i::CreationError> {
10471047
let gl = &self.share.context;
10481048

0 commit comments

Comments
 (0)