[dawn][frontend] Fix IsRangeOverlapped early out.
A rewrite of TypedInteger initializers turned T{1} into T{} instead of
T{1u}, which made the early out never happen, and allowed an ASSERT in
RangesOverlap to be triggered.
Adds a test that reproes the issue.
Fixed: 519939415
Change-Id: I92d9f95ffe4cbd13b66928248c971df7956143b6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/314795
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/CommandValidation.h b/src/dawn/native/CommandValidation.h
index 95cf503..5859bf5 100644
--- a/src/dawn/native/CommandValidation.h
+++ b/src/dawn/native/CommandValidation.h
@@ -110,7 +110,7 @@
// Returns true if [startA, startA + length[ overlaps [startB, startB + length[
template <typename T>
bool IsRangeOverlapped(T startA, T startB, T length) {
- if (length < T{}) {
+ if (length < T{1u}) {
return false;
}
return RangesOverlap(static_cast<uint64_t>(startA),
diff --git a/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp b/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp
index 4c28e32..2d23b95 100644
--- a/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp
@@ -2104,6 +2104,15 @@
TestT2TCopy(utils::Expectation::Success, texture, 0, {0, 0, kSrcBaseArrayLayer},
texture, 0, {0, 0, kDstBaseArrayLayer}, {1, 1, kCopyArrayLayerCount});
}
+
+ // Case where kCopyArrayLayerCount == 0
+ {
+ constexpr uint32_t kSameBaseArrayLayer = 0;
+ constexpr uint32_t kZeroLayersToCopy = 0;
+
+ TestT2TCopy(utils::Expectation::Success, texture, 0, {0, 0, kSameBaseArrayLayer},
+ texture, 0, {0, 0, kSameBaseArrayLayer}, {1, 1, kZeroLayersToCopy});
+ }
}
// Copy between different mipmap levels is allowed.