v3d: Bump the maximum texture size to 4k for V3D 4.x.
4.1 and 4.2 both have the same 16k limit, but it I'm seeing GPU hangs in the CTS at 8k and 16k. 4k at least lets us get one 4k display working. Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
e3063a8b2f
commit
62360e92ec
|
@ -820,8 +820,8 @@
|
||||||
|
|
||||||
<packet code="120" name="Tile Binning Mode Cfg" min_ver="41">
|
<packet code="120" name="Tile Binning Mode Cfg" min_ver="41">
|
||||||
|
|
||||||
<field name="Height (in pixels)" size="12" start="48" type="uint" minus_one="true"/>
|
<field name="Height (in pixels)" size="16" start="48" type="uint" minus_one="true"/>
|
||||||
<field name="Width (in pixels)" size="12" start="32" type="uint" minus_one="true"/>
|
<field name="Width (in pixels)" size="16" start="32" type="uint" minus_one="true"/>
|
||||||
|
|
||||||
<field name="Double-buffer in non-ms mode" size="1" start="15" type="bool"/>
|
<field name="Double-buffer in non-ms mode" size="1" start="15" type="bool"/>
|
||||||
<field name="Multisample Mode (4x)" size="1" start="14" type="bool"/>
|
<field name="Multisample Mode (4x)" size="1" start="14" type="bool"/>
|
||||||
|
|
|
@ -32,7 +32,8 @@
|
||||||
*/
|
*/
|
||||||
#define V3D_MAX_TEXTURE_SAMPLERS 16
|
#define V3D_MAX_TEXTURE_SAMPLERS 16
|
||||||
|
|
||||||
#define V3D_MAX_MIP_LEVELS 12
|
/* The HW can do 16384 (15), but we run into hangs when we expose that. */
|
||||||
|
#define V3D_MAX_MIP_LEVELS 13
|
||||||
|
|
||||||
#define V3D_MAX_SAMPLES 4
|
#define V3D_MAX_SAMPLES 4
|
||||||
|
|
||||||
|
|
|
@ -189,7 +189,10 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
||||||
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:
|
||||||
return V3D_MAX_MIP_LEVELS;
|
if (screen->devinfo.ver < 40)
|
||||||
|
return 12;
|
||||||
|
else
|
||||||
|
return V3D_MAX_MIP_LEVELS;
|
||||||
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
||||||
return 2048;
|
return 2048;
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,28 @@ v3d_start_draw(struct v3d_context *v3d)
|
||||||
job->submit.bcl_start = job->bcl.bo->offset;
|
job->submit.bcl_start = job->bcl.bo->offset;
|
||||||
v3d_job_add_bo(job, job->bcl.bo);
|
v3d_job_add_bo(job, job->bcl.bo);
|
||||||
|
|
||||||
job->tile_alloc = v3d_bo_alloc(v3d->screen, 1024 * 1024, "tile_alloc");
|
/* The PTB will request the tile alloc initial size per tile at start
|
||||||
|
* of tile binning.
|
||||||
|
*/
|
||||||
|
uint32_t tile_alloc_size = (job->draw_tiles_x *
|
||||||
|
job->draw_tiles_y) * 64;
|
||||||
|
/* The PTB allocates in aligned 4k chunks after the initial setup. */
|
||||||
|
tile_alloc_size = align(tile_alloc_size, 4096);
|
||||||
|
|
||||||
|
/* Include the first two chunk allocations that the PTB does so that
|
||||||
|
* we definitely clear the OOM condition before triggering one (the HW
|
||||||
|
* won't trigger OOM during the first allocations).
|
||||||
|
*/
|
||||||
|
tile_alloc_size += 8192;
|
||||||
|
|
||||||
|
/* For performance, allocate some extra initial memory after the PTB's
|
||||||
|
* minimal allocations, so that we hopefully don't have to block the
|
||||||
|
* GPU on the kernel handling an OOM signal.
|
||||||
|
*/
|
||||||
|
tile_alloc_size += 512 * 1024;
|
||||||
|
|
||||||
|
job->tile_alloc = v3d_bo_alloc(v3d->screen, tile_alloc_size,
|
||||||
|
"tile_alloc");
|
||||||
uint32_t tsda_per_tile_size = v3d->screen->devinfo.ver >= 40 ? 256 : 64;
|
uint32_t tsda_per_tile_size = v3d->screen->devinfo.ver >= 40 ? 256 : 64;
|
||||||
job->tile_state = v3d_bo_alloc(v3d->screen,
|
job->tile_state = v3d_bo_alloc(v3d->screen,
|
||||||
job->draw_tiles_y *
|
job->draw_tiles_y *
|
||||||
|
|
|
@ -846,6 +846,9 @@ v3d_setup_texture_shader_state(struct V3DX(TEXTURE_SHADER_STATE) *tex,
|
||||||
prsc->target == PIPE_TEXTURE_1D_ARRAY) {
|
prsc->target == PIPE_TEXTURE_1D_ARRAY) {
|
||||||
tex->image_height = tex->image_width >> 14;
|
tex->image_height = tex->image_width >> 14;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tex->image_width &= (1 << 14) - 1;
|
||||||
|
tex->image_height &= (1 << 14) - 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (prsc->target == PIPE_TEXTURE_3D) {
|
if (prsc->target == PIPE_TEXTURE_3D) {
|
||||||
|
|
Loading…
Reference in New Issue