Mesa (master): gallium: add PIPE_CAP_MAX_TEXTURE_MB

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Sep 21 12:33:52 UTC 2020


Module: Mesa
Branch: master
Commit: fc6df020e3b3ccbd46994986da5f24611a971927
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fc6df020e3b3ccbd46994986da5f24611a971927

Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date:   Mon Sep 14 10:49:29 2020 +0200

gallium: add PIPE_CAP_MAX_TEXTURE_MB

Allows driver to override the default value (1024) from mesa.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6754>

---

 docs/gallium/screen.rst                | 1 +
 src/gallium/auxiliary/util/u_screen.c  | 3 +--
 src/gallium/drivers/radeonsi/si_get.c  | 2 ++
 src/gallium/include/pipe/p_defines.h   | 1 +
 src/mesa/state_tracker/st_extensions.c | 2 ++
 5 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/docs/gallium/screen.rst b/docs/gallium/screen.rst
index 8ae3de036f7..01d5fb3b22a 100644
--- a/docs/gallium/screen.rst
+++ b/docs/gallium/screen.rst
@@ -591,6 +591,7 @@ The integer capabilities:
 * ``PIPE_CAP_BLEND_EQUATION_ADVANCED``: Driver supports blend equation advanced without necessarily supporting FBFETCH.
 * ``PIPE_CAP_NIR_ATOMICS_AS_DEREF``: Whether NIR atomics instructions should reference atomics as NIR derefs instead of by indices.
 * ``PIPE_CAP_NO_CLIP_ON_COPY_TEX``: Driver doesn't want x/y/width/height clipped based on src size when doing a copy texture operation (eg: may want out-of-bounds reads that produce 0 instead of leaving the texture content undefined)
+* ``PIPE_CAP_MAX_TEXTURE_MB``: Maximum texture size in MB (default is 1024)
 
 .. _pipe_capf:
 
diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c
index cb06acfba77..8990908b6bb 100644
--- a/src/gallium/auxiliary/util/u_screen.c
+++ b/src/gallium/auxiliary/util/u_screen.c
@@ -436,9 +436,8 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
 
    case PIPE_CAP_SYSTEM_SVM:
    case PIPE_CAP_ALPHA_TO_COVERAGE_DITHER_CONTROL:
-      return 0;
-
    case PIPE_CAP_NO_CLIP_ON_COPY_TEX:
+   case PIPE_CAP_MAX_TEXTURE_MB:
       return 0;
 
    default:
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
index d0d3af8bb64..169cf7eecf0 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -216,6 +216,8 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_MAX_SHADER_BUFFER_SIZE:
       /* Align it down to 256 bytes. I've chosen the number randomly. */
       return ROUND_DOWN_TO(MIN2(sscreen->info.max_alloc_size, INT_MAX), 256);
+   case PIPE_CAP_MAX_TEXTURE_MB:
+      return sscreen->info.max_alloc_size / (1024 * 1024);
 
    case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
    case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 7eb7c703ffe..83910d2a913 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -967,6 +967,7 @@ enum pipe_cap
    PIPE_CAP_BLEND_EQUATION_ADVANCED,
    PIPE_CAP_NIR_ATOMICS_AS_DEREF,
    PIPE_CAP_NO_CLIP_ON_COPY_TEX,
+   PIPE_CAP_MAX_TEXTURE_MB,
 };
 
 /**
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 1769d27cf4e..f74ad5610a0 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -87,6 +87,8 @@ void st_init_limits(struct pipe_screen *screen,
 
    c->MaxTextureSize = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
    c->MaxTextureSize = MIN2(c->MaxTextureSize, 1 << (MAX_TEXTURE_LEVELS - 1));
+   c->MaxTextureMbytes = MAX2(c->MaxTextureMbytes,
+                              screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_MB));
 
    c->Max3DTextureLevels
       = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS),



More information about the mesa-commit mailing list