[Mesa-dev] [PATCH 4/5] gallium/radeon: pass create_screen flags to r600_common_screen_init

Marek Olšák maraeo at gmail.com
Tue Jun 20 22:54:40 UTC 2017


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/auxiliary/target-helpers/drm_helper.h | 8 ++++----
 src/gallium/drivers/r300/r300_public.h            | 2 +-
 src/gallium/drivers/r300/r300_screen.c            | 2 +-
 src/gallium/drivers/r600/r600_pipe.c              | 4 ++--
 src/gallium/drivers/r600/r600_public.h            | 2 +-
 src/gallium/drivers/radeon/r600_pipe_common.c     | 2 +-
 src/gallium/drivers/radeon/r600_pipe_common.h     | 2 +-
 src/gallium/drivers/radeonsi/si_pipe.c            | 5 +++--
 src/gallium/drivers/radeonsi/si_public.h          | 3 ++-
 src/gallium/targets/pipe-loader/pipe_r300.c       | 2 +-
 src/gallium/targets/pipe-loader/pipe_r600.c       | 2 +-
 src/gallium/targets/pipe-loader/pipe_radeonsi.c   | 4 ++--
 src/gallium/winsys/amdgpu/drm/amdgpu_public.h     | 6 ++++--
 src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c     | 5 +++--
 src/gallium/winsys/radeon/drm/radeon_drm_public.h | 6 ++++--
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 5 +++--
 16 files changed, 34 insertions(+), 26 deletions(-)

