Skip to content

Commit 52bbbd4

Browse files
committed
Merge pull request godotengine#98247 from TCROC/fix-headless-graphics-driver-and-shader-crash
Don't create rendering device or parse glsl shader in headless mode
2 parents f25c082 + 2e1fc24 commit 52bbbd4

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

modules/betsy/image_compress_betsy.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,16 @@
3737
#include "bc1.glsl.gen.h"
3838
#include "bc4.glsl.gen.h"
3939
#include "bc6h.glsl.gen.h"
40+
#include "servers/display_server.h"
4041

4142
static Mutex betsy_mutex;
4243
static BetsyCompressor *betsy = nullptr;
4344

4445
void BetsyCompressor::_init() {
46+
if (!DisplayServer::can_create_rendering_device()) {
47+
return;
48+
}
49+
4550
// Create local RD.
4651
RenderingContextDriver *rcd = nullptr;
4752
RenderingDevice *rd = RenderingServer::get_singleton()->create_local_rendering_device();
@@ -182,6 +187,11 @@ static String get_shader_name(BetsyFormat p_format) {
182187
Error BetsyCompressor::_compress(BetsyFormat p_format, Image *r_img) {
183188
uint64_t start_time = OS::get_singleton()->get_ticks_msec();
184189

190+
// Return an error so that the compression can fall back to cpu compression
191+
if (compress_rd == nullptr) {
192+
return ERR_CANT_CREATE;
193+
}
194+
185195
if (r_img->is_compressed()) {
186196
return ERR_INVALID_DATA;
187197
}

servers/display_server.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,10 @@ void DisplayServer::_input_set_custom_mouse_cursor_func(const Ref<Resource> &p_i
12301230
}
12311231

12321232
bool DisplayServer::can_create_rendering_device() {
1233+
if (get_singleton()->get_name() == "headless") {
1234+
return false;
1235+
}
1236+
12331237
#if defined(RD_ENABLED)
12341238
RenderingDevice *device = RenderingDevice::get_singleton();
12351239
if (device) {

servers/rendering/rendering_device_binds.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@
3131
#include "rendering_device_binds.h"
3232

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

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

0 commit comments

Comments
 (0)