vtest: move ctx_flags into vtest_server

In preparation for multi-client support.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-By: Gert Wollny <gert.wollny@collabora.com>
Reviewed-By: Gurchetan Singh <gurchetansingh@chromium.org>
macos/master
Chia-I Wu 5 years ago
parent 5670ebd0ec
commit 3b8bf6b3eb
  1. 48
      vtest/vtest_server.c

@ -67,6 +67,8 @@ struct vtest_server
bool use_egl_surfaceless; bool use_egl_surfaceless;
bool use_gles; bool use_gles;
int ctx_flags;
struct vtest_client client; struct vtest_client client;
}; };
@ -80,6 +82,8 @@ struct vtest_server server = {
.do_fork = true, .do_fork = true,
.loop = true, .loop = true,
.ctx_flags = 0,
.client = { .client = {
.in_fd = -1, .in_fd = -1,
.out_fd = -1, .out_fd = -1,
@ -94,9 +98,7 @@ static void vtest_server_set_signal_child(void);
static void vtest_server_set_signal_segv(void); static void vtest_server_set_signal_segv(void);
static void vtest_server_open_read_file(void); static void vtest_server_open_read_file(void);
static void vtest_server_open_socket(void); static void vtest_server_open_socket(void);
static void vtest_server_run_renderer(struct vtest_client *client, static void vtest_server_run_renderer(struct vtest_client *client);
int ctx_flags,
const char *render_device);
static void vtest_server_wait_for_socket_accept(void); static void vtest_server_wait_for_socket_accept(void);
static void vtest_server_tidy_fds(void); static void vtest_server_tidy_fds(void);
static void vtest_server_close_socket(void); static void vtest_server_close_socket(void);
@ -111,20 +113,6 @@ while (__AFL_LOOP(1000)) {
vtest_server_getenv(); vtest_server_getenv();
vtest_server_parse_args(argc, argv); vtest_server_parse_args(argc, argv);
int ctx_flags = VIRGL_RENDERER_USE_EGL;
if (server.use_glx) {
if (server.use_egl_surfaceless || server.use_gles) {
fprintf(stderr, "Cannot use surfaceless or GLES with GLX.\n");
exit(EXIT_FAILURE);
}
ctx_flags = VIRGL_RENDERER_USE_GLX;
} else {
if (server.use_egl_surfaceless)
ctx_flags |= VIRGL_RENDERER_USE_SURFACELESS;
if (server.use_gles)
ctx_flags |= VIRGL_RENDERER_USE_GLES;
}
if (server.read_file != NULL) { if (server.read_file != NULL) {
vtest_server_open_read_file(); vtest_server_open_read_file();
goto start; goto start;
@ -143,14 +131,12 @@ start:
/* fork a renderer process */ /* fork a renderer process */
if (fork() == 0) { if (fork() == 0) {
vtest_server_set_signal_segv(); vtest_server_set_signal_segv();
vtest_server_run_renderer(&server.client, ctx_flags, vtest_server_run_renderer(&server.client);
server.render_device);
exit(0); exit(0);
} }
} else { } else {
vtest_server_set_signal_segv(); vtest_server_set_signal_segv();
vtest_server_run_renderer(&server.client, ctx_flags, vtest_server_run_renderer(&server.client);
server.render_device);
} }
vtest_server_tidy_fds(); vtest_server_tidy_fds();
@ -230,6 +216,20 @@ static void vtest_server_parse_args(int argc, char **argv)
server.loop = false; server.loop = false;
server.do_fork = false; server.do_fork = false;
} }
server.ctx_flags = VIRGL_RENDERER_USE_EGL;
if (server.use_glx) {
if (server.use_egl_surfaceless || server.use_gles) {
fprintf(stderr, "Cannot use surfaceless or GLES with GLX.\n");
exit(EXIT_FAILURE);
}
server.ctx_flags = VIRGL_RENDERER_USE_GLX;
} else {
if (server.use_egl_surfaceless)
server.ctx_flags |= VIRGL_RENDERER_USE_SURFACELESS;
if (server.use_gles)
server.ctx_flags |= VIRGL_RENDERER_USE_GLES;
}
} }
static void vtest_server_getenv(void) static void vtest_server_getenv(void)
@ -387,9 +387,7 @@ static const vtest_cmd_fptr_t vtest_commands[] = {
vtest_transfer_put2, vtest_transfer_put2,
}; };
static void vtest_server_run_renderer(struct vtest_client *client, static void vtest_server_run_renderer(struct vtest_client *client)
int ctx_flags,
const char *render_device)
{ {
int err, ret; int err, ret;
uint32_t header[VTEST_HDR_SIZE]; uint32_t header[VTEST_HDR_SIZE];
@ -414,7 +412,7 @@ static void vtest_server_run_renderer(struct vtest_client *client,
break; break;
} }
ret = vtest_init_renderer(ctx_flags, render_device); ret = vtest_init_renderer(server.ctx_flags, server.render_device);
if (ret >= 0) { if (ret >= 0) {
ret = vtest_create_context(&client->input, client->out_fd, ret = vtest_create_context(&client->input, client->out_fd,
header[0], &client->context); header[0], &client->context);

Loading…
Cancel
Save