Skip to content

Commit bc1f951

Browse files
haroonqcopybara-github
authored andcommitted
Add flag for software rendering.
This flag is currently unused. PiperOrigin-RevId: 885453938 Change-Id: Ia2112410ff12c7b18ad154f18887d4d795bafa3d
1 parent 60be42e commit bc1f951

5 files changed

Lines changed: 27 additions & 3 deletions

File tree

src/experimental/filament/render_context_filament.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ struct mjrFilamentConfig {
4141

4242
// The backend graphics API to use.
4343
int graphics_api;
44+
45+
// Use software rendering even if the platform supports hardware rendering.
46+
bool force_software_rendering;
4447
};
4548

4649
void mjrf_defaultFilamentConfig(mjrFilamentConfig* config);

src/experimental/platform/graphics_mode.cc

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,16 @@ bool IsFilament(GraphicsMode gfx_mode) {
2828
return gfx_mode == GraphicsMode::FilamentOpenGl ||
2929
gfx_mode == GraphicsMode::FilamentVulkan ||
3030
gfx_mode == GraphicsMode::FilamentWebGl ||
31-
gfx_mode == GraphicsMode::FilamentOpenGlHeadless;
31+
gfx_mode == GraphicsMode::FilamentOpenGlHeadless ||
32+
gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
3233
}
3334

3435
bool IsOpenGl(GraphicsMode gfx_mode) {
3536
return gfx_mode == GraphicsMode::ClassicOpenGl ||
3637
gfx_mode == GraphicsMode::ClassicOpenGlHeadless ||
3738
gfx_mode == GraphicsMode::FilamentOpenGl ||
38-
gfx_mode == GraphicsMode::FilamentOpenGlHeadless;
39+
gfx_mode == GraphicsMode::FilamentOpenGlHeadless ||
40+
gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
3941
}
4042

4143
bool IsVulkan(GraphicsMode gfx_mode) {
@@ -48,7 +50,12 @@ bool IsWebGl(GraphicsMode gfx_mode) {
4850

4951
bool IsHeadless(GraphicsMode gfx_mode) {
5052
return gfx_mode == GraphicsMode::ClassicOpenGlHeadless ||
51-
gfx_mode == GraphicsMode::FilamentOpenGlHeadless;
53+
gfx_mode == GraphicsMode::FilamentOpenGlHeadless ||
54+
gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
55+
}
56+
57+
bool IsSoftware(GraphicsMode gfx_mode) {
58+
return gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
5259
}
5360

5461
GraphicsMode GraphicsModeFromString(std::string_view str,
@@ -65,6 +72,8 @@ GraphicsMode GraphicsModeFromString(std::string_view str,
6572
return GraphicsMode::FilamentWebGl;
6673
} else if (str == "opengl_headless") {
6774
return GraphicsMode::FilamentOpenGlHeadless;
75+
} else if (str == "opengl_software") {
76+
return GraphicsMode::FilamentOpenGlSoftware;
6877
} else if (str.empty()) {
6978
return default_mode;
7079
} else {

src/experimental/platform/graphics_mode.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ enum class GraphicsMode {
3838

3939
// Similar to FilamentOpenGl, but assumes "headless" rendering.
4040
FilamentOpenGlHeadless,
41+
42+
// Similar to FilamentOpenGl, but forces software rendering.
43+
FilamentOpenGlSoftware,
4144
};
4245

4346
bool IsClassic(GraphicsMode gfx_mode);
@@ -46,6 +49,7 @@ bool IsOpenGl(GraphicsMode gfx_mode);
4649
bool IsVulkan(GraphicsMode gfx_mode);
4750
bool IsWebGl(GraphicsMode gfx_mode);
4851
bool IsHeadless(GraphicsMode gfx_mode);
52+
bool IsSoftware(GraphicsMode gfx_mode);
4953

5054
GraphicsMode GraphicsModeFromString(std::string_view str,
5155
GraphicsMode default_mode);

src/experimental/platform/renderer.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ void Renderer::Init(const mjModel* model) {
8888
mjrFilamentConfig render_config;
8989
mjrf_defaultFilamentConfig(&render_config);
9090
render_config.native_window = native_window_;
91+
render_config.force_software_rendering = IsSoftware(gfx_);
9192
render_config.graphics_api =
9293
IsOpenGl(gfx_) || IsWebGl(gfx_) ? mjGFX_OPENGL : mjGFX_VULKAN;
9394
mjrf_makeFilamentContext(model, &render_context_, &render_config);

src/experimental/studio/app.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,6 +1761,7 @@ void App::MainMenuGui() {
17611761
ImGui::Separator();
17621762

17631763

1764+
#ifdef __linux__
17641765
if (ImGui::BeginMenu("Graphics Mode (Experimental)")) {
17651766
std::optional<platform::GraphicsMode> mode;
17661767
if (ImGui::MenuItem(
@@ -1783,6 +1784,11 @@ void App::MainMenuGui() {
17831784
gfx_mode_ == platform::GraphicsMode::FilamentOpenGlHeadless)) {
17841785
mode = platform::GraphicsMode::FilamentOpenGlHeadless;
17851786
}
1787+
if (ImGui::MenuItem(
1788+
"Filament OpenGL Software", nullptr,
1789+
gfx_mode_ == platform::GraphicsMode::FilamentOpenGlSoftware)) {
1790+
mode = platform::GraphicsMode::FilamentOpenGlSoftware;
1791+
}
17861792
if (ImGui::MenuItem(
17871793
"Filament Vulkan", nullptr,
17881794
gfx_mode_ == platform::GraphicsMode::FilamentVulkan)) {
@@ -1802,6 +1808,7 @@ void App::MainMenuGui() {
18021808
}
18031809
ImGui::EndMenu();
18041810
}
1811+
#endif // __linux__
18051812

18061813
ImGui::EndMenu();
18071814
}

0 commit comments

Comments
 (0)