early-access version 2361
This commit is contained in:
@@ -1376,9 +1376,7 @@ void TextureCache<P>::ForEachSparseSegment(ImageBase& image, Func&& func) {
|
||||
using FuncReturn = typename std::invoke_result<Func, GPUVAddr, VAddr, size_t>::type;
|
||||
static constexpr bool RETURNS_BOOL = std::is_same_v<FuncReturn, bool>;
|
||||
const auto segments = gpu_memory.GetSubmappedRange(image.gpu_addr, image.guest_size_bytes);
|
||||
for (auto& segment : segments) {
|
||||
const auto gpu_addr = segment.first;
|
||||
const auto size = segment.second;
|
||||
for (const auto& [gpu_addr, size] : segments) {
|
||||
std::optional<VAddr> cpu_addr = gpu_memory.GpuToCpuAddress(gpu_addr);
|
||||
ASSERT(cpu_addr);
|
||||
if constexpr (RETURNS_BOOL) {
|
||||
|
@@ -364,14 +364,14 @@ template <u32 GOB_EXTENT>
|
||||
|
||||
[[nodiscard]] std::optional<SubresourceExtent> ResolveOverlapRightAddress2D(
|
||||
const ImageInfo& new_info, GPUVAddr gpu_addr, const ImageBase& overlap, bool strict_size) {
|
||||
const u32 layer_stride = new_info.layer_stride;
|
||||
const s32 new_size = layer_stride * new_info.resources.layers;
|
||||
const s32 diff = static_cast<s32>(overlap.gpu_addr - gpu_addr);
|
||||
const u64 layer_stride = new_info.layer_stride;
|
||||
const u64 new_size = layer_stride * new_info.resources.layers;
|
||||
const u64 diff = overlap.gpu_addr - gpu_addr;
|
||||
if (diff > new_size) {
|
||||
return std::nullopt;
|
||||
}
|
||||
const s32 base_layer = diff / layer_stride;
|
||||
const s32 mip_offset = diff % layer_stride;
|
||||
const s32 base_layer = static_cast<s32>(diff / layer_stride);
|
||||
const s32 mip_offset = static_cast<s32>(diff % layer_stride);
|
||||
const std::array offsets = CalculateMipLevelOffsets(new_info);
|
||||
const auto end = offsets.begin() + new_info.resources.levels;
|
||||
const auto it = std::find(offsets.begin(), end, static_cast<u32>(mip_offset));
|
||||
|
Reference in New Issue
Block a user