mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
gallium: Redefine the max texture 2d cap from _LEVELS to _SIZE.
The _LEVELS assumes that the max is always power of two. For V3D 4.2, we can support up to 7680 non-power-of-two MSAA textures, which will let X11 support dual 4k displays on newer hardware. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
f33cb272f0
commit
0c31fe9ee7
35 changed files with 91 additions and 93 deletions
|
|
@ -51,7 +51,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
||||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
unreachable("driver must implement these.");
|
unreachable("driver must implement these.");
|
||||||
|
|
|
||||||
|
|
@ -206,11 +206,7 @@ vl_video_buffer_is_format_supported(struct pipe_screen *screen,
|
||||||
unsigned
|
unsigned
|
||||||
vl_video_buffer_max_size(struct pipe_screen *screen)
|
vl_video_buffer_max_size(struct pipe_screen *screen)
|
||||||
{
|
{
|
||||||
uint32_t max_2d_texture_level;
|
return screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
|
|
||||||
max_2d_texture_level = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
|
||||||
|
|
||||||
return 1 << (max_2d_texture_level-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,7 @@ The integer capabilities:
|
||||||
* ``PIPE_CAP_QUERY_TIME_ELAPSED``: Whether PIPE_QUERY_TIME_ELAPSED queries are available.
|
* ``PIPE_CAP_QUERY_TIME_ELAPSED``: Whether PIPE_QUERY_TIME_ELAPSED queries are available.
|
||||||
* ``PIPE_CAP_TEXTURE_SWIZZLE``: Whether swizzling through sampler views is
|
* ``PIPE_CAP_TEXTURE_SWIZZLE``: Whether swizzling through sampler views is
|
||||||
supported.
|
supported.
|
||||||
* ``PIPE_CAP_MAX_TEXTURE_2D_LEVELS``: The maximum number of mipmap levels available
|
* ``PIPE_CAP_MAX_TEXTURE_2D_SIZE``: The maximum size of 2D (and 1D) textures.
|
||||||
for a 2D texture.
|
|
||||||
* ``PIPE_CAP_MAX_TEXTURE_3D_LEVELS``: The maximum number of mipmap levels available
|
* ``PIPE_CAP_MAX_TEXTURE_3D_LEVELS``: The maximum number of mipmap levels available
|
||||||
for a 3D texture.
|
for a 3D texture.
|
||||||
* ``PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS``: The maximum number of mipmap levels available
|
* ``PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS``: The maximum number of mipmap levels available
|
||||||
|
|
|
||||||
|
|
@ -318,7 +318,8 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
return 255;
|
return 255;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return screen->specs.max_texture_size;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
{
|
{
|
||||||
int log2_max_tex_size = util_last_bit(screen->specs.max_texture_size);
|
int log2_max_tex_size = util_last_bit(screen->specs.max_texture_size);
|
||||||
|
|
|
||||||
|
|
@ -371,7 +371,8 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return 1 << (MAX_MIP_LEVELS - 1);
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return MAX_MIP_LEVELS;
|
return MAX_MIP_LEVELS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -365,12 +365,12 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
|
||||||
return is->debug.lie ? 1 : 0;
|
return is->debug.lie ? 1 : 0;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
return I915_MAX_TEXTURE_2D_LEVELS;
|
return 1 << (I915_MAX_TEXTURE_2D_LEVELS - 1);
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
return I915_MAX_TEXTURE_3D_LEVELS;
|
return I915_MAX_TEXTURE_3D_LEVELS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return I915_MAX_TEXTURE_2D_LEVELS;
|
return 1 << (I915_MAX_TEXTURE_2D_LEVELS - 1);
|
||||||
case PIPE_CAP_MIN_TEXEL_OFFSET:
|
case PIPE_CAP_MIN_TEXEL_OFFSET:
|
||||||
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
||||||
case PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET:
|
case PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET:
|
||||||
|
|
|
||||||
|
|
@ -202,7 +202,8 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_MAX_RENDER_TARGETS:
|
case PIPE_CAP_MAX_RENDER_TARGETS:
|
||||||
return BRW_MAX_DRAW_BUFFERS;
|
return BRW_MAX_DRAW_BUFFERS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return 16384;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return IRIS_MAX_MIPLEVELS; /* 16384x16384 */
|
return IRIS_MAX_MIPLEVELS; /* 16384x16384 */
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,8 @@ lima_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
case PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL:
|
case PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return 1 << (LIMA_MAX_MIP_LEVELS - 1);
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return LIMA_MAX_MIP_LEVELS;
|
return LIMA_MAX_MIP_LEVELS;
|
||||||
|
|
|
||||||
|
|
@ -140,8 +140,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
||||||
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
||||||
return 0;
|
return 0;
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
return LP_MAX_TEXTURE_2D_LEVELS;
|
return 1 << (LP_MAX_TEXTURE_2D_LEVELS - 1);
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
return LP_MAX_TEXTURE_3D_LEVELS;
|
return LP_MAX_TEXTURE_3D_LEVELS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,8 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
/* non-boolean capabilities */
|
/* non-boolean capabilities */
|
||||||
case PIPE_CAP_MAX_RENDER_TARGETS:
|
case PIPE_CAP_MAX_RENDER_TARGETS:
|
||||||
return (eng3d->oclass >= NV40_3D_CLASS) ? 4 : 1;
|
return (eng3d->oclass >= NV40_3D_CLASS) ? 4 : 1;
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
return 13;
|
return 4096;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
return 10;
|
return 10;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
|
|
||||||
switch (param) {
|
switch (param) {
|
||||||
/* non-boolean caps */
|
/* non-boolean caps */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
return 14;
|
return 8192;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
return 12;
|
return 12;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,8 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
|
|
||||||
switch (param) {
|
switch (param) {
|
||||||
/* non-boolean caps */
|
/* non-boolean caps */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return 16384;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return 15;
|
return 15;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,8 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return 4096;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return 13;
|
return 13;
|
||||||
|
|
|
||||||
|
|
@ -286,7 +286,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return is_r500 ? 4096 : 2048;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
/* 13 == 4096, 12 == 2048 */
|
/* 13 == 4096, 12 == 2048 */
|
||||||
|
|
|
||||||
|
|
@ -497,7 +497,11 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||||
return 2048;
|
return 2048;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
if (family >= CHIP_CEDAR)
|
||||||
|
return 16384;
|
||||||
|
else
|
||||||
|
return 8192;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
if (family >= CHIP_CEDAR)
|
if (family >= CHIP_CEDAR)
|
||||||
return 15;
|
return 15;
|
||||||
|
|
|
||||||
|
|
@ -177,11 +177,10 @@ void r600_test_dma(struct r600_common_screen *rscreen)
|
||||||
struct pipe_context *ctx = screen->context_create(screen, NULL, 0);
|
struct pipe_context *ctx = screen->context_create(screen, NULL, 0);
|
||||||
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
|
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
|
||||||
uint64_t max_alloc_size;
|
uint64_t max_alloc_size;
|
||||||
unsigned i, iterations, num_partial_copies, max_levels, max_tex_side;
|
unsigned i, iterations, num_partial_copies, max_tex_side;
|
||||||
unsigned num_pass = 0, num_fail = 0;
|
unsigned num_pass = 0, num_fail = 0;
|
||||||
|
|
||||||
max_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
max_tex_side = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
max_tex_side = 1 << (max_levels - 1);
|
|
||||||
|
|
||||||
/* Max 128 MB allowed for both textures. */
|
/* Max 128 MB allowed for both textures. */
|
||||||
max_alloc_size = 128 * 1024 * 1024;
|
max_alloc_size = 128 * 1024 * 1024;
|
||||||
|
|
|
||||||
|
|
@ -276,7 +276,8 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
return 2048;
|
return 2048;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return 16384;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return 15; /* 16384 */
|
return 15; /* 16384 */
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -192,11 +192,10 @@ void si_test_dma(struct si_screen *sscreen)
|
||||||
struct pipe_context *ctx = screen->context_create(screen, NULL, 0);
|
struct pipe_context *ctx = screen->context_create(screen, NULL, 0);
|
||||||
struct si_context *sctx = (struct si_context*)ctx;
|
struct si_context *sctx = (struct si_context*)ctx;
|
||||||
uint64_t max_alloc_size;
|
uint64_t max_alloc_size;
|
||||||
unsigned i, iterations, num_partial_copies, max_levels, max_tex_side;
|
unsigned i, iterations, num_partial_copies, max_tex_side;
|
||||||
unsigned num_pass = 0, num_fail = 0;
|
unsigned num_pass = 0, num_fail = 0;
|
||||||
|
|
||||||
max_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
max_tex_side = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
max_tex_side = 1 << (max_levels - 1);
|
|
||||||
|
|
||||||
/* Max 128 MB allowed for both textures. */
|
/* Max 128 MB allowed for both textures. */
|
||||||
max_alloc_size = 128 * 1024 * 1024;
|
max_alloc_size = 128 * 1024 * 1024;
|
||||||
|
|
|
||||||
|
|
@ -95,8 +95,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
||||||
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
||||||
return 0;
|
return 0;
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
return SP_MAX_TEXTURE_2D_LEVELS;
|
return 1 << (SP_MAX_TEXTURE_2D_LEVELS - 1);
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
return SP_MAX_TEXTURE_3D_LEVELS;
|
return SP_MAX_TEXTURE_3D_LEVELS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -92,13 +92,10 @@ sp_create_tile_cache( struct pipe_context *pipe )
|
||||||
{
|
{
|
||||||
struct softpipe_tile_cache *tc;
|
struct softpipe_tile_cache *tc;
|
||||||
uint pos;
|
uint pos;
|
||||||
MAYBE_UNUSED int maxTexSize;
|
|
||||||
int maxLevels;
|
|
||||||
|
|
||||||
/* sanity checking: max sure MAX_WIDTH/HEIGHT >= largest texture image */
|
/* sanity checking: max sure MAX_WIDTH/HEIGHT >= largest texture image */
|
||||||
maxLevels = pipe->screen->get_param(pipe->screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
assert(MAX_WIDTH >= pipe->screen->get_param(pipe->screen,
|
||||||
maxTexSize = 1 << (maxLevels - 1);
|
PIPE_CAP_MAX_TEXTURE_2D_SIZE));
|
||||||
assert(MAX_WIDTH >= maxTexSize);
|
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(union tile_address) == 4);
|
STATIC_ASSERT(sizeof(union tile_address) == 4);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,18 +221,18 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||||
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
||||||
return 256;
|
return 256;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
{
|
{
|
||||||
unsigned levels = SVGA_MAX_TEXTURE_LEVELS;
|
unsigned size = 1 << (SVGA_MAX_TEXTURE_LEVELS - 1);
|
||||||
if (sws->get_cap(sws, SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH, &result))
|
if (sws->get_cap(sws, SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH, &result))
|
||||||
levels = MIN2(util_logbase2(result.u) + 1, levels);
|
size = MIN2(result.u, size);
|
||||||
else
|
else
|
||||||
levels = 12 /* 2048x2048 */;
|
size = 2048;
|
||||||
if (sws->get_cap(sws, SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT, &result))
|
if (sws->get_cap(sws, SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT, &result))
|
||||||
levels = MIN2(util_logbase2(result.u) + 1, levels);
|
size = MIN2(result.u, size);
|
||||||
else
|
else
|
||||||
levels = 12 /* 2048x2048 */;
|
size = 2048;
|
||||||
return levels;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
|
|
@ -245,7 +245,7 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||||
* No mechanism to query the host, and at least limited to 2048x2048 on
|
* No mechanism to query the host, and at least limited to 2048x2048 on
|
||||||
* certain hardware.
|
* certain hardware.
|
||||||
*/
|
*/
|
||||||
return MIN2(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS),
|
return MIN2(util_last_bit(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE)),
|
||||||
12 /* 2048x2048 */);
|
12 /* 2048x2048 */);
|
||||||
|
|
||||||
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
* XXX Check max texture size values against core and sampler.
|
* XXX Check max texture size values against core and sampler.
|
||||||
*/
|
*/
|
||||||
#define SWR_MAX_TEXTURE_SIZE (2 * 1024 * 1024 * 1024ULL) /* 2GB */
|
#define SWR_MAX_TEXTURE_SIZE (2 * 1024 * 1024 * 1024ULL) /* 2GB */
|
||||||
#define SWR_MAX_TEXTURE_2D_LEVELS 14 /* 8K x 8K for now */
|
#define SWR_MAX_TEXTURE_2D_SIZE 8192
|
||||||
#define SWR_MAX_TEXTURE_3D_LEVELS 12 /* 2K x 2K x 2K for now */
|
#define SWR_MAX_TEXTURE_3D_LEVELS 12 /* 2K x 2K x 2K for now */
|
||||||
#define SWR_MAX_TEXTURE_CUBE_LEVELS 14 /* 8K x 8K for now */
|
#define SWR_MAX_TEXTURE_CUBE_LEVELS 14 /* 8K x 8K for now */
|
||||||
#define SWR_MAX_TEXTURE_ARRAY_LAYERS 512 /* 8K x 512 / 8K x 8K x 512 */
|
#define SWR_MAX_TEXTURE_ARRAY_LAYERS 512 /* 8K x 512 / 8K x 8K x 512 */
|
||||||
|
|
@ -162,8 +162,8 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||||
/* limits */
|
/* limits */
|
||||||
case PIPE_CAP_MAX_RENDER_TARGETS:
|
case PIPE_CAP_MAX_RENDER_TARGETS:
|
||||||
return PIPE_MAX_COLOR_BUFS;
|
return PIPE_MAX_COLOR_BUFS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
return SWR_MAX_TEXTURE_2D_LEVELS;
|
return SWR_MAX_TEXTURE_2D_SIZE;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
return SWR_MAX_TEXTURE_3D_LEVELS;
|
return SWR_MAX_TEXTURE_3D_LEVELS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,11 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
return V3D_MAX_FS_INPUTS / 4;
|
return V3D_MAX_FS_INPUTS / 4;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
if (screen->devinfo.ver < 40)
|
||||||
|
return 2048;
|
||||||
|
else
|
||||||
|
return 4096;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
if (screen->devinfo.ver < 40)
|
if (screen->devinfo.ver < 40)
|
||||||
|
|
|
||||||
|
|
@ -171,7 +171,8 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* Texturing. */
|
/* Texturing. */
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
|
return 2048;
|
||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return VC4_MAX_MIP_LEVELS;
|
return VC4_MAX_MIP_LEVELS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
|
|
|
||||||
|
|
@ -82,10 +82,10 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||||
return vscreen->caps.caps.v1.bset.mirror_clamp;
|
return vscreen->caps.caps.v1.bset.mirror_clamp;
|
||||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||||
if (vscreen->caps.caps.v2.max_texture_2d_size)
|
if (vscreen->caps.caps.v2.max_texture_2d_size)
|
||||||
return 1 + util_logbase2(vscreen->caps.caps.v2.max_texture_2d_size);
|
return vscreen->caps.caps.v2.max_texture_2d_size;
|
||||||
return 15; /* 16K x 16K */
|
return 16384;
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
if (vscreen->caps.caps.v2.max_texture_3d_size)
|
if (vscreen->caps.caps.v2.max_texture_3d_size)
|
||||||
return 1 + util_logbase2(vscreen->caps.caps.v2.max_texture_3d_size);
|
return 1 + util_logbase2(vscreen->caps.caps.v2.max_texture_3d_size);
|
||||||
|
|
|
||||||
|
|
@ -691,7 +691,7 @@ enum pipe_cap
|
||||||
PIPE_CAP_OCCLUSION_QUERY,
|
PIPE_CAP_OCCLUSION_QUERY,
|
||||||
PIPE_CAP_QUERY_TIME_ELAPSED,
|
PIPE_CAP_QUERY_TIME_ELAPSED,
|
||||||
PIPE_CAP_TEXTURE_SWIZZLE,
|
PIPE_CAP_TEXTURE_SWIZZLE,
|
||||||
PIPE_CAP_MAX_TEXTURE_2D_LEVELS,
|
PIPE_CAP_MAX_TEXTURE_2D_SIZE,
|
||||||
PIPE_CAP_MAX_TEXTURE_3D_LEVELS,
|
PIPE_CAP_MAX_TEXTURE_3D_LEVELS,
|
||||||
PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS,
|
PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS,
|
||||||
PIPE_CAP_TEXTURE_MIRROR_CLAMP,
|
PIPE_CAP_TEXTURE_MIRROR_CLAMP,
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#include "core/platform.hpp"
|
#include "core/platform.hpp"
|
||||||
#include "pipe/p_screen.h"
|
#include "pipe/p_screen.h"
|
||||||
#include "pipe/p_state.h"
|
#include "pipe/p_state.h"
|
||||||
|
#include "util/bitscan.h"
|
||||||
#include "util/u_debug.h"
|
#include "util/u_debug.h"
|
||||||
|
|
||||||
using namespace clover;
|
using namespace clover;
|
||||||
|
|
@ -108,7 +109,7 @@ device::max_image_buffer_size() const {
|
||||||
|
|
||||||
cl_uint
|
cl_uint
|
||||||
device::max_image_levels_2d() const {
|
device::max_image_levels_2d() const {
|
||||||
return pipe->get_param(pipe, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
return util_last_bit(pipe->get_param(pipe, PIPE_CAP_MAX_TEXTURE_2D_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
cl_uint
|
cl_uint
|
||||||
|
|
|
||||||
|
|
@ -685,7 +685,7 @@ NineAdapter9_GetDeviceCaps( struct NineAdapter9 *This,
|
||||||
D3DNPIPECAP(NPOT_TEXTURES, D3DPTEXTURECAPS_NONPOW2CONDITIONAL) |
|
D3DNPIPECAP(NPOT_TEXTURES, D3DPTEXTURECAPS_NONPOW2CONDITIONAL) |
|
||||||
D3DNPIPECAP(NPOT_TEXTURES, D3DPTEXTURECAPS_CUBEMAP_POW2) |
|
D3DNPIPECAP(NPOT_TEXTURES, D3DPTEXTURECAPS_CUBEMAP_POW2) |
|
||||||
D3DNPIPECAP(NPOT_TEXTURES, D3DPTEXTURECAPS_VOLUMEMAP_POW2) |
|
D3DNPIPECAP(NPOT_TEXTURES, D3DPTEXTURECAPS_VOLUMEMAP_POW2) |
|
||||||
D3DPIPECAP(MAX_TEXTURE_2D_LEVELS, D3DPTEXTURECAPS_MIPMAP) |
|
D3DPIPECAP(MAX_TEXTURE_2D_SIZE, D3DPTEXTURECAPS_MIPMAP) |
|
||||||
D3DPIPECAP(MAX_TEXTURE_3D_LEVELS, D3DPTEXTURECAPS_MIPVOLUMEMAP) |
|
D3DPIPECAP(MAX_TEXTURE_3D_LEVELS, D3DPTEXTURECAPS_MIPVOLUMEMAP) |
|
||||||
D3DPIPECAP(MAX_TEXTURE_CUBE_LEVELS, D3DPTEXTURECAPS_MIPCUBEMAP);
|
D3DPIPECAP(MAX_TEXTURE_CUBE_LEVELS, D3DPTEXTURECAPS_MIPCUBEMAP);
|
||||||
|
|
||||||
|
|
@ -726,8 +726,8 @@ NineAdapter9_GetDeviceCaps( struct NineAdapter9 *This,
|
||||||
pCaps->LineCaps |= D3DLINECAPS_ANTIALIAS;
|
pCaps->LineCaps |= D3DLINECAPS_ANTIALIAS;
|
||||||
}
|
}
|
||||||
|
|
||||||
pCaps->MaxTextureWidth =
|
pCaps->MaxTextureWidth =screen->get_param(screen,
|
||||||
1 << (screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS) - 1);
|
PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
pCaps->MaxTextureHeight = pCaps->MaxTextureWidth;
|
pCaps->MaxTextureHeight = pCaps->MaxTextureWidth;
|
||||||
pCaps->MaxVolumeExtent =
|
pCaps->MaxVolumeExtent =
|
||||||
1 << (screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) - 1);
|
1 << (screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) - 1);
|
||||||
|
|
|
||||||
|
|
@ -885,9 +885,7 @@ OSMesaGetIntegerv(GLint pname, GLint *value)
|
||||||
case OSMESA_MAX_HEIGHT:
|
case OSMESA_MAX_HEIGHT:
|
||||||
{
|
{
|
||||||
struct pipe_screen *screen = get_st_manager()->screen;
|
struct pipe_screen *screen = get_st_manager()->screen;
|
||||||
int maxLevels = screen->get_param(screen,
|
*value = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
|
||||||
*value = 1 << (maxLevels - 1);
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ vlVdpVideoMixerCreate(VdpDevice device,
|
||||||
vlVdpVideoMixer *vmixer = NULL;
|
vlVdpVideoMixer *vmixer = NULL;
|
||||||
VdpStatus ret;
|
VdpStatus ret;
|
||||||
struct pipe_screen *screen;
|
struct pipe_screen *screen;
|
||||||
uint32_t max_2d_texture_level;
|
|
||||||
unsigned max_size, i;
|
unsigned max_size, i;
|
||||||
|
|
||||||
vlVdpDevice *dev = vlGetDataHTAB(device);
|
vlVdpDevice *dev = vlGetDataHTAB(device);
|
||||||
|
|
@ -148,8 +147,7 @@ vlVdpVideoMixerCreate(VdpDevice device,
|
||||||
goto no_params;
|
goto no_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
max_2d_texture_level = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
max_size = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
max_size = pow(2, max_2d_texture_level-1);
|
|
||||||
if (vmixer->video_width < 48 || vmixer->video_width > max_size) {
|
if (vmixer->video_width < 48 || vmixer->video_width > max_size) {
|
||||||
VDPAU_MSG(VDPAU_WARN, "[VDPAU] 48 < %u < %u not valid for width\n",
|
VDPAU_MSG(VDPAU_WARN, "[VDPAU] 48 < %u < %u not valid for width\n",
|
||||||
vmixer->video_width, max_size);
|
vmixer->video_width, max_size);
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ vlVdpVideoSurfaceQueryCapabilities(VdpDevice device, VdpChromaType surface_chrom
|
||||||
{
|
{
|
||||||
vlVdpDevice *dev;
|
vlVdpDevice *dev;
|
||||||
struct pipe_screen *pscreen;
|
struct pipe_screen *pscreen;
|
||||||
uint32_t max_2d_texture_level;
|
uint32_t max_2d_texture_size;
|
||||||
|
|
||||||
if (!(is_supported && max_width && max_height))
|
if (!(is_supported && max_width && max_height))
|
||||||
return VDP_STATUS_INVALID_POINTER;
|
return VDP_STATUS_INVALID_POINTER;
|
||||||
|
|
@ -86,13 +86,12 @@ vlVdpVideoSurfaceQueryCapabilities(VdpDevice device, VdpChromaType surface_chrom
|
||||||
|
|
||||||
/* XXX: Current limits */
|
/* XXX: Current limits */
|
||||||
*is_supported = true;
|
*is_supported = true;
|
||||||
max_2d_texture_level = pscreen->get_param(pscreen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
max_2d_texture_size = pscreen->get_param(pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
mtx_unlock(&dev->mutex);
|
mtx_unlock(&dev->mutex);
|
||||||
if (!max_2d_texture_level)
|
if (!max_2d_texture_size)
|
||||||
return VDP_STATUS_RESOURCES;
|
return VDP_STATUS_RESOURCES;
|
||||||
|
|
||||||
/* I am not quite sure if it is max_2d_texture_level-1 or just max_2d_texture_level */
|
*max_width = *max_height = max_2d_texture_size;
|
||||||
*max_width = *max_height = pow(2,max_2d_texture_level-1);
|
|
||||||
|
|
||||||
return VDP_STATUS_OK;
|
return VDP_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
@ -251,15 +250,15 @@ vlVdpOutputSurfaceQueryCapabilities(VdpDevice device, VdpRGBAFormat surface_rgba
|
||||||
PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET
|
PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET
|
||||||
);
|
);
|
||||||
if (*is_supported) {
|
if (*is_supported) {
|
||||||
uint32_t max_2d_texture_level = pscreen->get_param(
|
uint32_t max_2d_texture_size = pscreen->get_param(
|
||||||
pscreen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
|
|
||||||
if (!max_2d_texture_level) {
|
if (!max_2d_texture_size) {
|
||||||
mtx_unlock(&dev->mutex);
|
mtx_unlock(&dev->mutex);
|
||||||
return VDP_STATUS_ERROR;
|
return VDP_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
*max_width = *max_height = pow(2, max_2d_texture_level - 1);
|
*max_width = *max_height = max_2d_texture_size;
|
||||||
} else {
|
} else {
|
||||||
*max_width = 0;
|
*max_width = 0;
|
||||||
*max_height = 0;
|
*max_height = 0;
|
||||||
|
|
@ -451,15 +450,15 @@ vlVdpBitmapSurfaceQueryCapabilities(VdpDevice device, VdpRGBAFormat surface_rgba
|
||||||
PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET
|
PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET
|
||||||
);
|
);
|
||||||
if (*is_supported) {
|
if (*is_supported) {
|
||||||
uint32_t max_2d_texture_level = pscreen->get_param(
|
uint32_t max_2d_texture_size = pscreen->get_param(
|
||||||
pscreen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
|
|
||||||
if (!max_2d_texture_level) {
|
if (!max_2d_texture_size) {
|
||||||
mtx_unlock(&dev->mutex);
|
mtx_unlock(&dev->mutex);
|
||||||
return VDP_STATUS_ERROR;
|
return VDP_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
*max_width = *max_height = pow(2, max_2d_texture_level - 1);
|
*max_width = *max_height = max_2d_texture_size;
|
||||||
} else {
|
} else {
|
||||||
*max_width = 0;
|
*max_width = 0;
|
||||||
*max_height = 0;
|
*max_height = 0;
|
||||||
|
|
|
||||||
|
|
@ -121,8 +121,8 @@ stw_init(const struct stw_winsys *stw_winsys)
|
||||||
stw_dev->smapi->get_param = stw_get_param;
|
stw_dev->smapi->get_param = stw_get_param;
|
||||||
stw_dev->screen = screen;
|
stw_dev->screen = screen;
|
||||||
|
|
||||||
stw_dev->max_2d_levels =
|
stw_dev->max_2d_levels = util_last_bit(screen->get_param(screen,
|
||||||
screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
PIPE_CAP_MAX_TEXTURE_2D_SIZE));
|
||||||
stw_dev->max_2d_length = 1 << (stw_dev->max_2d_levels - 1);
|
stw_dev->max_2d_length = 1 << (stw_dev->max_2d_levels - 1);
|
||||||
|
|
||||||
InitializeCriticalSection(&stw_dev->ctx_mutex);
|
InitializeCriticalSection(&stw_dev->ctx_mutex);
|
||||||
|
|
|
||||||
|
|
@ -304,8 +304,7 @@ draw_bitmap_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
|
||||||
* it up into chunks.
|
* it up into chunks.
|
||||||
*/
|
*/
|
||||||
GLuint MAYBE_UNUSED maxSize =
|
GLuint MAYBE_UNUSED maxSize =
|
||||||
1 << (pipe->screen->get_param(pipe->screen,
|
pipe->screen->get_param(pipe->screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
PIPE_CAP_MAX_TEXTURE_2D_LEVELS) - 1);
|
|
||||||
assert(width <= (GLsizei) maxSize);
|
assert(width <= (GLsizei) maxSize);
|
||||||
assert(height <= (GLsizei) maxSize);
|
assert(height <= (GLsizei) maxSize);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -758,8 +758,8 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
|
||||||
/* XXX if DrawPixels image is larger than max texture size, break
|
/* XXX if DrawPixels image is larger than max texture size, break
|
||||||
* it up into chunks.
|
* it up into chunks.
|
||||||
*/
|
*/
|
||||||
maxSize = 1 << (pipe->screen->get_param(pipe->screen,
|
maxSize = pipe->screen->get_param(pipe->screen,
|
||||||
PIPE_CAP_MAX_TEXTURE_2D_LEVELS) - 1);
|
PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
assert(width <= maxSize);
|
assert(width <= maxSize);
|
||||||
assert(height <= maxSize);
|
assert(height <= maxSize);
|
||||||
|
|
||||||
|
|
@ -1181,9 +1181,8 @@ static void
|
||||||
clamp_size(struct pipe_context *pipe, GLsizei *width, GLsizei *height,
|
clamp_size(struct pipe_context *pipe, GLsizei *width, GLsizei *height,
|
||||||
struct gl_pixelstore_attrib *unpack)
|
struct gl_pixelstore_attrib *unpack)
|
||||||
{
|
{
|
||||||
const int maxSize =
|
const int maxSize = pipe->screen->get_param(pipe->screen,
|
||||||
1 << (pipe->screen->get_param(pipe->screen,
|
PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
PIPE_CAP_MAX_TEXTURE_2D_LEVELS) - 1);
|
|
||||||
|
|
||||||
if (*width > maxSize) {
|
if (*width > maxSize) {
|
||||||
if (unpack->RowLength == 0)
|
if (unpack->RowLength == 0)
|
||||||
|
|
|
||||||
|
|
@ -84,11 +84,8 @@ void st_init_limits(struct pipe_screen *screen,
|
||||||
bool can_ubo = true;
|
bool can_ubo = true;
|
||||||
int temp;
|
int temp;
|
||||||
|
|
||||||
int max_texture_levels =
|
c->MaxTextureSize = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
|
||||||
_min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS),
|
c->MaxTextureSize = MIN2(c->MaxTextureSize, 1 << (MAX_TEXTURE_LEVELS - 1));
|
||||||
MAX_TEXTURE_LEVELS);
|
|
||||||
|
|
||||||
c->MaxTextureSize = 1 << (max_texture_levels - 1);
|
|
||||||
|
|
||||||
c->Max3DTextureLevels
|
c->Max3DTextureLevels
|
||||||
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS),
|
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS),
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue