| 2286 | }; |
| 2287 | } |
| 2288 | auto ImageMipArraySlice::subtract(ImageMipArraySlice const & slice) const -> std::tuple<std::array<ImageMipArraySlice, 4>, usize> |
| 2289 | { |
| 2290 | u32 const a_mip_p0 = this->base_mip_level; |
| 2291 | u32 const a_mip_p1 = this->base_mip_level + this->level_count - 1; |
| 2292 | u32 const b_mip_p0 = slice.base_mip_level; |
| 2293 | u32 const b_mip_p1 = slice.base_mip_level + slice.level_count - 1; |
| 2294 | |
| 2295 | u32 const a_arr_p0 = this->base_array_layer; |
| 2296 | u32 const a_arr_p1 = this->base_array_layer + this->layer_count - 1; |
| 2297 | u32 const b_arr_p0 = slice.base_array_layer; |
| 2298 | u32 const b_arr_p1 = slice.base_array_layer + slice.layer_count - 1; |
| 2299 | |
| 2300 | u32 const mip_case = static_cast<u32>(b_mip_p1 < a_mip_p1) + static_cast<u32>(b_mip_p0 > a_mip_p0) * 2; |
| 2301 | u32 const arr_case = static_cast<u32>(b_arr_p1 < a_arr_p1) + static_cast<u32>(b_arr_p0 > a_arr_p0) * 2; |
| 2302 | |
| 2303 | std::tuple<std::array<ImageMipArraySlice, 4>, usize> result = {}; |
| 2304 | if (!this->intersects(slice)) |
| 2305 | { |
| 2306 | auto & [result_rects, result_n] = result; |
| 2307 | result_n = 1; |
| 2308 | result_rects[0] = *this; |
| 2309 | return result; |
| 2310 | } |
| 2311 | |
| 2312 | // clang-format off |
| 2313 | // |
| 2314 | // mips ➡️ |
| 2315 | // arrays 0 1 2 3 |
| 2316 | // ⬇️ |
| 2317 | // |
| 2318 | // ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓ ▓▓ |
| 2319 | // 0 A ▓▓██████▓▓ B ▓▓██░░░░ C ░░░░██▓▓ D ░░██░░ |
| 2320 | // ▓▓██████▓▓ ▓▓██░░░░ ░░░░██▓▓ ░░██░░ |
| 2321 | // ▓▓██████▓▓ ▓▓██░░░░ ░░░░██▓▓ ░░██░░ |
| 2322 | // ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓ ▓▓ |
| 2323 | // |
| 2324 | // ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓ ▓▓ |
| 2325 | // 1 E ▓▓██████▓▓ F ▓▓██░░░░ G ░░░░██▓▓ H ░░██░░ |
| 2326 | // ░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ |
| 2327 | // ░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ |
| 2328 | // |
| 2329 | // 3 I ░░░░░░ J ░░░░░░ K ░░░░░░ L ░░░░░░ |
| 2330 | // ░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ |
| 2331 | // ▓▓██████▓▓ ▓▓██░░░░ ░░░░██▓▓ ░░██░░ |
| 2332 | // ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓ ▓▓ |
| 2333 | // |
| 2334 | // 2 M ░░░░░░ N ░░░░░░ O ░░░░░░ P ░░░░░░ |
| 2335 | // ▓▓██████▓▓ ▓▓██░░░░ ░░░░██▓▓ ░░██░░ |
| 2336 | // ░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ |
| 2337 | // |
| 2338 | // clang-format on |
| 2339 | |
| 2340 | // clang-format off |
| 2341 | static constexpr std::array<usize, 16> rect_n { |
| 2342 | 0, 1, 1, 2, |
| 2343 | 1, 2, 2, 3, |
| 2344 | 1, 2, 2, 3, |
| 2345 | 2, 3, 3, 4, |
no test coverage detected