mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-29 18:10:23 +01:00
nouveau: support for custom VRAM domains
Some GPUs (e.g. GK20A, GM20B) do not embed VRAM of their own and use the system memory as a backend instead. For such systems, allocating objects in VRAM results in errors since the kernel will not allow VRAM objects allocations. This patch adds a vram_domain member to struct nouveau_screen that can optionally be initialized to an alternative domain to use for VRAM allocations. If left untouched, NOUVEAU_BO_VRAM will be used for systems that embed VRAM, and NOUVEAU_BO_GART will be used for VRAM-less systems. Code that uses GPU objects is then expected to use the NV_VRAM_DOMAIN() macro in place of NOUVEAU_BO_VRAM to ensure correct behavior on VRAM-less chips. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Martin Peres <martin.peres@free.fr>
This commit is contained in:
parent
57bdcae9e0
commit
f22406837f
2 changed files with 14 additions and 0 deletions
|
|
@ -164,6 +164,16 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
|
|||
size = sizeof(nvc0_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set default VRAM domain if not overridden
|
||||
*/
|
||||
if (!screen->vram_domain) {
|
||||
if (dev->vram_size > 0)
|
||||
screen->vram_domain = NOUVEAU_BO_VRAM;
|
||||
else
|
||||
screen->vram_domain = NOUVEAU_BO_GART;
|
||||
}
|
||||
|
||||
ret = nouveau_object_new(&dev->object, 0, NOUVEAU_FIFO_CHANNEL_CLASS,
|
||||
data, size, &screen->channel);
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ struct nouveau_screen {
|
|||
|
||||
boolean hint_buf_keep_sysmem_copy;
|
||||
|
||||
unsigned vram_domain;
|
||||
|
||||
struct {
|
||||
unsigned profiles_checked;
|
||||
unsigned profiles_present;
|
||||
|
|
@ -94,6 +96,8 @@ struct nouveau_screen {
|
|||
#endif
|
||||
};
|
||||
|
||||
#define NV_VRAM_DOMAIN(screen) ((screen)->vram_domain)
|
||||
|
||||
#ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS
|
||||
# define NOUVEAU_DRV_STAT(s, n, v) do { \
|
||||
(s)->stats.named.n += (v); \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue