Skip to content

Commit

Permalink
Merge pull request godotengine#98247 from TCROC/fix-headless-graphics…
Browse files Browse the repository at this point in the history
…-driver-and-shader-crash

Don't create rendering device or parse glsl shader in headless mode
  • Loading branch information
Repiteo committed Oct 24, 2024
2 parents f25c082 + 2e1fc24 commit 52bbbd4
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
10 changes: 10 additions & 0 deletions modules/betsy/image_compress_betsy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,16 @@
#include "bc1.glsl.gen.h"
#include "bc4.glsl.gen.h"
#include "bc6h.glsl.gen.h"
#include "servers/display_server.h"

static Mutex betsy_mutex;
static BetsyCompressor *betsy = nullptr;

void BetsyCompressor::_init() {
if (!DisplayServer::can_create_rendering_device()) {
return;
}

// Create local RD.
RenderingContextDriver *rcd = nullptr;
RenderingDevice *rd = RenderingServer::get_singleton()->create_local_rendering_device();
Expand Down Expand Up @@ -182,6 +187,11 @@ static String get_shader_name(BetsyFormat p_format) {
Error BetsyCompressor::_compress(BetsyFormat p_format, Image *r_img) {
uint64_t start_time = OS::get_singleton()->get_ticks_msec();

// Return an error so that the compression can fall back to cpu compression
if (compress_rd == nullptr) {
return ERR_CANT_CREATE;
}

if (r_img->is_compressed()) {
return ERR_INVALID_DATA;
}
Expand Down
4 changes: 4 additions & 0 deletions servers/display_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1230,6 +1230,10 @@ void DisplayServer::_input_set_custom_mouse_cursor_func(const Ref<Resource> &p_i
}

bool DisplayServer::can_create_rendering_device() {
if (get_singleton()->get_name() == "headless") {
return false;
}

#if defined(RD_ENABLED)
RenderingDevice *device = RenderingDevice::get_singleton();
if (device) {
Expand Down
5 changes: 4 additions & 1 deletion servers/rendering/rendering_device_binds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@
#include "rendering_device_binds.h"

Error RDShaderFile::parse_versions_from_text(const String &p_text, const String p_defines, OpenIncludeFunction p_include_func, void *p_include_func_userdata) {
ERR_FAIL_NULL_V(RenderingDevice::get_singleton(), ERR_UNAVAILABLE);
ERR_FAIL_NULL_V_MSG(
RenderingDevice::get_singleton(),
ERR_UNAVAILABLE,
"Cannot import custom .glsl shaders when running without a RenderingDevice. This can happen if you are using the headless more or the Compatibility backend.");

Vector<String> lines = p_text.split("\n");

Expand Down

0 comments on commit 52bbbd4

Please sign in to comment.