video_core: prefer discrete gpu if available (#116)
* video_core: prefer discrete gpu if available * ci: Upgrade to clang format 17 * rewrite w\o std::zip usage --------- Co-authored-by: raphaelthegreat <47210458+raphaelthegreat@users.noreply.github.com>
This commit is contained in:
parent
d496fab492
commit
2696733cad
|
@ -10,7 +10,7 @@ if grep -nrI '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .ci* dis
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Default clang-format points to default 3.5 version one
|
# Default clang-format points to default 3.5 version one
|
||||||
CLANG_FORMAT=clang-format-15
|
CLANG_FORMAT=clang-format-17
|
||||||
$CLANG_FORMAT --version
|
$CLANG_FORMAT --version
|
||||||
|
|
||||||
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
||||||
|
|
|
@ -17,7 +17,11 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Install
|
- name: Install
|
||||||
run: sudo apt-get install clang-format-15
|
run: |
|
||||||
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
||||||
|
sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main'
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install clang-format-17
|
||||||
- name: Build
|
- name: Build
|
||||||
env:
|
env:
|
||||||
COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
|
COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
|
||||||
|
|
|
@ -37,7 +37,7 @@ endfunction()
|
||||||
# against all the src files. This should be used before making a pull request.
|
# against all the src files. This should be used before making a pull request.
|
||||||
# =======================================================================
|
# =======================================================================
|
||||||
|
|
||||||
set(CLANG_FORMAT_POSTFIX "-15")
|
set(CLANG_FORMAT_POSTFIX "-17")
|
||||||
find_program(CLANG_FORMAT
|
find_program(CLANG_FORMAT
|
||||||
NAMES clang-format${CLANG_FORMAT_POSTFIX}
|
NAMES clang-format${CLANG_FORMAT_POSTFIX}
|
||||||
clang-format
|
clang-format
|
||||||
|
|
|
@ -12,7 +12,7 @@ namespace Config {
|
||||||
bool isNeo = false;
|
bool isNeo = false;
|
||||||
u32 screenWidth = 1280;
|
u32 screenWidth = 1280;
|
||||||
u32 screenHeight = 720;
|
u32 screenHeight = 720;
|
||||||
u32 gpuId = 0; // Vulkan physical device no
|
s32 gpuId = -1; // Vulkan physical device index. Set to negative for auto select
|
||||||
std::string logFilter;
|
std::string logFilter;
|
||||||
std::string logType = "sync";
|
std::string logType = "sync";
|
||||||
bool isDebugDump = false;
|
bool isDebugDump = false;
|
||||||
|
@ -33,7 +33,7 @@ u32 getScreenHeight() {
|
||||||
return screenHeight;
|
return screenHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 getGpuId() {
|
s32 getGpuId() {
|
||||||
return gpuId;
|
return gpuId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ std::string getLogType();
|
||||||
|
|
||||||
u32 getScreenWidth();
|
u32 getScreenWidth();
|
||||||
u32 getScreenHeight();
|
u32 getScreenHeight();
|
||||||
u32 getGpuId();
|
s32 getGpuId();
|
||||||
|
|
||||||
bool debugDump();
|
bool debugDump();
|
||||||
bool isLleLibc();
|
bool isLleLibc();
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include <ranges>
|
||||||
#include <span>
|
#include <span>
|
||||||
#include <boost/container/static_vector.hpp>
|
#include <boost/container/static_vector.hpp>
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
@ -39,16 +40,34 @@ Instance::Instance(bool enable_validation, bool dump_command_buffers)
|
||||||
dump_command_buffers)},
|
dump_command_buffers)},
|
||||||
physical_devices{instance->enumeratePhysicalDevices()} {}
|
physical_devices{instance->enumeratePhysicalDevices()} {}
|
||||||
|
|
||||||
Instance::Instance(Frontend::WindowSDL& window, u32 physical_device_index)
|
Instance::Instance(Frontend::WindowSDL& window, s32 physical_device_index)
|
||||||
: instance{CreateInstance(dl, window.getWindowInfo().type, true, false)},
|
: instance{CreateInstance(dl, window.getWindowInfo().type, true, false)},
|
||||||
debug_callback{CreateDebugCallback(*instance)}, physical_devices{
|
debug_callback{CreateDebugCallback(*instance)},
|
||||||
instance->enumeratePhysicalDevices()} {
|
physical_devices{instance->enumeratePhysicalDevices()} {
|
||||||
const std::size_t num_physical_devices = static_cast<u16>(physical_devices.size());
|
const std::size_t num_physical_devices = static_cast<u16>(physical_devices.size());
|
||||||
ASSERT_MSG(physical_device_index < num_physical_devices,
|
ASSERT_MSG(num_physical_devices > 0, "No physical devices found");
|
||||||
"Invalid physical device index {} provided when only {} devices exist",
|
|
||||||
physical_device_index, num_physical_devices);
|
if (physical_device_index < 0) {
|
||||||
|
std::vector<std::pair<size_t, vk::PhysicalDeviceProperties2>> properties2{};
|
||||||
|
for (auto const& physical : physical_devices) {
|
||||||
|
properties2.emplace_back(properties2.size(), physical.getProperties2());
|
||||||
|
}
|
||||||
|
std::sort(properties2.begin(), properties2.end(), [](const auto& left, const auto& right) {
|
||||||
|
if (std::get<1>(left).properties.deviceType ==
|
||||||
|
std::get<1>(right).properties.deviceType) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return std::get<1>(left).properties.deviceType == vk::PhysicalDeviceType::eDiscreteGpu;
|
||||||
|
});
|
||||||
|
physical_device = physical_devices[std::get<0>(properties2[0])];
|
||||||
|
} else {
|
||||||
|
ASSERT_MSG(physical_device_index < num_physical_devices,
|
||||||
|
"Invalid physical device index {} provided when only {} devices exist",
|
||||||
|
physical_device_index, num_physical_devices);
|
||||||
|
|
||||||
|
physical_device = physical_devices[physical_device_index];
|
||||||
|
}
|
||||||
|
|
||||||
physical_device = physical_devices[physical_device_index];
|
|
||||||
available_extensions = GetSupportedExtensions(physical_device);
|
available_extensions = GetSupportedExtensions(physical_device);
|
||||||
properties = physical_device.getProperties();
|
properties = physical_device.getProperties();
|
||||||
if (properties.apiVersion < TargetVulkanApiVersion) {
|
if (properties.apiVersion < TargetVulkanApiVersion) {
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace Vulkan {
|
||||||
class Instance {
|
class Instance {
|
||||||
public:
|
public:
|
||||||
explicit Instance(bool validation = false, bool dump_command_buffers = false);
|
explicit Instance(bool validation = false, bool dump_command_buffers = false);
|
||||||
explicit Instance(Frontend::WindowSDL& window, u32 physical_device_index);
|
explicit Instance(Frontend::WindowSDL& window, s32 physical_device_index);
|
||||||
~Instance();
|
~Instance();
|
||||||
|
|
||||||
/// Returns a formatted string for the driver version
|
/// Returns a formatted string for the driver version
|
||||||
|
|
Loading…
Reference in New Issue