diff --git a/src/gallium/auxiliary/target-helpers/drm_helper.h b/src/gallium/auxiliary/target-helpers/drm_helper.h
index 65231cf..0027ede 100644
--- a/src/gallium/auxiliary/target-helpers/drm_helper.h
+++ b/src/gallium/auxiliary/target-helpers/drm_helper.h
@@ -83,21 +83,21 @@ pipe_pl111_create_screen(int fd, unsigned flags)
 #ifdef GALLIUM_R300
 #include "radeon/radeon_winsys.h"
 #include "radeon/drm/radeon_drm_public.h"
 #include "r300/r300_public.h"
 
 struct pipe_screen *
 pipe_r300_create_screen(int fd, unsigned flags)
 {
    struct radeon_winsys *rw;
 
-   rw = radeon_drm_winsys_create(fd, r300_screen_create);
+   rw = radeon_drm_winsys_create(fd, flags, r300_screen_create);
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
 #else
 
 struct pipe_screen *
 pipe_r300_create_screen(int fd, unsigned flags)
 {
    fprintf(stderr, "r300: driver missing\n");
    return NULL;
@@ -108,21 +108,21 @@ pipe_r300_create_screen(int fd, unsigned flags)
 #ifdef GALLIUM_R600
 #include "radeon/radeon_winsys.h"
 #include "radeon/drm/radeon_drm_public.h"
 #include "r600/r600_public.h"
 
 struct pipe_screen *
 pipe_r600_create_screen(int fd, unsigned flags)
 {
    struct radeon_winsys *rw;
 
-   rw = radeon_drm_winsys_create(fd, r600_screen_create);
+   rw = radeon_drm_winsys_create(fd, flags, r600_screen_create);
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
 #else
 
 struct pipe_screen *
 pipe_r600_create_screen(int fd, unsigned flags)
 {
    fprintf(stderr, "r600: driver missing\n");
    return NULL;
@@ -135,24 +135,24 @@ pipe_r600_create_screen(int fd, unsigned flags)
 #include "radeon/drm/radeon_drm_public.h"
 #include "amdgpu/drm/amdgpu_public.h"
 #include "radeonsi/si_public.h"
 
 struct pipe_screen *
 pipe_radeonsi_create_screen(int fd, unsigned flags)
 {
    struct radeon_winsys *rw;
 
    /* First, try amdgpu. */
-   rw = amdgpu_winsys_create(fd, radeonsi_screen_create);
+   rw = amdgpu_winsys_create(fd, flags, radeonsi_screen_create);
 
    if (!rw)
-      rw = radeon_drm_winsys_create(fd, radeonsi_screen_create);
+      rw = radeon_drm_winsys_create(fd, flags, radeonsi_screen_create);
 
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
 #else
 
 struct pipe_screen *
 pipe_radeonsi_create_screen(int fd, unsigned flags)
 {
    fprintf(stderr, "radeonsi: driver missing\n");
diff --git a/src/gallium/drivers/r300/r300_public.h b/src/gallium/drivers/r300/r300_public.h
index 57a69cb..d230010 100644
--- a/src/gallium/drivers/r300/r300_public.h
+++ b/src/gallium/drivers/r300/r300_public.h
@@ -1,17 +1,17 @@
 
 #ifndef R300_PUBLIC_H
 #define R300_PUBLIC_H
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 struct radeon_winsys;
 
-struct pipe_screen* r300_screen_create(struct radeon_winsys *rws);
+struct pipe_screen* r300_screen_create(struct radeon_winsys *rws, unsigned flags);
 
 #ifdef __cplusplus
 } // extern "C"
 #endif
 
 #endif
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
index 937f9ae..5cdb248 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -717,21 +717,21 @@ static void r300_fence_reference(struct pipe_screen *screen,
 static boolean r300_fence_finish(struct pipe_screen *screen,
                                  struct pipe_context *ctx,
                                  struct pipe_fence_handle *fence,
                                  uint64_t timeout)
 {
     struct radeon_winsys *rws = r300_screen(screen)->rws;
 
     return rws->fence_wait(rws, fence, timeout);
 }
 
-struct pipe_screen* r300_screen_create(struct radeon_winsys *rws)
+struct pipe_screen* r300_screen_create(struct radeon_winsys *rws, unsigned flags)
 {
     struct r300_screen *r300screen = CALLOC_STRUCT(r300_screen);
 
     if (!r300screen) {
         FREE(r300screen);
         return NULL;
     }
 
     rws->query_info(rws, &r300screen->info);
 
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
index a225f41..f0ea409 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -625,36 +625,36 @@ static void r600_destroy_screen(struct pipe_screen* pscreen)
 static struct pipe_resource *r600_resource_create(struct pipe_screen *screen,
 						  const struct pipe_resource *templ)
 {
 	if (templ->target == PIPE_BUFFER &&
 	    (templ->bind & PIPE_BIND_GLOBAL))
 		return r600_compute_global_buffer_create(screen, templ);
 
 	return r600_resource_create_common(screen, templ);
 }
 
-struct pipe_screen *r600_screen_create(struct radeon_winsys *ws)
+struct pipe_screen *r600_screen_create(struct radeon_winsys *ws, unsigned flags)
 {
 	struct r600_screen *rscreen = CALLOC_STRUCT(r600_screen);
 
 	if (!rscreen) {
 		return NULL;
 	}
 
 	/* Set functions first. */
 	rscreen->b.b.context_create = r600_create_context;
 	rscreen->b.b.destroy = r600_destroy_screen;
 	rscreen->b.b.get_param = r600_get_param;
 	rscreen->b.b.get_shader_param = r600_get_shader_param;
 	rscreen->b.b.resource_create = r600_resource_create;
 
-	if (!r600_common_screen_init(&rscreen->b, ws)) {
+	if (!r600_common_screen_init(&rscreen->b, ws, flags)) {
 		FREE(rscreen);
 		return NULL;
 	}
 
 	if (rscreen->b.info.chip_class >= EVERGREEN) {
 		rscreen->b.b.is_format_supported = evergreen_is_format_supported;
 	} else {
 		rscreen->b.b.is_format_supported = r600_is_format_supported;
 	}
 
diff --git a/src/gallium/drivers/r600/r600_public.h b/src/gallium/drivers/r600/r600_public.h
index e4fe23a..2018440 100644
--- a/src/gallium/drivers/r600/r600_public.h
+++ b/src/gallium/drivers/r600/r600_public.h
@@ -18,13 +18,13 @@
  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #ifndef R600_PUBLIC_H
 #define R600_PUBLIC_H
 
 struct radeon_winsys;
 
-struct pipe_screen *r600_screen_create(struct radeon_winsys *ws);
+struct pipe_screen *r600_screen_create(struct radeon_winsys *ws, unsigned flags);
 
 #endif
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
index 1cec6d5..04f7fc1 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -1315,21 +1315,21 @@ struct pipe_resource *r600_resource_create_common(struct pipe_screen *screen,
 						  const struct pipe_resource *templ)
 {
 	if (templ->target == PIPE_BUFFER) {
 		return r600_buffer_create(screen, templ, 256);
 	} else {
 		return r600_texture_create(screen, templ);
 	}
 }
 
 bool r600_common_screen_init(struct r600_common_screen *rscreen,
-			     struct radeon_winsys *ws)
+			     struct radeon_winsys *ws, unsigned flags)
 {
 	char family_name[32] = {}, llvm_string[32] = {}, kernel_version[128] = {};
 	struct utsname uname_data;
 	const char *chip_name;
 
 	ws->query_info(ws, &rscreen->info);
 	rscreen->ws = ws;
 
 	if ((chip_name = r600_get_marketing_name(ws)))
 		snprintf(family_name, sizeof(family_name), "%s / ", r600_get_family_name(rscreen));
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
index 310fb57..e67982a 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -738,21 +738,21 @@ void r600_gfx_write_event_eop(struct r600_common_context *ctx,
 			      struct r600_resource *buf, uint64_t va,
 			      uint32_t old_fence, uint32_t new_fence);
 unsigned r600_gfx_write_fence_dwords(struct r600_common_screen *screen);
 void r600_gfx_wait_fence(struct r600_common_context *ctx,
 			 uint64_t va, uint32_t ref, uint32_t mask);
 void r600_draw_rectangle(struct blitter_context *blitter,
 			 int x1, int y1, int x2, int y2, float depth,
 			 enum blitter_attrib_type type,
 			 const union pipe_color_union *attrib);
 bool r600_common_screen_init(struct r600_common_screen *rscreen,
-			     struct radeon_winsys *ws);
+			     struct radeon_winsys *ws, unsigned flags);
 void r600_destroy_common_screen(struct r600_common_screen *rscreen);
 void r600_preflush_suspend_features(struct r600_common_context *ctx);
 void r600_postflush_resume_features(struct r600_common_context *ctx);
 bool r600_common_context_init(struct r600_common_context *rctx,
 			      struct r600_common_screen *rscreen,
 			      unsigned context_flags);
 void r600_common_context_cleanup(struct r600_common_context *rctx);
 bool r600_can_dump_shader(struct r600_common_screen *rscreen,
 			  unsigned processor);
 bool r600_extra_shader_checks(struct r600_common_screen *rscreen,
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 74ac0ec..ff787ad 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -909,39 +909,40 @@ static void si_test_vmfault(struct si_screen *sscreen)
 		ctx->flush(ctx, NULL, 0);
 		puts("VM fault test: SDMA - done.");
 	}
 	if (sscreen->b.debug_flags & DBG_TEST_VMFAULT_SHADER) {
 		util_test_constant_buffer(ctx, buf);
 		puts("VM fault test: Shader - done.");
 	}
 	exit(0);
 }
 
-struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
+struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
+					   unsigned flags)
 {
 	struct si_screen *sscreen = CALLOC_STRUCT(si_screen);
 	unsigned num_threads, num_compiler_threads, num_compiler_threads_lowprio, i;
 
 	if (!sscreen) {
 		return NULL;
 	}
 
 	/* Set functions first. */
 	sscreen->b.b.context_create = si_pipe_create_context;
 	sscreen->b.b.destroy = si_destroy_screen;
 	sscreen->b.b.get_param = si_get_param;
 	sscreen->b.b.get_shader_param = si_get_shader_param;
 	sscreen->b.b.resource_create = r600_resource_create_common;
 
 	si_init_screen_state_functions(sscreen);
 
-	if (!r600_common_screen_init(&sscreen->b, ws) ||
+	if (!r600_common_screen_init(&sscreen->b, ws, flags) ||
 	    !si_init_gs_info(sscreen) ||
 	    !si_init_shader_cache(sscreen)) {
 		FREE(sscreen);
 		return NULL;
 	}
 
 	/* Only enable as many threads as we have target machines, but at most
 	 * the number of CPUs - 1 if there is more than one.
 	 */
 	num_threads = sysconf(_SC_NPROCESSORS_ONLN);
diff --git a/src/gallium/drivers/radeonsi/si_public.h b/src/gallium/drivers/radeonsi/si_public.h
index 7cf36c8..13b1731 100644
--- a/src/gallium/drivers/radeonsi/si_public.h
+++ b/src/gallium/drivers/radeonsi/si_public.h
@@ -18,13 +18,14 @@
  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #ifndef SI_PUBLIC_H
 #define SI_PUBLIC_H
 
 struct radeon_winsys;
 
-struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws);
+struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
+					   unsigned flags);
 
 #endif
diff --git a/src/gallium/targets/pipe-loader/pipe_r300.c b/src/gallium/targets/pipe-loader/pipe_r300.c
index ffd6ba8..da72859 100644
--- a/src/gallium/targets/pipe-loader/pipe_r300.c
+++ b/src/gallium/targets/pipe-loader/pipe_r300.c
@@ -2,21 +2,21 @@
 #include "state_tracker/drm_driver.h"
 #include "radeon/drm/radeon_drm_public.h"
 #include "radeon/radeon_winsys.h"
 #include "r300/r300_public.h"
 
 static struct pipe_screen *
 create_screen(int fd, unsigned flags)
 {
    struct radeon_winsys *sws;
 
-   sws = radeon_drm_winsys_create(fd, r300_screen_create);
+   sws = radeon_drm_winsys_create(fd, flags, r300_screen_create);
    return sws ? debug_screen_wrap(sws->screen) : NULL;
 }
 
 static const struct drm_conf_ret throttle_ret = {
    .type = DRM_CONF_INT,
    .val.val_int = 2,
 };
 
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
diff --git a/src/gallium/targets/pipe-loader/pipe_r600.c b/src/gallium/targets/pipe-loader/pipe_r600.c
index 6f21c50..dfe130a 100644
--- a/src/gallium/targets/pipe-loader/pipe_r600.c
+++ b/src/gallium/targets/pipe-loader/pipe_r600.c
@@ -2,21 +2,21 @@
 #include "target-helpers/inline_debug_helper.h"
 #include "radeon/drm/radeon_drm_public.h"
 #include "radeon/radeon_winsys.h"
 #include "r600/r600_public.h"
 
 static struct pipe_screen *
 create_screen(int fd, unsigned flags)
 {
    struct radeon_winsys *rw;
 
-   rw = radeon_drm_winsys_create(fd, r600_screen_create);
+   rw = radeon_drm_winsys_create(fd, flags, r600_screen_create);
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
 static const struct drm_conf_ret throttle_ret = {
    .type = DRM_CONF_INT,
    .val.val_int = 2,
 };
 
 static const struct drm_conf_ret share_fd_ret = {
    .type = DRM_CONF_BOOL,
diff --git a/src/gallium/targets/pipe-loader/pipe_radeonsi.c b/src/gallium/targets/pipe-loader/pipe_radeonsi.c
index b6a78e4..1bbd97f 100644
--- a/src/gallium/targets/pipe-loader/pipe_radeonsi.c
+++ b/src/gallium/targets/pipe-loader/pipe_radeonsi.c
@@ -4,24 +4,24 @@
 #include "radeon/radeon_winsys.h"
 #include "amdgpu/drm/amdgpu_public.h"
 #include "radeonsi/si_public.h"
 
 static struct pipe_screen *
 create_screen(int fd, unsigned flags)
 {
    struct radeon_winsys *rw;
 
    /* First, try amdgpu. */
-   rw = amdgpu_winsys_create(fd, radeonsi_screen_create);
+   rw = amdgpu_winsys_create(fd, flags, radeonsi_screen_create);
 
    if (!rw)
-      rw = radeon_drm_winsys_create(fd, radeonsi_screen_create);
+      rw = radeon_drm_winsys_create(fd, flags, radeonsi_screen_create);
 
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
 static const struct drm_conf_ret throttle_ret = {
    .type = DRM_CONF_INT,
    .val.val_int = 2,
 };
 
 static const struct drm_conf_ret share_fd_ret = {
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_public.h b/src/gallium/winsys/amdgpu/drm/amdgpu_public.h
index ad133b2..3cb5a1b 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_public.h
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_public.h
@@ -25,16 +25,18 @@
  */
 
 #ifndef AMDGPU_PUBLIC_H
 #define AMDGPU_PUBLIC_H
 
 #include "pipe/p_defines.h"
 
 struct radeon_winsys;
 struct pipe_screen;
 
-typedef struct pipe_screen *(*radeon_screen_create_t)(struct radeon_winsys *);
+typedef struct pipe_screen *(*radeon_screen_create_t)(struct radeon_winsys *,
+						      unsigned);
 
 struct radeon_winsys *
-amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create);
+amdgpu_winsys_create(int fd, unsigned flags,
+		     radeon_screen_create_t screen_create);
 
 #endif
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
index 2cbc39c..c4d5216 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
@@ -222,21 +222,22 @@ static bool amdgpu_winsys_unref(struct radeon_winsys *rws)
 }
 
 static const char* amdgpu_get_chip_name(struct radeon_winsys *ws)
 {
    amdgpu_device_handle dev = ((struct amdgpu_winsys *)ws)->dev;
    return amdgpu_get_marketing_name(dev);
 }
 
 
 PUBLIC struct radeon_winsys *
-amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create)
+amdgpu_winsys_create(int fd, unsigned flags,
+		     radeon_screen_create_t screen_create)
 {
    struct amdgpu_winsys *ws;
    drmVersionPtr version = drmGetVersion(fd);
    amdgpu_device_handle dev;
    uint32_t drm_major, drm_minor, r;
 
    /* The DRM driver version of amdgpu is 3.x.x. */
    if (version->version_major != 3) {
       drmFreeVersion(version);
       return NULL;
@@ -317,21 +318,21 @@ amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create)
       amdgpu_winsys_destroy(&ws->base);
       mtx_unlock(&dev_tab_mutex);
       return NULL;
    }
 
    /* Create the screen at the end. The winsys must be initialized
     * completely.
     *
     * Alternatively, we could create the screen based on "ws->gen"
     * and link all drivers into one binary blob. */
-   ws->base.screen = screen_create(&ws->base);
+   ws->base.screen = screen_create(&ws->base, flags);
    if (!ws->base.screen) {
       amdgpu_winsys_destroy(&ws->base);
       mtx_unlock(&dev_tab_mutex);
       return NULL;
    }
 
    util_hash_table_set(dev_tab, dev, ws);
 
    /* We must unlock the mutex once the winsys is fully initialized, so that
     * other threads attempting to create the winsys from the same fd will
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_public.h b/src/gallium/winsys/radeon/drm/radeon_drm_public.h
index dfcaaa4..2192aa6 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_public.h
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_public.h
@@ -1,14 +1,16 @@
 #ifndef RADEON_DRM_PUBLIC_H
 #define RADEON_DRM_PUBLIC_H
 
 #include "pipe/p_defines.h"
 
 struct radeon_winsys;
 struct pipe_screen;
 
-typedef struct pipe_screen *(*radeon_screen_create_t)(struct radeon_winsys *);
+typedef struct pipe_screen *(*radeon_screen_create_t)(struct radeon_winsys *,
+						      unsigned);
 
 struct radeon_winsys *
-radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create);
+radeon_drm_winsys_create(int fd, unsigned flags,
+			 radeon_screen_create_t screen_create);
 
 #endif
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
index e0d4cc8..2a6ce2c 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
@@ -728,21 +728,22 @@ static unsigned handle_hash(void *key)
 {
     return PTR_TO_UINT(key);
 }
 
 static int handle_compare(void *key1, void *key2)
 {
     return PTR_TO_UINT(key1) != PTR_TO_UINT(key2);
 }
 
 PUBLIC struct radeon_winsys *
-radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
+radeon_drm_winsys_create(int fd, unsigned flags,
+			 radeon_screen_create_t screen_create)
 {
     struct radeon_drm_winsys *ws;
 
     mtx_lock(&fd_tab_mutex);
     if (!fd_tab) {
         fd_tab = util_hash_table_create(hash_fd, compare_fd);
     }
 
     ws = util_hash_table_get(fd_tab, intptr_to_pointer(fd));
     if (ws) {
@@ -823,21 +824,21 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
     ws->info.gart_page_size = sysconf(_SC_PAGESIZE);
 
     if (ws->num_cpus > 1 && debug_get_option_thread())
         util_queue_init(&ws->cs_queue, "radeon_cs", 8, 1, 0);
 
     /* Create the screen at the end. The winsys must be initialized
      * completely.
      *
      * Alternatively, we could create the screen based on "ws->gen"
      * and link all drivers into one binary blob. */
-    ws->base.screen = screen_create(&ws->base);
+    ws->base.screen = screen_create(&ws->base, flags);
     if (!ws->base.screen) {
         radeon_winsys_destroy(&ws->base);
         mtx_unlock(&fd_tab_mutex);
         return NULL;
     }
 
     util_hash_table_set(fd_tab, intptr_to_pointer(ws->fd), ws);
 
     /* We must unlock the mutex once the winsys is fully initialized, so that
      * other threads attempting to create the winsys from the same fd will
-- 
2.7.4



More information about the mesa-dev mailing list