mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-27 07:20:49 +00:00
Merge pull request #17924 from hrydgard/vulkan-device-picking
SDL: Actually use the chosen Vulkan device
This commit is contained in:
commit
b2fbe1d8e9
@ -18,6 +18,7 @@ enum {
|
||||
GPU_VENDOR_BROADCOM = 7, // Raspberry PI etc
|
||||
GPU_VENDOR_VIVANTE = 8,
|
||||
GPU_VENDOR_APPLE = 9,
|
||||
GPU_VENDOR_MESA = 10,
|
||||
GPU_VENDOR_UNKNOWN = 0,
|
||||
};
|
||||
|
||||
|
@ -463,6 +463,7 @@ public:
|
||||
case GPUVendor::VENDOR_BROADCOM: return "VENDOR_BROADCOM";
|
||||
case GPUVendor::VENDOR_VIVANTE: return "VENDOR_VIVANTE";
|
||||
case GPUVendor::VENDOR_APPLE: return "VENDOR_APPLE";
|
||||
case GPUVendor::VENDOR_MESA: return "VENDOR_MESA";
|
||||
case GPUVendor::VENDOR_UNKNOWN:
|
||||
default:
|
||||
return "VENDOR_UNKNOWN";
|
||||
@ -615,6 +616,7 @@ OpenGLContext::OpenGLContext(bool canChangeSwapInterval) : renderManager_(frameT
|
||||
case GPU_VENDOR_IMGTEC: caps_.vendor = GPUVendor::VENDOR_IMGTEC; break;
|
||||
case GPU_VENDOR_VIVANTE: caps_.vendor = GPUVendor::VENDOR_VIVANTE; break;
|
||||
case GPU_VENDOR_APPLE: caps_.vendor = GPUVendor::VENDOR_APPLE; break;
|
||||
case GPU_VENDOR_MESA: caps_.vendor = GPUVendor::VENDOR_MESA; break;
|
||||
case GPU_VENDOR_UNKNOWN:
|
||||
default:
|
||||
caps_.vendor = GPUVendor::VENDOR_UNKNOWN;
|
||||
|
@ -57,6 +57,7 @@ std::string VulkanVendorString(uint32_t vendorId) {
|
||||
case VULKAN_VENDOR_QUALCOMM: return "Qualcomm";
|
||||
case VULKAN_VENDOR_IMGTEC: return "Imagination";
|
||||
case VULKAN_VENDOR_APPLE: return "Apple";
|
||||
case VULKAN_VENDOR_MESA: return "Mesa";
|
||||
default:
|
||||
return StringFromFormat("%08x", vendorId);
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ enum {
|
||||
VULKAN_VENDOR_QUALCOMM = 0x00005143,
|
||||
VULKAN_VENDOR_IMGTEC = 0x00001010, // PowerVR
|
||||
VULKAN_VENDOR_APPLE = 0x0000106b, // Apple through MoltenVK
|
||||
VULKAN_VENDOR_MESA = 0x00010005, // lavapipe
|
||||
};
|
||||
|
||||
VK_DEFINE_HANDLE(VmaAllocator);
|
||||
|
@ -920,6 +920,7 @@ VKContext::VKContext(VulkanContext *vulkan, bool useRenderThread)
|
||||
case VULKAN_VENDOR_QUALCOMM: caps_.vendor = GPUVendor::VENDOR_QUALCOMM; break;
|
||||
case VULKAN_VENDOR_INTEL: caps_.vendor = GPUVendor::VENDOR_INTEL; break;
|
||||
case VULKAN_VENDOR_APPLE: caps_.vendor = GPUVendor::VENDOR_APPLE; break;
|
||||
case VULKAN_VENDOR_MESA: caps_.vendor = GPUVendor::VENDOR_MESA; break;
|
||||
default:
|
||||
WARN_LOG(G3D, "Unknown vendor ID %08x", deviceProps.vendorID);
|
||||
caps_.vendor = GPUVendor::VENDOR_UNKNOWN;
|
||||
|
@ -231,6 +231,7 @@ enum class GPUVendor {
|
||||
VENDOR_BROADCOM, // Raspberry
|
||||
VENDOR_VIVANTE,
|
||||
VENDOR_APPLE,
|
||||
VENDOR_MESA,
|
||||
};
|
||||
|
||||
enum class NativeObject {
|
||||
|
@ -126,6 +126,8 @@ void LoadPostShaderInfo(Draw::DrawContext *draw, const std::vector<Path> &direct
|
||||
blacklistedVendor = Draw::GPUVendor::VENDOR_APPLE;
|
||||
} else if (item == "Intel") {
|
||||
blacklistedVendor = Draw::GPUVendor::VENDOR_INTEL;
|
||||
} else if (item == "Mesa") {
|
||||
blacklistedVendor = Draw::GPUVendor::VENDOR_MESA;
|
||||
}
|
||||
if (blacklistedVendor == gpuVendor && blacklistedVendor != Draw::GPUVendor::VENDOR_UNKNOWN) {
|
||||
skipped = true;
|
||||
|
@ -69,7 +69,15 @@ bool SDLVulkanGraphicsContext::Init(SDL_Window *&window, int x, int y, int w, in
|
||||
vulkan_ = nullptr;
|
||||
return false;
|
||||
}
|
||||
vulkan_->ChooseDevice(vulkan_->GetBestPhysicalDevice());
|
||||
|
||||
int deviceNum = vulkan_->GetPhysicalDeviceByName(g_Config.sVulkanDevice);
|
||||
if (deviceNum < 0) {
|
||||
deviceNum = vulkan_->GetBestPhysicalDevice();
|
||||
if (!g_Config.sVulkanDevice.empty())
|
||||
g_Config.sVulkanDevice = vulkan_->GetPhysicalDeviceProperties(deviceNum).properties.deviceName;
|
||||
}
|
||||
|
||||
vulkan_->ChooseDevice(deviceNum);
|
||||
if (vulkan_->CreateDevice() != VK_SUCCESS) {
|
||||
*error_message = vulkan_->InitError();
|
||||
delete vulkan_;
|
||||
|
Loading…
Reference in New Issue
Block a user