diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 843443bfb01..cff8774eed0 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -1167,7 +1167,7 @@ struct pipe_resource *r300_texture_from_handle(struct pipe_screen *screen, return NULL; } - buffer = rws->buffer_from_handle(rws, whandle, 0); + buffer = rws->buffer_from_handle(rws, whandle, 0, false); if (!buffer) return NULL; diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index 0c34a8db4e0..2be8c90ebda 100644 --- a/src/gallium/drivers/r600/r600_texture.c +++ b/src/gallium/drivers/r600/r600_texture.c @@ -1124,7 +1124,7 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen return NULL; buf = rscreen->ws->buffer_from_handle(rscreen->ws, whandle, - rscreen->info.max_alignment); + rscreen->info.max_alignment, false); if (!buf) return NULL; @@ -1844,7 +1844,7 @@ r600_memobj_from_handle(struct pipe_screen *screen, return NULL; buf = rscreen->ws->buffer_from_handle(rscreen->ws, whandle, - rscreen->info.max_alignment); + rscreen->info.max_alignment, false); if (!buf) { free(memobj); return NULL; diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h index 7b2ef80f5a2..7555f35b7ac 100644 --- a/src/gallium/drivers/radeon/radeon_winsys.h +++ b/src/gallium/drivers/radeon/radeon_winsys.h @@ -383,7 +383,7 @@ struct radeon_winsys { * tracker. */ struct pb_buffer *(*buffer_from_handle)(struct radeon_winsys *ws, struct winsys_handle *whandle, - unsigned vm_alignment); + unsigned vm_alignment, bool is_prime_linear_buffer); /** * Get a winsys buffer from a user pointer. The resulting buffer can't diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index 35a74509a22..06b14129e3b 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -1579,7 +1579,9 @@ static struct pipe_resource *si_texture_from_handle(struct pipe_screen *screen, templ->last_level != 0) return NULL; - buf = sscreen->ws->buffer_from_handle(sscreen->ws, whandle, sscreen->info.max_alignment); + buf = sscreen->ws->buffer_from_handle(sscreen->ws, whandle, + sscreen->info.max_alignment, + templ->bind & PIPE_BIND_DRI_PRIME); if (!buf) return NULL; @@ -2127,7 +2129,7 @@ si_memobj_from_handle(struct pipe_screen *screen, struct winsys_handle *whandle, if (!memobj) return NULL; - buf = sscreen->ws->buffer_from_handle(sscreen->ws, whandle, sscreen->info.max_alignment); + buf = sscreen->ws->buffer_from_handle(sscreen->ws, whandle, sscreen->info.max_alignment, false); if (!buf) { free(memobj); return NULL; diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index d2c1f3514c1..e1b14b71060 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -1494,7 +1494,8 @@ amdgpu_buffer_create(struct radeon_winsys *ws, static struct pb_buffer *amdgpu_bo_from_handle(struct radeon_winsys *rws, struct winsys_handle *whandle, - unsigned vm_alignment) + unsigned vm_alignment, + bool is_prime_linear_buffer) { struct amdgpu_winsys *ws = amdgpu_winsys(rws); struct amdgpu_winsys_bo *bo = NULL; diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c index 6c424a71380..a2ff20e3c7d 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c @@ -1185,7 +1185,8 @@ static struct pb_buffer *radeon_winsys_bo_from_ptr(struct radeon_winsys *rws, static struct pb_buffer *radeon_winsys_bo_from_handle(struct radeon_winsys *rws, struct winsys_handle *whandle, - unsigned vm_alignment) + unsigned vm_alignment, + bool is_dri_prime_linear_buffer) { struct radeon_drm_winsys *ws = radeon_drm_winsys(rws); struct radeon_bo *bo;