Skip to content

Commit 841df8a

Browse files
committed
dx12 fix barrier
1 parent d4d9755 commit 841df8a

2 files changed

Lines changed: 40 additions & 31 deletions

File tree

wgpu-core/src/conv.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,14 @@ pub fn map_texture_usage(
122122
usage.contains(wgt::TextureUsages::RENDER_ATTACHMENT) && is_color,
123123
);
124124
u.set(
125-
wgt::TextureUses::DEPTH_WRITE
126-
| wgt::TextureUses::DEPTH_READ
127-
| wgt::TextureUses::STENCIL_WRITE
128-
| wgt::TextureUses::STENCIL_READ,
129-
usage.contains(wgt::TextureUsages::RENDER_ATTACHMENT) && !is_color,
125+
wgt::TextureUses::DEPTH_WRITE | wgt::TextureUses::DEPTH_READ,
126+
usage.contains(wgt::TextureUsages::RENDER_ATTACHMENT)
127+
&& aspect.intersects(hal::FormatAspects::DEPTH),
128+
);
129+
u.set(
130+
wgt::TextureUses::STENCIL_WRITE | wgt::TextureUses::STENCIL_READ,
131+
usage.contains(wgt::TextureUsages::RENDER_ATTACHMENT)
132+
&& aspect.intersects(hal::FormatAspects::STENCIL),
130133
);
131134
u.set(
132135
wgt::TextureUses::STORAGE_ATOMIC,

wgpu-hal/src/dx12/command.rs

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -528,32 +528,38 @@ impl crate::CommandEncoder for super::CommandEncoder {
528528
| wgt::TextureUses::STENCIL_READ
529529
| wgt::TextureUses::STENCIL_WRITE,
530530
) {
531-
let mut barrier_stencil = crate::TextureBarrier {
532-
texture: barrier.texture,
533-
range: barrier.range,
534-
usage: barrier.usage.clone(),
535-
};
536-
let mut barrier_depth = barrier;
537-
538-
barrier_depth.range.aspect = wgt::TextureAspect::DepthOnly;
539-
barrier_depth
540-
.usage
541-
.from
542-
.remove(wgt::TextureUses::STENCIL_READ | wgt::TextureUses::STENCIL_WRITE);
543-
barrier_depth
544-
.usage
545-
.to
546-
.remove(wgt::TextureUses::STENCIL_READ | wgt::TextureUses::STENCIL_WRITE);
547-
548-
barrier_stencil.range.aspect = wgt::TextureAspect::StencilOnly;
549-
barrier_stencil
550-
.usage
551-
.from
552-
.remove(wgt::TextureUses::DEPTH_READ | wgt::TextureUses::DEPTH_WRITE);
553-
barrier_stencil
554-
.usage
555-
.to
556-
.remove(wgt::TextureUses::DEPTH_READ | wgt::TextureUses::DEPTH_WRITE);
531+
if barrier.texture.format.has_stencil_aspect() {
532+
let mut barrier_stencil = crate::TextureBarrier {
533+
texture: barrier.texture,
534+
range: barrier.range,
535+
usage: barrier.usage.clone(),
536+
};
537+
barrier_stencil.range.aspect = wgt::TextureAspect::StencilOnly;
538+
barrier_stencil
539+
.usage
540+
.from
541+
.remove(wgt::TextureUses::DEPTH_READ | wgt::TextureUses::DEPTH_WRITE);
542+
barrier_stencil
543+
.usage
544+
.to
545+
.remove(wgt::TextureUses::DEPTH_READ | wgt::TextureUses::DEPTH_WRITE);
546+
barriers_ds_split.push(barrier_stencil);
547+
}
548+
549+
if barrier.texture.format.has_depth_aspect() {
550+
let mut barrier_depth = barrier;
551+
552+
barrier_depth.range.aspect = wgt::TextureAspect::DepthOnly;
553+
barrier_depth
554+
.usage
555+
.from
556+
.remove(wgt::TextureUses::STENCIL_READ | wgt::TextureUses::STENCIL_WRITE);
557+
barrier_depth
558+
.usage
559+
.to
560+
.remove(wgt::TextureUses::STENCIL_READ | wgt::TextureUses::STENCIL_WRITE);
561+
barriers_ds_split.push(barrier_depth);
562+
}
557563
} else {
558564
barriers_ds_split.push(barrier);
559565
}

0 commit comments

Comments
 (0)