diff --git a/src/nouveau/mme/tests/mme_runner.cpp b/src/nouveau/mme/tests/mme_runner.cpp index 86ab96cce21..abb265c218a 100644 --- a/src/nouveau/mme/tests/mme_runner.cpp +++ b/src/nouveau/mme/tests/mme_runner.cpp @@ -71,7 +71,7 @@ mme_hw_runner::set_up_hw(uint16_t min_cls, uint16_t max_cls) if (devices[i]->available_nodes & 1 << DRM_NODE_RENDER && devices[i]->bustype == DRM_BUS_PCI && devices[i]->deviceinfo.pci->vendor_id == 0x10de) { - dev = nouveau_ws_device_new(devices[i]); + dev = nouveau_ws_device_new(devices[i], (enum nvk_debug)0); if (dev == NULL) continue; diff --git a/src/nouveau/vulkan/nvk_device.c b/src/nouveau/vulkan/nvk_device.c index 0f0aa8e5a30..f9c6f8dc9fe 100644 --- a/src/nouveau/vulkan/nvk_device.c +++ b/src/nouveau/vulkan/nvk_device.c @@ -158,7 +158,7 @@ nvk_CreateDevice(VkPhysicalDevice physicalDevice, goto fail_init; } - dev->ws_dev = nouveau_ws_device_new(drm_device); + dev->ws_dev = nouveau_ws_device_new(drm_device, pdev->ws_dev->debug_flags); drmFreeDevice(&drm_device); if (dev->ws_dev == NULL) { result = vk_errorf(dev, VK_ERROR_INITIALIZATION_FAILED, diff --git a/src/nouveau/vulkan/nvk_instance.c b/src/nouveau/vulkan/nvk_instance.c index 981b5bf3755..fd578da0060 100644 --- a/src/nouveau/vulkan/nvk_instance.c +++ b/src/nouveau/vulkan/nvk_instance.c @@ -12,6 +12,7 @@ #include "util/build_id.h" #include "util/driconf.h" #include "util/mesa-sha1.h" +#include "util/u_debug.h" VKAPI_ATTR VkResult VKAPI_CALL nvk_EnumerateInstanceVersion(uint32_t *pApiVersion) @@ -74,6 +75,22 @@ nvk_EnumerateInstanceExtensionProperties(const char *pLayerName, &instance_extensions, pPropertyCount, pProperties); } +static void +nvk_init_debug_flags(struct nvk_instance *instance) +{ + const struct debug_control flags[] = { + { "push_dump", NVK_DEBUG_PUSH_DUMP }, + { "push", NVK_DEBUG_PUSH_DUMP }, + { "push_sync", NVK_DEBUG_PUSH_SYNC }, + { "zero_memory", NVK_DEBUG_ZERO_MEMORY }, + { "vm", NVK_DEBUG_VM }, + { "no_cbuf", NVK_DEBUG_NO_CBUF }, + { NULL, 0 }, + }; + + instance->debug_flags = parse_debug_string(getenv("NVK_DEBUG"), flags); +} + static const driOptionDescription nvk_dri_options[] = { DRI_CONF_SECTION_PERFORMANCE DRI_CONF_ADAPTIVE_SYNC(true) @@ -132,6 +149,7 @@ nvk_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, if (result != VK_SUCCESS) goto fail_alloc; + nvk_init_debug_flags(instance); nvk_init_dri_options(instance); instance->vk.physical_devices.try_create_for_drm = diff --git a/src/nouveau/vulkan/nvk_instance.h b/src/nouveau/vulkan/nvk_instance.h index 3e02dda5e8d..b3643510e92 100644 --- a/src/nouveau/vulkan/nvk_instance.h +++ b/src/nouveau/vulkan/nvk_instance.h @@ -7,12 +7,15 @@ #include "nvk_private.h" +#include "nouveau_device.h" #include "vk_instance.h" #include "util/xmlconfig.h" struct nvk_instance { struct vk_instance vk; + enum nvk_debug debug_flags; + struct driOptionCache dri_options; struct driOptionCache available_dri_options; diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index d2827da35a3..40abeb2deb3 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -1155,7 +1155,8 @@ nvk_create_drm_physical_device(struct vk_instance *_instance, if (!drm_device_is_nouveau(drm_device->nodes[DRM_NODE_RENDER])) return VK_ERROR_INCOMPATIBLE_DRIVER; - struct nouveau_ws_device *ws_dev = nouveau_ws_device_new(drm_device); + struct nouveau_ws_device *ws_dev = + nouveau_ws_device_new(drm_device, instance->debug_flags); if (!ws_dev) return vk_error(instance, VK_ERROR_INCOMPATIBLE_DRIVER); @@ -1257,7 +1258,7 @@ nvk_create_drm_physical_device(struct vk_instance *_instance, goto fail_master_fd; pdev->info = info; - pdev->debug_flags = ws_dev->debug_flags; + pdev->debug_flags = instance->debug_flags; pdev->render_dev = render_dev; pdev->master_fd = master_fd; pdev->ws_dev = ws_dev; diff --git a/src/nouveau/winsys/nouveau_device.c b/src/nouveau/winsys/nouveau_device.c index 3ddeb161afd..95ae951395a 100644 --- a/src/nouveau/winsys/nouveau_device.c +++ b/src/nouveau/winsys/nouveau_device.c @@ -156,22 +156,6 @@ mp_per_tpc_for_chipset(uint16_t chipset) return 1; } -static void -nouveau_ws_device_set_dbg_flags(struct nouveau_ws_device *dev) -{ - const struct debug_control flags[] = { - { "push_dump", NVK_DEBUG_PUSH_DUMP }, - { "push", NVK_DEBUG_PUSH_DUMP }, - { "push_sync", NVK_DEBUG_PUSH_SYNC }, - { "zero_memory", NVK_DEBUG_ZERO_MEMORY }, - { "vm", NVK_DEBUG_VM }, - { "no_cbuf", NVK_DEBUG_NO_CBUF }, - { NULL, 0 }, - }; - - dev->debug_flags = parse_debug_string(getenv("NVK_DEBUG"), flags); -} - static int nouveau_ws_param(int fd, uint64_t param, uint64_t *value) { @@ -272,7 +256,8 @@ nouveau_ws_device_info(int fd, struct nouveau_ws_device *dev) } struct nouveau_ws_device * -nouveau_ws_device_new(drmDevicePtr drm_device) +nouveau_ws_device_new(drmDevicePtr drm_device, + enum nvk_debug debug_flags) { const char *path = drm_device->nodes[DRM_NODE_RENDER]; struct nouveau_ws_device *device = CALLOC_STRUCT(nouveau_ws_device); @@ -373,7 +358,7 @@ nouveau_ws_device_new(drmDevicePtr drm_device) device->info.gpc_count = (value >> 0) & 0x000000ff; device->info.tpc_count = (value >> 8) & 0x0000ffff; - nouveau_ws_device_set_dbg_flags(device); + device->debug_flags = debug_flags; struct nouveau_ws_context *tmp_ctx; if (nouveau_ws_context_create(device, ~0, &tmp_ctx)) diff --git a/src/nouveau/winsys/nouveau_device.h b/src/nouveau/winsys/nouveau_device.h index a7a291d075a..e248369783d 100644 --- a/src/nouveau/winsys/nouveau_device.h +++ b/src/nouveau/winsys/nouveau_device.h @@ -22,8 +22,8 @@ enum nvk_debug { /* push buffer submissions wait on completion * - * This is useful to find the submission killing the GPU context. For easier debugging it also - * dumps the buffer leading to that. + * This is useful to find the submission killing the GPU context. For + * easier debugging it also dumps the buffer leading to that. */ NVK_DEBUG_PUSH_SYNC = 1ull << 1, @@ -61,7 +61,8 @@ struct nouveau_ws_device { simple_mtx_t vma_mutex; }; -struct nouveau_ws_device *nouveau_ws_device_new(struct _drmDevice *drm_device); +struct nouveau_ws_device *nouveau_ws_device_new(struct _drmDevice *drm_device, + enum nvk_debug debug_flags); void nouveau_ws_device_destroy(struct nouveau_ws_device *); uint64_t nouveau_ws_device_vram_used(struct nouveau_ws_device *);