From 8c8b5a8fbd96a7ee9e847c649f749c2fe7d16135 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 29 Apr 2023 04:50:31 -0400 Subject: [PATCH] radeon: add radeon_info parameter into radeon_winsys::surface_init to allow radeonsi to change radeon_info. The next commit will rely on it. Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/r600/r600_texture.c | 4 ++-- src/gallium/drivers/radeonsi/si_texture.c | 3 ++- src/gallium/include/winsys/radeon_winsys.h | 4 +++- src/gallium/winsys/amdgpu/drm/amdgpu_surface.c | 4 +++- src/gallium/winsys/radeon/drm/radeon_drm_surface.c | 3 ++- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index d48b631..662ffe7 100644 --- a/src/gallium/drivers/r600/r600_texture.c +++ b/src/gallium/drivers/r600/r600_texture.c @@ -244,7 +244,7 @@ static int r600_init_surface(struct r600_common_screen *rscreen, if (is_imported) flags |= RADEON_SURF_IMPORTED | RADEON_SURF_SHAREABLE; - r = rscreen->ws->surface_init(rscreen->ws, ptex, + r = rscreen->ws->surface_init(rscreen->ws, &rscreen->info, ptex, flags, bpe, array_mode, surface); if (r) { return r; @@ -634,7 +634,7 @@ void r600_texture_get_fmask_info(struct r600_common_screen *rscreen, bpe *= 2; } - if (rscreen->ws->surface_init(rscreen->ws, &templ, + if (rscreen->ws->surface_init(rscreen->ws, &rscreen->info, &templ, flags, bpe, RADEON_SURF_MODE_2D, &fmask)) { R600_ERR("Got error in surface_init while allocating FMASK.\n"); return; diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index b37b3c5..cd00c3f 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -313,7 +313,8 @@ static int si_init_surface(struct si_screen *sscreen, struct radeon_surf *surfac surface->modifier = modifier; - r = sscreen->ws->surface_init(sscreen->ws, ptex, flags, bpe, array_mode, surface); + r = sscreen->ws->surface_init(sscreen->ws, &sscreen->info, ptex, flags, bpe, array_mode, + surface); if (r) { return r; } diff --git a/src/gallium/include/winsys/radeon_winsys.h b/src/gallium/include/winsys/radeon_winsys.h index 6e9b01f..0a658d6 100644 --- a/src/gallium/include/winsys/radeon_winsys.h +++ b/src/gallium/include/winsys/radeon_winsys.h @@ -728,13 +728,15 @@ struct radeon_winsys { * Initialize surface * * \param ws The winsys this function is called from. + * \param info radeon_info from the driver * \param tex Input texture description * \param flags Bitmask of RADEON_SURF_* flags * \param bpe Bytes per pixel, it can be different for Z buffers. * \param mode Preferred tile mode. (linear, 1D, or 2D) * \param surf Output structure */ - int (*surface_init)(struct radeon_winsys *ws, const struct pipe_resource *tex, uint64_t flags, + int (*surface_init)(struct radeon_winsys *ws, const struct radeon_info *info, + const struct pipe_resource *tex, uint64_t flags, unsigned bpe, enum radeon_surf_mode mode, struct radeon_surf *surf); uint64_t (*query_value)(struct radeon_winsys *ws, enum radeon_value_id value); diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c index 533df39..100248a 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c @@ -61,6 +61,7 @@ static int amdgpu_surface_sanity(const struct pipe_resource *tex) } static int amdgpu_surface_init(struct radeon_winsys *rws, + const struct radeon_info *info, const struct pipe_resource *tex, uint64_t flags, unsigned bpe, enum radeon_surf_mode mode, @@ -103,7 +104,8 @@ static int amdgpu_surface_init(struct radeon_winsys *rws, if (flags & RADEON_SURF_Z_OR_SBUFFER) config.info.surf_index = NULL; - return ac_compute_surface(ws->addrlib, &ws->info, &config, mode, surf); + /* Use radeon_info from the driver, not the winsys. The driver is allowed to change it. */ + return ac_compute_surface(ws->addrlib, info, &config, mode, surf); } void amdgpu_surface_init_functions(struct amdgpu_screen_winsys *ws) diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_surface.c b/src/gallium/winsys/radeon/drm/radeon_drm_surface.c index af9b25d..e06a4a4 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_surface.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_surface.c @@ -343,6 +343,7 @@ static void si_compute_htile(const struct radeon_info *info, } static int radeon_winsys_surface_init(struct radeon_winsys *rws, + const struct radeon_info *info, const struct pipe_resource *tex, uint64_t flags, unsigned bpe, enum radeon_surf_mode mode, @@ -391,7 +392,7 @@ static int radeon_winsys_surface_init(struct radeon_winsys *rws, return -1; } - if (radeon_winsys_surface_init(rws, &templ, fmask_flags, bpe, + if (radeon_winsys_surface_init(rws, info, &templ, fmask_flags, bpe, RADEON_SURF_MODE_2D, &fmask)) { fprintf(stderr, "Got error in surface_init while allocating FMASK.\n"); return -1; -- 2.7.4