Skip to content

Commit c466666

Browse files
committed
Revert "Fixed false-positive image reuploads (shadps4-emu#1557)"
This reverts commit 18a36c5.
1 parent 1c9e1b6 commit c466666

File tree

9 files changed

+40
-196
lines changed

9 files changed

+40
-196
lines changed

src/video_core/buffer_cache/buffer_cache.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ bool BufferCache::SynchronizeBufferFromImage(Buffer& buffer, VAddr device_addr,
635635
"Texel buffer aliases image subresources {:x} : {:x}", device_addr,
636636
image.info.guest_address);
637637
boost::container::small_vector<vk::BufferImageCopy, 8> copies;
638-
u32 offset = buffer.Offset(image.info.guest_address);
638+
u32 offset = buffer.Offset(image.cpu_addr);
639639
const u32 num_layers = image.info.resources.layers;
640640
const u32 max_offset = offset + size;
641641
for (u32 m = 0; m < image.info.resources.levels; m++) {

src/video_core/page_manager.cpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ struct PageManager::Impl {
114114

115115
// Notify rasterizer about the fault.
116116
const VAddr addr = msg.arg.pagefault.address;
117-
const VAddr addr_page = GetPageAddr(addr);
118-
rasterizer->InvalidateMemory(addr, addr_page, PAGESIZE);
117+
const VAddr addr_page = Common::AlignDown(addr, PAGESIZE);
118+
rasterizer->InvalidateMemory(addr_page, PAGESIZE);
119119
}
120120
}
121121

@@ -157,8 +157,8 @@ struct PageManager::Impl {
157157
const auto addr = reinterpret_cast<VAddr>(fault_address);
158158
const bool is_write = Common::IsWriteError(context);
159159
if (is_write && owned_ranges.find(addr) != owned_ranges.end()) {
160-
const VAddr addr_aligned = GetPageAddr(addr);
161-
rasterizer->InvalidateMemory(addr, addr_aligned, PAGESIZE);
160+
const VAddr addr_aligned = Common::AlignDown(addr, PAGESIZE);
161+
rasterizer->InvalidateMemory(addr_aligned, PAGESIZE);
162162
return true;
163163
}
164164
return false;
@@ -174,14 +174,6 @@ PageManager::PageManager(Vulkan::Rasterizer* rasterizer_)
174174

175175
PageManager::~PageManager() = default;
176176

177-
VAddr PageManager::GetPageAddr(VAddr addr) {
178-
return Common::AlignDown(addr, PAGESIZE);
179-
}
180-
181-
VAddr PageManager::GetNextPageAddr(VAddr addr) {
182-
return Common::AlignUp(addr + 1, PAGESIZE);
183-
}
184-
185177
void PageManager::OnGpuMap(VAddr address, size_t size) {
186178
impl->OnMap(address, size);
187179
}

src/video_core/page_manager.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ class PageManager {
2828
/// Increase/decrease the number of surface in pages touching the specified region
2929
void UpdatePagesCachedCount(VAddr addr, u64 size, s32 delta);
3030

31-
static VAddr GetPageAddr(VAddr addr);
32-
static VAddr GetNextPageAddr(VAddr addr);
33-
3431
private:
3532
struct Impl;
3633
std::unique_ptr<Impl> impl;

src/video_core/renderer_vulkan/vk_rasterizer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -792,9 +792,9 @@ u32 Rasterizer::ReadDataFromGds(u32 gds_offset) {
792792
return value;
793793
}
794794

795-
void Rasterizer::InvalidateMemory(VAddr addr, VAddr addr_aligned, u64 size) {
796-
buffer_cache.InvalidateMemory(addr_aligned, size);
797-
texture_cache.InvalidateMemory(addr, addr_aligned, size);
795+
void Rasterizer::InvalidateMemory(VAddr addr, u64 size) {
796+
buffer_cache.InvalidateMemory(addr, size);
797+
texture_cache.InvalidateMemory(addr, size);
798798
}
799799

800800
void Rasterizer::MapMemory(VAddr addr, u64 size) {

src/video_core/renderer_vulkan/vk_rasterizer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class Rasterizer {
4646

4747
void InlineData(VAddr address, const void* value, u32 num_bytes, bool is_gds);
4848
u32 ReadDataFromGds(u32 gsd_offset);
49-
void InvalidateMemory(VAddr addr, VAddr addr_aligned, u64 size);
49+
void InvalidateMemory(VAddr addr, u64 size);
5050
void MapMemory(VAddr addr, u64 size);
5151
void UnmapMemory(VAddr addr, u64 size);
5252

src/video_core/texture_cache/image.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ void UniqueImage::Create(const vk::ImageCreateInfo& image_ci) {
144144
Image::Image(const Vulkan::Instance& instance_, Vulkan::Scheduler& scheduler_,
145145
const ImageInfo& info_)
146146
: instance{&instance_}, scheduler{&scheduler_}, info{info_},
147-
image{instance->GetDevice(), instance->GetAllocator()} {
147+
image{instance->GetDevice(), instance->GetAllocator()}, cpu_addr{info.guest_address},
148+
cpu_addr_end{cpu_addr + info.guest_size_bytes} {
148149
mip_hashes.resize(info.resources.levels);
149150
ASSERT(info.pixel_format != vk::Format::eUndefined);
150151
// Here we force `eExtendedUsage` as don't know all image usage cases beforehand. In normal case

src/video_core/texture_cache/image.h

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@ VK_DEFINE_HANDLE(VmaAllocator)
2222
namespace VideoCore {
2323

2424
enum ImageFlagBits : u32 {
25-
Empty = 0,
26-
MaybeCpuDirty = 1 << 0, ///< The page this image is in was touched before the image address
27-
CpuDirty = 1 << 1, ///< Contents have been modified from the CPU
25+
CpuDirty = 1 << 1, ///< Contents have been modified from the CPU
2826
GpuDirty = 1 << 2, ///< Contents have been modified from the GPU (valid data in buffer cache)
29-
Dirty = MaybeCpuDirty | CpuDirty | GpuDirty,
27+
Dirty = CpuDirty | GpuDirty,
3028
GpuModified = 1 << 3, ///< Contents have been modified from the GPU
29+
Tracked = 1 << 4, ///< Writes and reads are being hooked from the CPU
3130
Registered = 1 << 6, ///< True when the image is registered
3231
Picked = 1 << 7, ///< Temporary flag to mark the image as picked
3332
MetaRegistered = 1 << 8, ///< True when metadata for this surface is known and registered
@@ -79,9 +78,7 @@ struct Image {
7978

8079
[[nodiscard]] bool Overlaps(VAddr overlap_cpu_addr, size_t overlap_size) const noexcept {
8180
const VAddr overlap_end = overlap_cpu_addr + overlap_size;
82-
const auto image_addr = info.guest_address;
83-
const auto image_end = info.guest_address + info.guest_size_bytes;
84-
return image_addr < overlap_end && overlap_cpu_addr < image_end;
81+
return cpu_addr < overlap_end && overlap_cpu_addr < cpu_addr_end;
8582
}
8683

8784
ImageViewId FindView(const ImageViewInfo& info) const {
@@ -102,18 +99,14 @@ struct Image {
10299
void CopyImage(const Image& image);
103100
void CopyMip(const Image& image, u32 mip);
104101

105-
bool IsTracked() {
106-
return track_addr != 0 && track_addr_end != 0;
107-
}
108-
109102
const Vulkan::Instance* instance;
110103
Vulkan::Scheduler* scheduler;
111104
ImageInfo info;
112105
UniqueImage image;
113106
vk::ImageAspectFlags aspect_mask = vk::ImageAspectFlagBits::eColor;
114107
ImageFlagBits flags = ImageFlagBits::Dirty;
115-
VAddr track_addr = 0;
116-
VAddr track_addr_end = 0;
108+
VAddr cpu_addr = 0;
109+
VAddr cpu_addr_end = 0;
117110
std::vector<ImageViewInfo> image_view_infos;
118111
std::vector<ImageViewId> image_view_ids;
119112

@@ -137,7 +130,6 @@ struct Image {
137130
std::vector<State> subresource_states{};
138131
boost::container::small_vector<u64, 14> mip_hashes{};
139132
u64 tick_accessed_last{0};
140-
u64 hash{0};
141133

142134
struct {
143135
union {

0 commit comments

Comments
 (0)