mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-12 04:35:56 +00:00
config: Add option for linear image readback
This commit is contained in:
parent
ac430ca0d0
commit
12bc09cfa0
3 changed files with 16 additions and 3 deletions
|
@ -65,6 +65,7 @@ static u32 screenHeight = 720;
|
||||||
static bool isNullGpu = false;
|
static bool isNullGpu = false;
|
||||||
static bool shouldCopyGPUBuffers = false;
|
static bool shouldCopyGPUBuffers = false;
|
||||||
static bool readbacksEnabled = false;
|
static bool readbacksEnabled = false;
|
||||||
|
static bool readbackLinearImagesEnabled = false;
|
||||||
static bool directMemoryAccessEnabled = false;
|
static bool directMemoryAccessEnabled = false;
|
||||||
static bool shouldDumpShaders = false;
|
static bool shouldDumpShaders = false;
|
||||||
static bool shouldPatchShaders = false;
|
static bool shouldPatchShaders = false;
|
||||||
|
@ -103,7 +104,7 @@ u32 m_language = 1; // english
|
||||||
static std::string trophyKey = "";
|
static std::string trophyKey = "";
|
||||||
|
|
||||||
// Expected number of items in the config file
|
// Expected number of items in the config file
|
||||||
static constexpr u64 total_entries = 51;
|
static constexpr u64 total_entries = 52;
|
||||||
|
|
||||||
bool allowHDR() {
|
bool allowHDR() {
|
||||||
return isHDRAllowed;
|
return isHDRAllowed;
|
||||||
|
@ -262,6 +263,10 @@ bool readbacks() {
|
||||||
return readbacksEnabled;
|
return readbacksEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool readbackLinearImages() {
|
||||||
|
return readbackLinearImagesEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
bool directMemoryAccess() {
|
bool directMemoryAccess() {
|
||||||
return directMemoryAccessEnabled;
|
return directMemoryAccessEnabled;
|
||||||
}
|
}
|
||||||
|
@ -631,6 +636,8 @@ void load(const std::filesystem::path& path) {
|
||||||
isNullGpu = toml::find_or<bool>(gpu, "nullGpu", isNullGpu);
|
isNullGpu = toml::find_or<bool>(gpu, "nullGpu", isNullGpu);
|
||||||
shouldCopyGPUBuffers = toml::find_or<bool>(gpu, "copyGPUBuffers", shouldCopyGPUBuffers);
|
shouldCopyGPUBuffers = toml::find_or<bool>(gpu, "copyGPUBuffers", shouldCopyGPUBuffers);
|
||||||
readbacksEnabled = toml::find_or<bool>(gpu, "readbacks", readbacksEnabled);
|
readbacksEnabled = toml::find_or<bool>(gpu, "readbacks", readbacksEnabled);
|
||||||
|
readbackLinearImagesEnabled =
|
||||||
|
toml::find_or<bool>(gpu, "readbackLinearImages", readbackLinearImagesEnabled);
|
||||||
directMemoryAccessEnabled =
|
directMemoryAccessEnabled =
|
||||||
toml::find_or<bool>(gpu, "directMemoryAccess", directMemoryAccessEnabled);
|
toml::find_or<bool>(gpu, "directMemoryAccess", directMemoryAccessEnabled);
|
||||||
shouldDumpShaders = toml::find_or<bool>(gpu, "dumpShaders", shouldDumpShaders);
|
shouldDumpShaders = toml::find_or<bool>(gpu, "dumpShaders", shouldDumpShaders);
|
||||||
|
@ -802,6 +809,7 @@ void save(const std::filesystem::path& path) {
|
||||||
data["GPU"]["nullGpu"] = isNullGpu;
|
data["GPU"]["nullGpu"] = isNullGpu;
|
||||||
data["GPU"]["copyGPUBuffers"] = shouldCopyGPUBuffers;
|
data["GPU"]["copyGPUBuffers"] = shouldCopyGPUBuffers;
|
||||||
data["GPU"]["readbacks"] = readbacksEnabled;
|
data["GPU"]["readbacks"] = readbacksEnabled;
|
||||||
|
data["GPU"]["readbackLinearImages"] = readbackLinearImagesEnabled;
|
||||||
data["GPU"]["directMemoryAccess"] = directMemoryAccessEnabled;
|
data["GPU"]["directMemoryAccess"] = directMemoryAccessEnabled;
|
||||||
data["GPU"]["dumpShaders"] = shouldDumpShaders;
|
data["GPU"]["dumpShaders"] = shouldDumpShaders;
|
||||||
data["GPU"]["patchShaders"] = shouldPatchShaders;
|
data["GPU"]["patchShaders"] = shouldPatchShaders;
|
||||||
|
@ -902,6 +910,7 @@ void setDefaultValues() {
|
||||||
isNullGpu = false;
|
isNullGpu = false;
|
||||||
shouldCopyGPUBuffers = false;
|
shouldCopyGPUBuffers = false;
|
||||||
readbacksEnabled = false;
|
readbacksEnabled = false;
|
||||||
|
readbackLinearImagesEnabled = false;
|
||||||
directMemoryAccessEnabled = false;
|
directMemoryAccessEnabled = false;
|
||||||
shouldDumpShaders = false;
|
shouldDumpShaders = false;
|
||||||
shouldPatchShaders = false;
|
shouldPatchShaders = false;
|
||||||
|
|
|
@ -47,6 +47,7 @@ bool copyGPUCmdBuffers();
|
||||||
void setCopyGPUCmdBuffers(bool enable);
|
void setCopyGPUCmdBuffers(bool enable);
|
||||||
bool readbacks();
|
bool readbacks();
|
||||||
void setReadbacks(bool enable);
|
void setReadbacks(bool enable);
|
||||||
|
bool readbackLinearImages();
|
||||||
bool directMemoryAccess();
|
bool directMemoryAccess();
|
||||||
void setDirectMemoryAccess(bool enable);
|
void setDirectMemoryAccess(bool enable);
|
||||||
bool dumpShaders();
|
bool dumpShaders();
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <xxhash.h>
|
#include <xxhash.h>
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
|
#include "common/config.h"
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
#include "video_core/buffer_cache/buffer_cache.h"
|
#include "video_core/buffer_cache/buffer_cache.h"
|
||||||
|
@ -486,7 +487,8 @@ ImageView& TextureCache::FindTexture(ImageId image_id, const BaseDesc& desc) {
|
||||||
Image& image = slot_images[image_id];
|
Image& image = slot_images[image_id];
|
||||||
if (desc.type == BindingType::Storage) {
|
if (desc.type == BindingType::Storage) {
|
||||||
image.flags |= ImageFlagBits::GpuModified;
|
image.flags |= ImageFlagBits::GpuModified;
|
||||||
if (image.info.tiling_mode == AmdGpu::TilingMode::Display_Linear) {
|
if (Config::readbackLinearImages() &&
|
||||||
|
image.info.tiling_mode == AmdGpu::TilingMode::Display_Linear) {
|
||||||
download_images.emplace(image_id);
|
download_images.emplace(image_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -498,7 +500,8 @@ ImageView& TextureCache::FindRenderTarget(BaseDesc& desc) {
|
||||||
const ImageId image_id = FindImage(desc);
|
const ImageId image_id = FindImage(desc);
|
||||||
Image& image = slot_images[image_id];
|
Image& image = slot_images[image_id];
|
||||||
image.flags |= ImageFlagBits::GpuModified;
|
image.flags |= ImageFlagBits::GpuModified;
|
||||||
if (image.info.tiling_mode == AmdGpu::TilingMode::Display_Linear) {
|
if (Config::readbackLinearImages() &&
|
||||||
|
image.info.tiling_mode == AmdGpu::TilingMode::Display_Linear) {
|
||||||
download_images.emplace(image_id);
|
download_images.emplace(image_id);
|
||||||
}
|
}
|
||||||
image.usage.render_target = 1u;
|
image.usage.render_target = 1u;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue