summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2023-04-29 04:50:31 -0400
committerMarge Bot <emma+marge@anholt.net>2023-05-08 13:08:01 +0000
commit8c8b5a8fbd96a7ee9e847c649f749c2fe7d16135 (patch)
tree1c51c7febfc492bb3cbaf10f2d643a7dbfb9cd99
parentae6b9284951064f81a7e9343fbfa731f643121a1 (diff)
downloadmesa-8c8b5a8fbd96a7ee9e847c649f749c2fe7d16135.tar.gz
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 <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22771>
-rw-r--r--src/gallium/drivers/r600/r600_texture.c4
-rw-r--r--src/gallium/drivers/radeonsi/si_texture.c3
-rw-r--r--src/gallium/include/winsys/radeon_winsys.h4
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_surface.c4
-rw-r--r--src/gallium/winsys/radeon/drm/radeon_drm_surface.c3
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 d48b6313871..662ffe7c313 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 b37b3c51305..cd00c3f06ec 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 6e9b01f8dc6..0a658d60efb 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 533df39c328..100248aa450 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 af9b25dc78a..e06a4a4e75f 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;