mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
nouveau/winsys: Add a fixed_addr to nouveau_ws_bo_map
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27599>
This commit is contained in:
parent
be9685e4e7
commit
4092685057
4 changed files with 17 additions and 8 deletions
|
|
@ -206,7 +206,7 @@ nvk_AllocateMemory(VkDevice device,
|
|||
|
||||
if (dev->ws_dev->debug_flags & NVK_DEBUG_ZERO_MEMORY) {
|
||||
if (type->propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
|
||||
void *map = nouveau_ws_bo_map(mem->bo, NOUVEAU_WS_BO_RDWR);
|
||||
void *map = nouveau_ws_bo_map(mem->bo, NOUVEAU_WS_BO_RDWR, NULL);
|
||||
if (map == NULL) {
|
||||
result = vk_errorf(dev, VK_ERROR_OUT_OF_HOST_MEMORY,
|
||||
"Memory map failed");
|
||||
|
|
@ -307,7 +307,7 @@ nvk_MapMemory2KHR(VkDevice device,
|
|||
"Memory object already mapped.");
|
||||
}
|
||||
|
||||
mem->map = nouveau_ws_bo_map(mem->bo, NOUVEAU_WS_BO_RDWR);
|
||||
mem->map = nouveau_ws_bo_map(mem->bo, NOUVEAU_WS_BO_RDWR, NULL);
|
||||
if (mem->map == NULL) {
|
||||
return vk_errorf(dev, VK_ERROR_MEMORY_MAP_FAILED,
|
||||
"Memory object couldn't be mapped.");
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ nvk_heap_grow_locked(struct nvk_device *dev, struct nvk_heap *heap)
|
|||
|
||||
void *map = NULL;
|
||||
if (heap->map_flags) {
|
||||
map = nouveau_ws_bo_map(bo, heap->map_flags);
|
||||
map = nouveau_ws_bo_map(bo, heap->map_flags, NULL);
|
||||
if (map == NULL) {
|
||||
nouveau_ws_bo_destroy(bo);
|
||||
return vk_errorf(dev, VK_ERROR_OUT_OF_HOST_MEMORY,
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ nouveau_ws_bo_new_mapped(struct nouveau_ws_device *dev,
|
|||
if (!bo)
|
||||
return NULL;
|
||||
|
||||
void *map = nouveau_ws_bo_map(bo, map_flags);
|
||||
void *map = nouveau_ws_bo_map(bo, map_flags, NULL);
|
||||
if (map == NULL) {
|
||||
nouveau_ws_bo_destroy(bo);
|
||||
return NULL;
|
||||
|
|
@ -359,16 +359,23 @@ nouveau_ws_bo_destroy(struct nouveau_ws_bo *bo)
|
|||
}
|
||||
|
||||
void *
|
||||
nouveau_ws_bo_map(struct nouveau_ws_bo *bo, enum nouveau_ws_bo_map_flags flags)
|
||||
nouveau_ws_bo_map(struct nouveau_ws_bo *bo,
|
||||
enum nouveau_ws_bo_map_flags flags,
|
||||
void *fixed_addr)
|
||||
{
|
||||
size_t prot = 0;
|
||||
int prot = 0, map_flags = 0;
|
||||
|
||||
if (flags & NOUVEAU_WS_BO_RD)
|
||||
prot |= PROT_READ;
|
||||
if (flags & NOUVEAU_WS_BO_WR)
|
||||
prot |= PROT_WRITE;
|
||||
|
||||
void *res = mmap(NULL, bo->size, prot, MAP_SHARED, bo->dev->fd, bo->map_handle);
|
||||
map_flags = MAP_SHARED;
|
||||
if (fixed_addr != NULL)
|
||||
map_flags |= MAP_FIXED;
|
||||
|
||||
void *res = mmap(fixed_addr, bo->size, prot, map_flags,
|
||||
bo->dev->fd, bo->map_handle);
|
||||
if (res == MAP_FAILED)
|
||||
return NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -71,7 +71,9 @@ struct nouveau_ws_bo *nouveau_ws_bo_new_mapped(struct nouveau_ws_device *,
|
|||
struct nouveau_ws_bo *nouveau_ws_bo_from_dma_buf(struct nouveau_ws_device *,
|
||||
int fd);
|
||||
void nouveau_ws_bo_destroy(struct nouveau_ws_bo *);
|
||||
void *nouveau_ws_bo_map(struct nouveau_ws_bo *, enum nouveau_ws_bo_map_flags);
|
||||
void *nouveau_ws_bo_map(struct nouveau_ws_bo *,
|
||||
enum nouveau_ws_bo_map_flags,
|
||||
void *fixed_addr);
|
||||
bool nouveau_ws_bo_wait(struct nouveau_ws_bo *, enum nouveau_ws_bo_map_flags flags);
|
||||
int nouveau_ws_bo_dma_buf(struct nouveau_ws_bo *, int *fd);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue