Skip to content

Commit

Permalink
Use switcheroo for gpu offloading. (#11645)
Browse files Browse the repository at this point in the history
Use XAppGpuOffloadHelper get offload info. This will allow offloading
on other distros besides Ubuntu and derivatives.
  • Loading branch information
mtwebster committed Jun 1, 2023
1 parent 10c9ede commit 00b0a65
Show file tree
Hide file tree
Showing 11 changed files with 126 additions and 121 deletions.
2 changes: 1 addition & 1 deletion debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Build-Depends:
libpulse-dev,
librsvg2-dev,
libstartup-notification0-dev (>= 0.11),
libxapp-dev (>= 2.0.0),
libxapp-dev (>= 2.6.0),
libxfixes-dev (>= 1:5.0),
meson,
python3:any,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ class AppMenuButtonRightClickMenu extends Applet.AppletPopupMenu {
}

if (Main.gpu_offload_supported && !hasWindows) {
item = createMenuItem({label: _("Run with NVIDIA GPU"), icon: 'cpu'});
item = createMenuItem({label: _("Run with dedicated GPU"), icon: 'cpu'});

this.signals.connect(item, 'activate', () => this.groupState.trigger('launchNewInstance', true));

Expand Down
6 changes: 1 addition & 5 deletions files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js
Original file line number Diff line number Diff line change
Expand Up @@ -448,10 +448,7 @@ class GenericApplicationButton extends SimpleMenuItem {
populateMenu(menu) {
let menuItem;
if (Main.gpu_offload_supported) {
menuItem = new ApplicationContextMenuItem(this, _("Run with NVIDIA GPU"), "offload_launch", "cpu");
menu.addMenuItem(menuItem);
} else if (this.applet._isBumblebeeInstalled) {
menuItem = new ApplicationContextMenuItem(this, _("Run with NVIDIA GPU"), "run_with_nvidia_gpu", "cpu");
menuItem = new ApplicationContextMenuItem(this, _("Run with dedicated GPU"), "offload_launch", "cpu");
menu.addMenuItem(menuItem);
}

Expand Down Expand Up @@ -1248,7 +1245,6 @@ class CinnamonMenuApplet extends Applet.TextIconApplet {
this._knownApps = new Set(); // Used to keep track of apps that are already installed, so we can highlight newly installed ones
this._appsWereRefreshed = false;
this._canUninstallApps = GLib.file_test("/usr/bin/cinnamon-remove-application", GLib.FileTest.EXISTS);
this._isBumblebeeInstalled = GLib.file_test("/usr/bin/optirun", GLib.FileTest.EXISTS);
this.RecentManager = DocInfo.getDocManager();
this.privacy_settings = new Gio.Settings( {schema_id: PRIVACY_SCHEMA} );
this.noRecentDocuments = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class PanelAppLauncherMenu extends Applet.AppletPopupMenu {
this.addMenuItem(item);

if (Main.gpu_offload_supported) {
let item = new PopupMenu.PopupIconMenuItem(_("Run with NVIDIA GPU"), "cpu", St.IconType.SYMBOLIC);
let item = new PopupMenu.PopupIconMenuItem(_("Run with dedicated GPU"), "cpu", St.IconType.SYMBOLIC);
this._signals.connect(item, 'activate', Lang.bind(this, this._onLaunchOffloadedActivate));
this.addMenuItem(item);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,13 +219,15 @@ def load(self):
self.set_text('exec-entry', "Exec")
self.set_text('comment-entry', "Comment")
self.set_check('terminal-check', "Terminal")
self.set_check('offload-gpu-check', "PrefersNonDefaultGPU")
self.set_icon("Icon")

def get_keyfile_edits(self):
return dict(Name=self.builder.get_object('name-entry').get_text(),
Exec=self.builder.get_object('exec-entry').get_text(),
Comment=self.builder.get_object('comment-entry').get_text(),
Terminal=self.builder.get_object('terminal-check').get_active(),
PrefersNonDefaultGPU=self.builder.get_object("offload-gpu-check").get_active(),
Icon=self.icon_chooser.get_icon(),
Type="Application")

Expand Down Expand Up @@ -308,6 +310,7 @@ def load(self):
self.set_text('exec-entry', "Exec")
self.set_text('comment-entry', "Comment")
self.set_check('terminal-check', "Terminal")
self.set_check('offload-gpu-check', "PrefersNonDefaultGPU")
self.set_icon("Icon")

def get_keyfile_edits(self):
Expand All @@ -325,6 +328,7 @@ def get_keyfile_edits(self):
Exec=self.builder.get_object('exec-entry').get_text(),
Comment=self.builder.get_object('comment-entry').get_text(),
Terminal=self.builder.get_object('terminal-check').get_active(),
PrefersNonDefaultGPU=self.builder.get_object("offload-gpu-check").get_active(),
Icon=icon,
Type="Application")

Expand Down
163 changes: 91 additions & 72 deletions files/usr/share/cinnamon/cinnamon-desktop-editor/launcher-editor.ui
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<requires lib="gtk+" version="3.22"/>
<requires lib="xapp" version="0.0"/>
<object class="GtkDialog" id="editor">
<property name="can_focus">False</property>
<property name="border_width">4</property>
<property name="can-focus">False</property>
<property name="border-width">4</property>
<property name="title" translatable="yes">Launcher Properties</property>
<property name="type_hint">dialog</property>
<property name="type-hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-box">
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="cancel">
<property name="label">gtk-cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="use-stock">True</property>
</object>
<packing>
<property name="expand">False</property>
Expand All @@ -35,9 +35,9 @@
<object class="GtkButton" id="ok">
<property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="use-stock">True</property>
</object>
<packing>
<property name="expand">False</property>
Expand All @@ -49,30 +49,30 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="hbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
<property name="yscale">0</property>
<child>
<object class="XAppIconChooserButton" id="icon-chooser">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="icon_size">dialog</property>
<property name="icon-size">dialog</property>
<property name="icon">cinnamon-panel-launcher</property>
</object>
</child>
Expand All @@ -84,88 +84,81 @@
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=5 -->
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">10</property>
<property name="can-focus">False</property>
<property name="row-spacing">6</property>
<property name="column-spacing">10</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Name:</property>
<property name="xalign">1</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Command:</property>
<property name="xalign">1</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Comment:</property>
<property name="xalign">1</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="name-entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="can-focus">True</property>
<property name="has-focus">True</property>
<property name="hexpand">True</property>
<property name="invisible_char">●</property>
<property name="invisible-char">●</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="command-box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkEntry" id="exec-entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<property name="invisible_char">●</property>
<property name="invisible-char">●</property>
</object>
<packing>
<property name="expand">True</property>
Expand All @@ -177,8 +170,8 @@
<object class="GtkButton" id="exec-browse">
<property name="label" translatable="yes">Browse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
Expand All @@ -188,50 +181,76 @@
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="comment-entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<property name="invisible_char">●</property>
<property name="invisible-char">●</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="terminal-check">
<property name="label" translatable="yes">Launch in Terminal?</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="left-attach">1</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="offload-gpu-check">
<property name="label" translatable="yes">Use dedicated GPU if available</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
Expand Down

0 comments on commit 00b0a65

Please sign in to comment.