Merge pull request #18781 from hrydgard/even-more-fixes

Disable 16-bit textures on PowerVR with Vulkan
This commit is contained in:
Henrik Rydgård 2024-01-29 16:06:27 +01:00 committed by GitHub
commit f02142c5c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 21 additions and 11 deletions

View File

@ -1033,6 +1033,9 @@ VKContext::VKContext(VulkanContext *vulkan, bool useRenderThread)
// Very rough heuristic.
multisampleAllowed = false;
}
} else if (caps_.vendor == GPUVendor::VENDOR_IMGTEC) {
// Not sure about driver versions, so let's just ban, impact is tiny.
bugs_.Infest(Bugs::PVR_BAD_16BIT_TEXFORMATS);
}
if (!vulkan->Extensions().KHR_depth_stencil_resolve) {

View File

@ -764,6 +764,7 @@ const char *Bugs::GetBugName(uint32_t bug) {
case SUBPASS_FEEDBACK_BROKEN: return "SUBPASS_FEEDBACK_BROKEN";
case GEOMETRY_SHADERS_SLOW_OR_BROKEN: return "GEOMETRY_SHADERS_SLOW_OR_BROKEN";
case ADRENO_RESOURCE_DEADLOCK: return "ADRENO_RESOURCE_DEADLOCK";
case PVR_BAD_16BIT_TEXFORMATS: return "PVR_BAD_16BIT_TEXFORMATS";
default: return "(N/A)";
}
}

View File

@ -350,6 +350,7 @@ public:
GEOMETRY_SHADERS_SLOW_OR_BROKEN = 11,
ADRENO_RESOURCE_DEADLOCK = 12,
UNIFORM_INDEXING_BROKEN = 13, // not a properly diagnosed issue, a workaround attempt: #17386
PVR_BAD_16BIT_TEXFORMATS = 14,
MAX_BUG,
};

View File

@ -25,6 +25,7 @@
#include "Common/Log.h"
#include "Common/Serialize/Serializer.h"
#include "Common/Serialize/SerializeFuncs.h"
#include "Common/Thread/ThreadUtil.h"
#include "Core/Config.h"
#include "Core/CoreTiming.h"
#include "Core/Debugger/Breakpoints.h"
@ -675,6 +676,8 @@ size_t FormatMemWriteTagAtNoFlush(char *buf, size_t sz, const char *prefix, uint
}
static void FlushMemInfoThread() {
SetCurrentThreadName("FlushMemInfo");
while (flushThreadRunning.load()) {
flushThreadPending = false;
FlushPendingMemInfo();

View File

@ -255,16 +255,18 @@ u32 GPU_Vulkan::CheckGPUFeatures() const {
}
}
// These are VULKAN_4444_FORMAT and friends.
// Note that we are now using the correct set of formats - the only cases where some may be missing
// are non-conformant implementations like MoltenVK.
uint32_t fmt4444 = draw_->GetDataFormatSupport(Draw::DataFormat::B4G4R4A4_UNORM_PACK16);
uint32_t fmt1555 = draw_->GetDataFormatSupport(Draw::DataFormat::A1R5G5B5_UNORM_PACK16);
uint32_t fmt565 = draw_->GetDataFormatSupport(Draw::DataFormat::R5G6B5_UNORM_PACK16);
if ((fmt4444 & Draw::FMT_TEXTURE) && (fmt565 & Draw::FMT_TEXTURE) && (fmt1555 & Draw::FMT_TEXTURE)) {
features |= GPU_USE_16BIT_FORMATS;
} else {
INFO_LOG(G3D, "Deficient texture format support: 4444: %d 1555: %d 565: %d", fmt4444, fmt1555, fmt565);
if (!draw_->GetBugs().Has(Draw::Bugs::PVR_BAD_16BIT_TEXFORMATS)) {
// These are VULKAN_4444_FORMAT and friends.
// Note that we are now using the correct set of formats - the only cases where some may be missing
// are non-conformant implementations like MoltenVK.
uint32_t fmt4444 = draw_->GetDataFormatSupport(Draw::DataFormat::B4G4R4A4_UNORM_PACK16);
uint32_t fmt1555 = draw_->GetDataFormatSupport(Draw::DataFormat::A1R5G5B5_UNORM_PACK16);
uint32_t fmt565 = draw_->GetDataFormatSupport(Draw::DataFormat::R5G6B5_UNORM_PACK16);
if ((fmt4444 & Draw::FMT_TEXTURE) && (fmt565 & Draw::FMT_TEXTURE) && (fmt1555 & Draw::FMT_TEXTURE)) {
features |= GPU_USE_16BIT_FORMATS;
} else {
INFO_LOG(G3D, "Deficient texture format support: 4444: %d 1555: %d 565: %d", fmt4444, fmt1555, fmt565);
}
}
if (g_Config.bStereoRendering && draw_->GetDeviceCaps().multiViewSupported) {

View File

@ -157,7 +157,7 @@ android {
vr {
applicationId 'org.ppsspp.ppssppvr'
dimension "variant"
targetSdkVersion 29
targetSdkVersion 29 // Do not upgrade this, we depend on not requiring scoped storage on Oculus.
externalNativeBuild {
cmake {
// Available arguments listed at https://developer.android.com/ndk/guides/cmake.html