nv50,nvc0: expose ARB_map_buffer_alignment
All HW buffers (also suballocated ones) are already aligned. Just make sure that also the initial sysram buffers have proper alignment.
This commit is contained in:
committed by
Christoph Bumiller
parent
05882b0d3b
commit
d8988f048f
@@ -43,7 +43,7 @@ nouveau_buffer_allocate(struct nouveau_screen *screen,
|
||||
}
|
||||
if (domain != NOUVEAU_BO_GART) {
|
||||
if (!buf->data) {
|
||||
buf->data = MALLOC(buf->base.width0);
|
||||
buf->data = align_malloc(buf->base.width0, 64);
|
||||
if (!buf->data)
|
||||
return FALSE;
|
||||
}
|
||||
@@ -92,7 +92,7 @@ nouveau_buffer_destroy(struct pipe_screen *pscreen,
|
||||
nouveau_buffer_release_gpu_storage(res);
|
||||
|
||||
if (res->data && !(res->status & NOUVEAU_BUFFER_STATUS_USER_MEMORY))
|
||||
FREE(res->data);
|
||||
align_free(res->data);
|
||||
|
||||
nouveau_fence_ref(NULL, &res->fence);
|
||||
nouveau_fence_ref(NULL, &res->fence_wr);
|
||||
@@ -457,7 +457,7 @@ nouveau_buffer_migrate(struct nouveau_context *nv,
|
||||
if (ret)
|
||||
return ret;
|
||||
memcpy((uint8_t *)buf->bo->map + buf->offset, buf->data, size);
|
||||
FREE(buf->data);
|
||||
align_free(buf->data);
|
||||
} else
|
||||
if (old_domain != 0 && new_domain != 0) {
|
||||
struct nouveau_mm_allocation *mm = buf->mm;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "nouveau_screen.h"
|
||||
#include "nouveau_mm.h"
|
||||
|
||||
#define MM_MIN_ORDER 7
|
||||
#define MM_MIN_ORDER 7 /* >= 6 to not violate ARB_map_buffer_alignment */
|
||||
#define MM_MAX_ORDER 20
|
||||
|
||||
#define MM_NUM_BUCKETS (MM_MAX_ORDER - MM_MIN_ORDER + 1)
|
||||
|
||||
@@ -170,11 +170,12 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
return 1;
|
||||
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
||||
return 256;
|
||||
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
||||
return 64;
|
||||
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
||||
return 0;
|
||||
default:
|
||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||
|
||||
@@ -148,11 +148,12 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
return 1;
|
||||
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
||||
return 256;
|
||||
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
||||
return 64;
|
||||
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
||||
return 0;
|
||||
default:
|
||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||
|
||||
Reference in New Issue
Block a user