Fix blits with mips

This commit is contained in:
ReinUsesLisp 2021-07-21 03:07:18 -03:00 committed by Fernando Sahmkow
parent 973f8f1d08
commit d464b122d5

View File

@ -1128,8 +1128,8 @@ bool Image::ScaleUp(bool save_as_backup) {
.z = 0, .z = 0,
}, },
{ {
.x = s32(info.size.width), .x = static_cast<s32>(info.size.width),
.y = s32(info.size.height), .y = static_cast<s32>(info.size.height),
.z = 1, .z = 1,
}, },
}, },
@ -1146,8 +1146,10 @@ bool Image::ScaleUp(bool save_as_backup) {
.z = 0, .z = 0,
}, },
{ {
.x = s32(scale_up(info.size.width)), .x = std::max(1, static_cast<s32>(scale_up(info.size.width)) >> level),
.y = is_2d ? s32(scale_up(info.size.height)) : s32(info.size.height), .y = std::max(1, static_cast<s32>(is_2d ? scale_up(info.size.height)
: info.size.height) >>
level),
.z = 1, .z = 1,
}, },
}, },
@ -1199,9 +1201,9 @@ bool Image::ScaleDown(bool save_as_backup) {
regions.push_back({ regions.push_back({
.srcSubresource{ .srcSubresource{
.aspectMask = aspect_mask, .aspectMask = aspect_mask,
.mipLevel = u32(level), .mipLevel = static_cast<u32>(level),
.baseArrayLayer = 0, .baseArrayLayer = 0,
.layerCount = u32(info.resources.layers), .layerCount = static_cast<u32>(info.resources.layers),
}, },
.srcOffsets{ .srcOffsets{
{ {
@ -1210,16 +1212,18 @@ bool Image::ScaleDown(bool save_as_backup) {
.z = 0, .z = 0,
}, },
{ {
.x = s32(scale_up(info.size.width)), .x = std::max(1, static_cast<s32>(scale_up(info.size.width)) >> level),
.y = is_2d ? s32(scale_up(info.size.height)) : s32(info.size.height), .y = std::max(1, static_cast<s32>(is_2d ? scale_up(info.size.height)
: info.size.height) >>
level),
.z = 1, .z = 1,
}, },
}, },
.dstSubresource{ .dstSubresource{
.aspectMask = aspect_mask, .aspectMask = aspect_mask,
.mipLevel = u32(level), .mipLevel = static_cast<u32>(level),
.baseArrayLayer = 0, .baseArrayLayer = 0,
.layerCount = u32(info.resources.layers), .layerCount = static_cast<u32>(info.resources.layers),
}, },
.dstOffsets{ .dstOffsets{
{ {
@ -1228,8 +1232,8 @@ bool Image::ScaleDown(bool save_as_backup) {
.z = 0, .z = 0,
}, },
{ {
.x = s32(info.size.width), .x = std::max(1, static_cast<s32>(info.size.width) >> level),
.y = s32(info.size.height), .y = std::max(1, static_cast<s32>(info.size.height) >> level),
.z = 1, .z = 1,
}, },
}, },