Skip to content

Commit d06e855

Browse files
committed
more software rendering work
1 parent 4de70e0 commit d06e855

File tree

2 files changed

+37
-47
lines changed

2 files changed

+37
-47
lines changed

src/gl_renderer.c

+3-29
Original file line numberDiff line numberDiff line change
@@ -442,11 +442,7 @@ struct gl_renderer *gl_renderer_new_from_gbm_device(
442442
return NULL;
443443
}
444444

445-
struct gl_renderer *gl_renderer_new_surfaceless(
446-
struct tracer *tracer,
447-
bool has_forced_pixel_format,
448-
enum pixfmt pixel_format
449-
) {
445+
struct gl_renderer *gl_renderer_new_surfaceless(struct tracer *tracer, bool has_forced_pixel_format, enum pixfmt pixel_format) {
450446
struct gl_renderer *renderer;
451447
const char *egl_client_exts, *egl_display_exts;
452448
const char *gl_renderer, *gl_exts;
@@ -492,7 +488,6 @@ struct gl_renderer *gl_renderer_new_surfaceless(
492488
// are defined by EGL_EXT_platform_base.
493489
#ifdef EGL_EXT_platform_base
494490
PFNEGLGETPLATFORMDISPLAYEXTPROC egl_get_platform_display_ext;
495-
PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC egl_create_platform_window_surface_ext;
496491
#endif
497492

498493
if (supports_egl_ext_platform_base) {
@@ -507,26 +502,6 @@ struct gl_renderer *gl_renderer_new_surfaceless(
507502
#endif
508503
}
509504

510-
if (supports_egl_ext_platform_base) {
511-
#ifdef EGL_EXT_platform_base
512-
egl_create_platform_window_surface_ext = try_get_proc_address("eglCreatePlatformWindowSurfaceEXT");
513-
if (egl_create_platform_window_surface_ext == NULL) {
514-
LOG_ERROR(
515-
"Couldn't resolve \"eglCreatePlatformWindowSurfaceEXT\" even though \"EGL_EXT_platform_base\" was listed as supported.\n"
516-
);
517-
egl_get_platform_display_ext = NULL;
518-
supports_egl_ext_platform_base = false;
519-
}
520-
#else
521-
UNREACHABLE();
522-
#endif
523-
}
524-
525-
// EGL_PLATFORM_GBM_KHR is defined by EGL_KHR_platform_gbm.
526-
#ifndef EGL_KHR_platform_gbm
527-
#error "EGL extension EGL_KHR_platform_gbm is required."
528-
#endif
529-
530505
egl_display = EGL_NO_DISPLAY;
531506
bool failed_before = false;
532507

@@ -574,7 +549,7 @@ struct gl_renderer *gl_renderer_new_surfaceless(
574549

575550
egl_ok = eglInitialize(egl_display, &major, &minor);
576551
if (egl_ok != EGL_TRUE) {
577-
LOG_EGL_ERROR(eglGetError(), "Failed to initialize EGL! eglInitialize:");
552+
LOG_EGL_ERROR(eglGetError(), "Failed to initialize EGL! eglInitialize");
578553
goto fail_free_renderer;
579554
}
580555

@@ -722,7 +697,7 @@ struct gl_renderer *gl_renderer_new_surfaceless(
722697
renderer->supports_egl_ext_platform_base = supports_egl_ext_platform_base;
723698
#ifdef EGL_EXT_platform_base
724699
renderer->egl_get_platform_display_ext = egl_get_platform_display_ext;
725-
renderer->egl_create_platform_window_surface_ext = egl_create_platform_window_surface_ext;
700+
renderer->egl_create_platform_window_surface_ext = NULL;
726701
#endif
727702
#ifdef EGL_VERSION_1_5
728703
renderer->egl_get_platform_display = egl_get_platform_display;
@@ -755,7 +730,6 @@ struct gl_renderer *gl_renderer_new_surfaceless(
755730
return NULL;
756731
}
757732

758-
759733
void gl_renderer_destroy(struct gl_renderer *renderer) {
760734
ASSERT_NOT_NULL(renderer);
761735
tracer_unref(renderer->tracer);

src/window.c

+34-18
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
#ifdef HAVE_EGL_GLES2
3535
#include "egl_gbm_render_surface.h"
36+
#include "egl_offscreen_render_surface.h"
3637
#include "gl_renderer.h"
3738
#endif
3839

@@ -943,9 +944,8 @@ MUST_CHECK struct window *kms_window_new(
943944
has_dimensions = true;
944945
width_mm = selected_connector->variable_state.width_mm;
945946
height_mm = selected_connector->variable_state.height_mm;
946-
} else if (selected_connector->type == DRM_MODE_CONNECTOR_DSI
947-
&& selected_connector->variable_state.width_mm == 0
948-
&& selected_connector->variable_state.height_mm == 0) {
947+
} else if (selected_connector->type == DRM_MODE_CONNECTOR_DSI && selected_connector->variable_state.width_mm == 0 &&
948+
selected_connector->variable_state.height_mm == 0) {
949949
// assume this is the official Raspberry Pi DSI display.
950950
has_dimensions = true;
951951
width_mm = 155;
@@ -1693,22 +1693,38 @@ static struct render_surface *dummy_window_get_render_surface_internal(struct wi
16931693
#ifndef EGL_KHR_no_config_context
16941694
#error "EGL header definitions for extension EGL_KHR_no_config_context are required."
16951695
#endif
1696-
1697-
struct egl_gbm_render_surface *egl_surface = egl_gbm_render_surface_new_with_egl_config(
1698-
window->tracer,
1699-
size,
1700-
gl_renderer_get_gbm_device(window->gl_renderer),
1701-
window->gl_renderer,
1702-
window->has_forced_pixel_format ? window->forced_pixel_format : PIXFMT_ARGB8888,
1703-
EGL_NO_CONFIG_KHR,
1704-
NULL,
1705-
0
1706-
);
1707-
if (egl_surface == NULL) {
1708-
LOG_ERROR("Couldn't create EGL GBM rendering surface.\n");
1709-
render_surface = NULL;
1696+
struct gbm_device *gbm_device = gl_renderer_get_gbm_device(window->gl_renderer);
1697+
1698+
if (gbm_device != NULL) {
1699+
struct egl_gbm_render_surface *egl_surface = egl_gbm_render_surface_new_with_egl_config(
1700+
window->tracer,
1701+
size,
1702+
gl_renderer_get_gbm_device(window->gl_renderer),
1703+
window->gl_renderer,
1704+
window->has_forced_pixel_format ? window->forced_pixel_format : PIXFMT_ARGB8888,
1705+
EGL_NO_CONFIG_KHR,
1706+
NULL,
1707+
0
1708+
);
1709+
if (egl_surface == NULL) {
1710+
LOG_ERROR("Couldn't create EGL GBM rendering surface.\n");
1711+
render_surface = NULL;
1712+
} else {
1713+
render_surface = CAST_RENDER_SURFACE(egl_surface);
1714+
}
17101715
} else {
1711-
render_surface = CAST_RENDER_SURFACE(egl_surface);
1716+
struct egl_offscreen_render_surface *egl_surface = egl_offscreen_render_surface_new(
1717+
window->tracer,
1718+
size,
1719+
window->gl_renderer,
1720+
window->has_forced_pixel_format ? window->forced_pixel_format : PIXFMT_ARGB8888
1721+
);
1722+
if (egl_surface == NULL) {
1723+
LOG_ERROR("Couldn't create EGL offscreen rendering surface.\n");
1724+
render_surface = NULL;
1725+
} else {
1726+
render_surface = CAST_RENDER_SURFACE(egl_surface);
1727+
}
17121728
}
17131729

17141730
#else

0 commit comments

Comments
 (0)