mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-03 16:02:26 +00:00
fix for image leaking; detiler stream buffer removed
This commit is contained in:
parent
266cca5654
commit
a4f8e220ab
@ -110,7 +110,7 @@ ImageId TextureCache::ResolveOverlap(const ImageInfo& image_info, ImageId cache_
|
|||||||
if (image_info.pixel_format != tex_cache_image.info.pixel_format ||
|
if (image_info.pixel_format != tex_cache_image.info.pixel_format ||
|
||||||
image_info.size != tex_cache_image.info.size ||
|
image_info.size != tex_cache_image.info.size ||
|
||||||
image_info.guest_size_bytes <= tex_cache_image.info.guest_size_bytes) {
|
image_info.guest_size_bytes <= tex_cache_image.info.guest_size_bytes) {
|
||||||
return merged_image_id;
|
return merged_image_id ? merged_image_id : cache_image_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageId new_image_id{};
|
ImageId new_image_id{};
|
||||||
|
@ -254,11 +254,8 @@ struct DetilerParams {
|
|||||||
u32 sizes[14];
|
u32 sizes[14];
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr size_t StreamBufferSize = 1_GB;
|
|
||||||
|
|
||||||
TileManager::TileManager(const Vulkan::Instance& instance, Vulkan::Scheduler& scheduler)
|
TileManager::TileManager(const Vulkan::Instance& instance, Vulkan::Scheduler& scheduler)
|
||||||
: instance{instance}, scheduler{scheduler},
|
: instance{instance}, scheduler{scheduler} {
|
||||||
stream_buffer{instance, scheduler, MemoryUsage::Upload, StreamBufferSize} {
|
|
||||||
static const std::array detiler_shaders{
|
static const std::array detiler_shaders{
|
||||||
HostShaders::DETILE_M8X1_COMP, HostShaders::DETILE_M8X2_COMP,
|
HostShaders::DETILE_M8X1_COMP, HostShaders::DETILE_M8X2_COMP,
|
||||||
HostShaders::DETILE_M32X1_COMP, HostShaders::DETILE_M32X2_COMP,
|
HostShaders::DETILE_M32X1_COMP, HostShaders::DETILE_M32X2_COMP,
|
||||||
@ -397,11 +394,6 @@ std::optional<vk::Buffer> TileManager::TryDetile(Image& image) {
|
|||||||
// Prepare input buffer
|
// Prepare input buffer
|
||||||
const u32 image_size = image.info.guest_size_bytes;
|
const u32 image_size = image.info.guest_size_bytes;
|
||||||
const auto [in_buffer, in_offset] = [&] -> std::pair<vk::Buffer, u32> {
|
const auto [in_buffer, in_offset] = [&] -> std::pair<vk::Buffer, u32> {
|
||||||
// Use stream buffer for smaller textures.
|
|
||||||
if (image_size <= stream_buffer.GetFreeSize()) {
|
|
||||||
u32 offset = stream_buffer.Copy(image.info.guest_address, image_size);
|
|
||||||
return {stream_buffer.Handle(), offset};
|
|
||||||
}
|
|
||||||
// Request temporary host buffer for larger sizes.
|
// Request temporary host buffer for larger sizes.
|
||||||
auto in_buffer = AllocBuffer(image_size);
|
auto in_buffer = AllocBuffer(image_size);
|
||||||
const auto addr = reinterpret_cast<const void*>(image.info.guest_address);
|
const auto addr = reinterpret_cast<const void*>(image.info.guest_address);
|
||||||
|
@ -51,7 +51,6 @@ private:
|
|||||||
private:
|
private:
|
||||||
const Vulkan::Instance& instance;
|
const Vulkan::Instance& instance;
|
||||||
Vulkan::Scheduler& scheduler;
|
Vulkan::Scheduler& scheduler;
|
||||||
StreamBuffer stream_buffer;
|
|
||||||
std::array<DetilerContext, DetilerType::Max> detilers;
|
std::array<DetilerContext, DetilerType::Max> detilers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user