#include "nvk_instance.h"
#include "nvk_physical_device.h"
+#include "nouveau_context.h"
+
#include "vulkan/wsi/wsi_common.h"
static VkResult
if (result != VK_SUCCESS)
goto fail_alloc;
+ int ret = nouveau_ws_context_create(physical_device->dev, &device->ctx);
+ if (ret) {
+ if (ret == -ENOSPC)
+ result = vk_error(device, VK_ERROR_TOO_MANY_OBJECTS);
+ else
+ result = vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
+ goto fail_init;
+ }
+
result = vk_queue_init(&device->queue, &device->vk, &pCreateInfo->pQueueCreateInfos[0], 0);
if (result != VK_SUCCESS)
- goto fail_init;
+ goto fail_ctx;
device->queue.driver_submit = nvk_queue_submit;
return VK_SUCCESS;
- fail_init:
+fail_ctx:
+ nouveau_ws_context_destroy(device->ctx);
+fail_init:
vk_device_finish(&device->vk);
fail_alloc:
vk_free(&device->vk.alloc, device);
vk_queue_finish(&device->queue);
vk_device_finish(&device->vk);
+ nouveau_ws_context_destroy(device->ctx);
vk_free(&device->vk.alloc, device);
}
#include "vulkan/runtime/vk_device.h"
#include "vulkan/runtime/vk_queue.h"
+struct novueau_ws_context;
struct nvk_physical_device;
+
struct nvk_device {
struct vk_device vk;
struct nvk_physical_device *pdev;
+ struct nouveau_ws_context *ctx;
+
struct vk_queue queue;
};