gallium: rename PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE->MAX_TEXEL_BUFFER_ELEMENTS_UINT

to allow exposing 4G - 1. The "SIZE" was also a misnomer because it meant
elements. This no longer clamps the size to INT_MAX in st/mesa.

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16881>
This commit is contained in:
Marek Olšák 2022-06-05 20:15:44 -04:00
parent dc4a3a18e9
commit fd6b8999d7
22 changed files with 24 additions and 24 deletions

View File

@ -195,8 +195,9 @@ The integer capabilities:
state should be swizzled manually according to the swizzle in the sampler
view it is intended to be used with, or herein undefined results may occur
for permutational swizzles.
* ``PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE``: The maximum accessible size with
a buffer sampler view, in texels.
* ``PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT``: The maximum accessible number of
elements within a sampler buffer view and image buffer view. This is unsigned
integer with the maximum of 4G - 1.
* ``PIPE_CAP_MAX_VIEWPORTS``: The maximum number of viewports (and scissors
since they are linked) a driver can support. Returning 0 is equivalent
to returning 1 because every driver has to support at least a single

View File

@ -167,7 +167,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
return 0;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
/* GL_EXT_texture_buffer minimum value. */
return 65536;

View File

@ -791,7 +791,7 @@ agx_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
return 16;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return 65536;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:

View File

@ -300,7 +300,7 @@ crocus_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return 16; // XXX: u_screen says 256 is the minimum value...
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return CROCUS_MAX_TEXTURE_BUFFER_SIZE;
case PIPE_CAP_MAX_VIEWPORTS:
return devinfo->ver >= 6 ? 16 : 1;

View File

@ -291,7 +291,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
if (is_a4xx(screen) || is_a5xx(screen) || is_a6xx(screen))
return 64;
return 0;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
/* We could possibly emulate more by pretending 2d/rect textures and
* splitting high bits of index into 2nd dimension..
*/

View File

@ -341,7 +341,7 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return 16; // XXX: u_screen says 256 is the minimum value...
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return IRIS_MAX_TEXTURE_BUFFER_SIZE;
case PIPE_CAP_MAX_VIEWPORTS:
return 16;

View File

@ -230,7 +230,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
return 1;
/* Adressing that many 64bpp texels fits in an i32 so this is a reasonable value */
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return 134217728;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return 16;

View File

@ -158,7 +158,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
case PIPE_CAP_VS_LAYER_VIEWPORT:
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:

View File

@ -125,7 +125,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET:
case PIPE_CAP_MAX_TEXEL_OFFSET:
return 7;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return 128 * 1024 * 1024;
case PIPE_CAP_GLSL_FEATURE_LEVEL:
return 330;

View File

@ -137,7 +137,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return -32;
case PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET:
return 31;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return 128 * 1024 * 1024;
case PIPE_CAP_GLSL_FEATURE_LEVEL:
return 430;

View File

@ -200,7 +200,7 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
return 16;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return 65536;
/* Must be at least 64 for correct behaviour */

View File

@ -347,7 +347,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_FAKE_SW_MSAA:
return 0;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return MIN2(rscreen->b.info.max_alloc_size, INT_MAX);
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:

View File

@ -233,7 +233,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_GL_BEGIN_END_BUFFER_SIZE:
return 4096 * 1024;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
case PIPE_CAP_MAX_SHADER_BUFFER_SIZE:
/* Allow max 512 MB to pass CTS with a 32-bit build. */
return MIN2(sscreen->info.max_alloc_size, 512 * 1024 * 1024);

View File

@ -1160,7 +1160,7 @@ static struct pipe_screen *radeonsi_screen_create_impl(struct radeon_winsys *ws,
si_init_screen_live_shader_cache(sscreen);
sscreen->max_texture_buffer_size = sscreen->b.get_param(
&sscreen->b, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE);
&sscreen->b, PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT);
/* Set these flags in debug_flags early, so that the shader cache takes
* them into account.

View File

@ -218,7 +218,7 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
return 1;
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
return 1;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return 65536;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return 16;

View File

@ -324,7 +324,7 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_MULTISAMPLE:
return svgascreen->ms_samples ? 1 : 0;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
/* convert bytes to texels for the case of the largest texel
* size: float[4].
*/

View File

@ -218,7 +218,7 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
return vscreen->caps.caps.v1.bset.texture_multisample;
case PIPE_CAP_MAX_VIEWPORTS:
return vscreen->caps.caps.v1.max_viewports;
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return vscreen->caps.caps.v1.max_tbo_size;
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
case PIPE_CAP_QUERY_PIPELINE_STATISTICS:

View File

@ -627,7 +627,7 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return mode;
}
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
return MIN2(get_smallest_buffer_heap(screen),
screen->info.props.limits.maxTexelBufferElements);

View File

@ -227,7 +227,7 @@ device::max_images_write() const {
size_t
device::max_image_buffer_size() const {
return pipe->get_param(pipe, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE);
return pipe->get_param(pipe, PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT);
}
cl_uint

View File

@ -258,7 +258,7 @@ lvp_physical_device_init(struct lvp_physical_device *device,
.maxImageDimension3D = (1 << device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS)),
.maxImageDimensionCube = (1 << device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS)),
.maxImageArrayLayers = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS),
.maxTexelBufferElements = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE),
.maxTexelBufferElements = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT),
.maxUniformBufferRange = min_shader_param(device->pscreen, PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE),
.maxStorageBufferRange = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_SHADER_BUFFER_SIZE),
.maxPushConstantsSize = MAX_PUSH_CONSTANTS_SIZE,

View File

@ -810,7 +810,7 @@ enum pipe_cap
PIPE_CAP_TEXTURE_TRANSFER_MODES,
PIPE_CAP_QUERY_PIPELINE_STATISTICS,
PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK,
PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE,
PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT,
PIPE_CAP_MAX_VIEWPORTS,
PIPE_CAP_ENDIANNESS,
PIPE_CAP_MIXED_FRAMEBUFFER_SIZES,

View File

@ -1470,8 +1470,7 @@ void st_init_extensions(struct pipe_screen *screen,
if (extensions->ARB_texture_buffer_object) {
consts->MaxTextureBufferSize =
_min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE),
(1u << 31) - 1);
screen->get_param(screen, PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT);
consts->TextureBufferOffsetAlignment =
screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT);