mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 17:40:11 +01:00
radeonsi: always place sparse buffers in VRAM
Together with "radeonsi: fix the R600_RESOURCE_FLAG_UNMAPPABLE check",
this ensures that sparse buffers are placed in VRAM.
Noticed by an assertion that started triggering with commit d4fac1e1d7
("gallium/radeon: enable suballocations for VRAM with no CPU access")
Fixes KHR-GL45.sparse_buffer_tests.BufferStorageTest in debug builds.
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
parent
5e2962c949
commit
20ccb51ffc
2 changed files with 6 additions and 2 deletions
|
|
@ -610,6 +610,9 @@ static struct pipe_resource *si_buffer_create(struct pipe_screen *screen,
|
||||||
struct si_screen *sscreen = (struct si_screen*)screen;
|
struct si_screen *sscreen = (struct si_screen*)screen;
|
||||||
struct r600_resource *rbuffer = r600_alloc_buffer_struct(screen, templ);
|
struct r600_resource *rbuffer = r600_alloc_buffer_struct(screen, templ);
|
||||||
|
|
||||||
|
if (templ->flags & PIPE_RESOURCE_FLAG_SPARSE)
|
||||||
|
rbuffer->b.b.flags |= R600_RESOURCE_FLAG_UNMAPPABLE;
|
||||||
|
|
||||||
si_init_resource_fields(sscreen, rbuffer, templ->width0, alignment);
|
si_init_resource_fields(sscreen, rbuffer, templ->width0, alignment);
|
||||||
|
|
||||||
if (templ->flags & PIPE_RESOURCE_FLAG_SPARSE)
|
if (templ->flags & PIPE_RESOURCE_FLAG_SPARSE)
|
||||||
|
|
|
||||||
|
|
@ -1169,6 +1169,9 @@ amdgpu_bo_create(struct radeon_winsys *rws,
|
||||||
/* NO_CPU_ACCESS is valid with VRAM only. */
|
/* NO_CPU_ACCESS is valid with VRAM only. */
|
||||||
assert(domain == RADEON_DOMAIN_VRAM || !(flags & RADEON_FLAG_NO_CPU_ACCESS));
|
assert(domain == RADEON_DOMAIN_VRAM || !(flags & RADEON_FLAG_NO_CPU_ACCESS));
|
||||||
|
|
||||||
|
/* Sparse buffers must have NO_CPU_ACCESS set. */
|
||||||
|
assert(!(flags & RADEON_FLAG_SPARSE) || flags & RADEON_FLAG_NO_CPU_ACCESS);
|
||||||
|
|
||||||
/* Sub-allocate small buffers from slabs. */
|
/* Sub-allocate small buffers from slabs. */
|
||||||
if (!(flags & (RADEON_FLAG_NO_SUBALLOC | RADEON_FLAG_SPARSE)) &&
|
if (!(flags & (RADEON_FLAG_NO_SUBALLOC | RADEON_FLAG_SPARSE)) &&
|
||||||
size <= (1 << AMDGPU_SLAB_MAX_SIZE_LOG2) &&
|
size <= (1 << AMDGPU_SLAB_MAX_SIZE_LOG2) &&
|
||||||
|
|
@ -1201,8 +1204,6 @@ no_slab:
|
||||||
if (flags & RADEON_FLAG_SPARSE) {
|
if (flags & RADEON_FLAG_SPARSE) {
|
||||||
assert(RADEON_SPARSE_PAGE_SIZE % alignment == 0);
|
assert(RADEON_SPARSE_PAGE_SIZE % alignment == 0);
|
||||||
|
|
||||||
flags |= RADEON_FLAG_NO_CPU_ACCESS;
|
|
||||||
|
|
||||||
return amdgpu_bo_sparse_create(ws, size, domain, flags);
|
return amdgpu_bo_sparse_create(ws, size, domain, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue