gallium: Correctly handle no config context creation
authorElie Tournier <tournier.elie@gmail.com>
Thu, 6 Sep 2018 09:46:32 +0000 (10:46 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 10 Sep 2018 19:30:17 +0000 (15:30 -0400)
This patch fixes the following Piglit test:
spec@egl_mesa_configless_context@basic
It also fixes few test in a virgl guest.

v2: Evaluate the value of no_config (Ilia)

Suggested-by: Emil Velikov <emil.velikov@collabora.com>
Signed-off-by: Elie Tournier <elie.tournier@collabora.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/include/state_tracker/st_api.h
src/gallium/state_trackers/dri/dri_screen.c
src/mesa/state_tracker/st_manager.c

index 61152e3546860930fa66fe0a8c37c265108f0953..2b63b8a3d2a927f373be86abc8f584057c1757e1 100644 (file)
@@ -190,6 +190,8 @@ struct st_egl_image
  */
 struct st_visual
 {
+   bool no_config;
+
    /**
     * Available buffers.  Bitfield of ST_ATTACHMENT_*_MASK bits.
     */
index 027e85024f02704b794eb53cb6e24a98b90783dd..308e23685e80caf1d63332fd88e334ae97d1b2c3 100644 (file)
@@ -308,8 +308,10 @@ dri_fill_st_visual(struct st_visual *stvis,
 {
    memset(stvis, 0, sizeof(*stvis));
 
-   if (!mode)
+   if (!mode) {
+      stvis->no_config = true;
       return;
+   }
 
    /* Deduce the color format. */
    switch (mode->redMask) {
index a3f002289420b8aa0ff54dacdc4256ee72b13184..400af939b292828a005cb939ca015e365371dc8e 100644 (file)
@@ -835,6 +835,7 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
    struct st_context *shared_ctx = (struct st_context *) shared_stctxi;
    struct st_context *st;
    struct pipe_context *pipe;
+   struct gl_config* mode_ptr;
    struct gl_config mode;
    gl_api api;
    bool no_error = false;
@@ -894,7 +895,13 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
    }
 
    st_visual_to_context_mode(&attribs->visual, &mode);
-   st = st_create_context(api, pipe, &mode, shared_ctx,
+
+   if (attribs->visual.no_config)
+      mode_ptr = NULL;
+   else
+      mode_ptr = &mode;
+
+   st = st_create_context(api, pipe, mode_ptr, shared_ctx,
                           &attribs->options, no_error);
    if (!st) {
       *error = ST_CONTEXT_ERROR_NO_MEMORY;