From: Phil Dennis-Jordan <phil@philjordan.eu>
To: qemu-devel@nongnu.org, agraf@csgraf.de, pbonzini@redhat.com,
phil@philjordan.eu, marcandre.lureau@redhat.com,
berrange@redhat.com, thuth@redhat.com, philmd@linaro.org,
akihiko.odaki@daynix.com, peter.maydell@linaro.org
Subject: [PATCH v2 6/8] hw/display/apple-gfx: Host GPU picking improvements
Date: Wed, 17 Jul 2024 13:03:24 +0200 [thread overview]
Message-ID: <20240717110326.45230-7-phil@philjordan.eu> (raw)
In-Reply-To: <20240717110326.45230-1-phil@philjordan.eu>
During startup of the PV graphics device, we need to specify the
host GPU to use for PV acceleration of the guest's graphics
operations.
On a host system, this is trivial: pick the only one. The
MTLCreateSystemDefaultDevice() function will do the right thing
in this case.
It gets a little more complicated on systems with more than one
GPU; first and foremost, this applies to x86-64 MacBook Pros
with 15/16" displays. However, with eGPUs, in theory any x86-64
Mac can gain one or more additional GPUs. In these cases, the
default is often not ideal - usually, discrete GPUs are selected.
In my tests, performance tends to be best with iGPUs, however,
and they are usually also best in terms of energy consumption.
Ideally, we will want to allow the user to manually select a GPU
if they so choose. In this patch, I am interested in picking a
sensible default. Instead of the built-in default logic, it is
now:
1. Select a GPU with unified memory (iGPU)
2. If (1) fails, select a GPU that is built-in, not an eGPU.
3. If (2) fails, fall back to system default.
Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
---
hw/display/apple-gfx.m | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/hw/display/apple-gfx.m b/hw/display/apple-gfx.m
index 6f374455f9..018db8bf19 100644
--- a/hw/display/apple-gfx.m
+++ b/hw/display/apple-gfx.m
@@ -500,6 +500,32 @@ static void apple_gfx_register_task_mapping_handlers(AppleGFXState *s,
return mode_array;
}
+static id<MTLDevice> copy_suitable_metal_device(void)
+{
+ id<MTLDevice> dev = nil;
+ NSArray<id<MTLDevice>> *devs = MTLCopyAllDevices();
+
+ /* Prefer a unified memory GPU. Failing that, pick a non-removable GPU. */
+ for (size_t i = 0; i < devs.count; ++i) {
+ if (devs[i].hasUnifiedMemory) {
+ dev = devs[i];
+ break;
+ }
+ if (!devs[i].removable) {
+ dev = devs[i];
+ }
+ }
+
+ if (dev != nil) {
+ [dev retain];
+ } else {
+ dev = MTLCreateSystemDefaultDevice();
+ }
+ [devs release];
+
+ return dev;
+}
+
void apple_gfx_common_realize(AppleGFXState *s, PGDeviceDescriptor *desc)
{
PGDisplayDescriptor *disp_desc = nil;
@@ -507,7 +533,7 @@ void apple_gfx_common_realize(AppleGFXState *s, PGDeviceDescriptor *desc)
QTAILQ_INIT(&s->tasks);
s->render_queue = dispatch_queue_create("apple-gfx.render",
DISPATCH_QUEUE_SERIAL);
- s->mtl = MTLCreateSystemDefaultDevice();
+ s->mtl = copy_suitable_metal_device();
s->mtl_queue = [s->mtl newCommandQueue];
desc.device = s->mtl;
--
2.39.3 (Apple Git-146)
next prev parent reply other threads:[~2024-07-17 11:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-17 11:03 [PATCH v2 0/8] hw/display/apple-gfx: New macOS PV Graphics device Phil Dennis-Jordan
2024-07-17 11:03 ` [PATCH v2 1/8] hw/display/apple-gfx: Introduce ParavirtualizedGraphics.Framework support Phil Dennis-Jordan
2024-07-17 11:03 ` [PATCH v2 2/8] hw/display/apple-gfx: Adds PCI implementation Phil Dennis-Jordan
2024-07-17 11:03 ` [PATCH v2 3/8] ui/cocoa: Adds non-app runloop on main thread mode Phil Dennis-Jordan
2024-07-17 11:03 ` [PATCH v2 4/8] hw/display/apple-gfx: Implements texture syncing for non-UMA GPUs Phil Dennis-Jordan
2024-07-17 11:03 ` [PATCH v2 5/8] hw/display/apple-gfx: Replaces magic number with queried MMIO length Phil Dennis-Jordan
2024-07-17 11:03 ` Phil Dennis-Jordan [this message]
2024-07-17 11:03 ` [PATCH v2 7/8] hw/display/apple-gfx: Adds configurable mode list Phil Dennis-Jordan
2024-07-17 11:03 ` [PATCH v2 8/8] MAINTAINERS: Add myself as maintainer for apple-gfx, reviewer for HVF Phil Dennis-Jordan
2024-07-20 14:42 ` [PATCH v2 0/8] hw/display/apple-gfx: New macOS PV Graphics device Akihiko Odaki
2024-07-20 15:16 ` Phil Dennis-Jordan
2024-07-20 16:06 ` Akihiko Odaki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240717110326.45230-7-phil@philjordan.eu \
--to=phil@philjordan.eu \
--cc=agraf@csgraf.de \
--cc=akihiko.odaki@daynix.com \
--cc=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).