diff --git a/src/widget/vulkan.c b/src/widget/vulkan.c index 26ffe2c..7fb390e 100644 --- a/src/widget/vulkan.c +++ b/src/widget/vulkan.c @@ -112,10 +112,6 @@ typedef struct vulkan { int vkInstanceExtensionCount; int vkDeviceExtensionCount; int vkLayerCount; - - const char** enabledExtensions; - const char** enabledLayers; - } vulkan_t; static int vulkan_instance_setup(MwWidget handle, vulkan_t* o); @@ -225,27 +221,27 @@ static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) { VK_ASSERT(_vkCreateInstance); /* setup enabled extensions */ - arrput(o->enabledExtensions, VK_KHR_SURFACE_EXTENSION_NAME); + arrput(enabledExtensions, VK_KHR_SURFACE_EXTENSION_NAME); #ifdef USE_GDI if(handle->lowlevel->common.type == MwLLBackendGDI) { - arrput(o->enabledExtensions, VK_KHR_WIN32_SURFACE_EXTENSION_NAME); + arrput(enabledExtensions, VK_KHR_WIN32_SURFACE_EXTENSION_NAME); } #endif #ifdef USE_X11 if(handle->lowlevel->common.type == MwLLBackendX11) { - arrput(o->enabledExtensions, VK_KHR_XLIB_SURFACE_EXTENSION_NAME); + arrput(enabledExtensions, VK_KHR_XLIB_SURFACE_EXTENSION_NAME); } #endif #ifdef USE_WAYLAND if(handle->lowlevel->common.type == MwLLBackendWayland) { - arrput(o->enabledExtensions, VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME); + arrput(enabledExtensions, VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME); /* take this opprutunity to set the widget to always render */ MwWaylandAlwaysRender = MwTRUE; } #endif #ifdef USE_COCOA if(handle->lowlevel->common.type == MwLLBackendCocoa) { - arrput(o->enabledExtensions, VK_EXT_METAL_SURFACE_EXTENSION_NAME); + arrput(enabledExtensions, VK_EXT_METAL_SURFACE_EXTENSION_NAME); } #endif @@ -253,11 +249,11 @@ static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) { VK_CMD(_vkEnumerateInstanceExtensionProperties(NULL, &extension_count, NULL)); ext_props = malloc(sizeof(VkExtensionProperties) * extension_count); VK_CMD(_vkEnumerateInstanceExtensionProperties(NULL, &extension_count, ext_props)); - o->vkInstanceExtensions = malloc(sizeof(const char*) * (arrlen(o->enabledExtensions) + 1)); + o->vkInstanceExtensions = malloc(sizeof(const char*) * (arrlen(enabledExtensions) + 1)); for(i = 0; i < extension_count; i++) { - for(n = 0; n < (unsigned long)arrlen(o->enabledExtensions); n++) { - if(strcmp(ext_props[i].extensionName, o->enabledExtensions[n]) == 0) { + for(n = 0; n < (unsigned long)arrlen(enabledExtensions); n++) { + if(strcmp(ext_props[i].extensionName, enabledExtensions[n]) == 0) { printf("[Vulkan Widget] Enabling extension %s\n", ext_props[i].extensionName); o->vkInstanceExtensions[o->vkInstanceExtensionCount] = ext_props[i].extensionName; o->vkInstanceExtensionCount++; @@ -279,14 +275,14 @@ static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) { VK_CMD(_vkEnumerateInstanceLayerProperties(&layer_count, NULL)); layer_props = malloc(sizeof(VkLayerProperties) * layer_count); VK_CMD(_vkEnumerateInstanceLayerProperties(&layer_count, layer_props)); - o->vkLayers = malloc(256 * (arrlen(o->enabledLayers) + 1)); + o->vkLayers = malloc(256 * (arrlen(enabledLayers) + 1)); if(vulkan_config.validation_layers) { - arrput(o->enabledLayers, "VK_LAYER_KHRONOS_validation"); + arrput(enabledLayers, "VK_LAYER_KHRONOS_validation"); } for(i = 0; i < layer_count; i++) { - for(n = 0; n < (unsigned long)arrlen(o->enabledLayers); n++) { - if(strcmp(layer_props[i].layerName, o->enabledLayers[n]) == 0) { + for(n = 0; n < (unsigned long)arrlen(enabledLayers); n++) { + if(strcmp(layer_props[i].layerName, enabledLayers[n]) == 0) { printf("[Vulkan Widget] Enabling layer %s\n", layer_props[i].layerName); o->vkLayers[o->vkLayerCount] = layer_props[i].layerName; o->vkLayerCount++; @@ -453,11 +449,11 @@ static int vulkan_devices_setup(MwWidget handle, vulkan_t* o) { VK_CMD(_vkEnumerateDeviceExtensionProperties(o->vkPhysicalDevice, NULL, &extension_count, NULL)); ext_props = malloc(sizeof(VkExtensionProperties) * extension_count); VK_CMD(_vkEnumerateDeviceExtensionProperties(o->vkPhysicalDevice, NULL, &extension_count, ext_props)); - o->vkDeviceExtensions = malloc(sizeof(const char*) * (arrlen(o->enabledExtensions) + 1)); + o->vkDeviceExtensions = malloc(sizeof(const char*) * (arrlen(enabledExtensions) + 1)); for(i = 0; i < extension_count; i++) { - for(n = 0; n < (unsigned long)arrlen(o->enabledExtensions); n++) { - if(strcmp(ext_props[i].extensionName, o->enabledExtensions[n]) == 0) { + for(n = 0; n < (unsigned long)arrlen(enabledExtensions); n++) { + if(strcmp(ext_props[i].extensionName, enabledExtensions[n]) == 0) { o->vkDeviceExtensions[o->vkDeviceExtensionCount] = ext_props[i].extensionName; o->vkDeviceExtensionCount++; break; @@ -549,19 +545,15 @@ static void* mwVulkanGetFieldImpl(MwWidget handle, int field, int* err) { static void prop_change(MwWidget handle, const char* prop) { vulkan_t* o = (vulkan_t*)handle->internal; - if(!o) { - handle->internal = malloc(sizeof(*o)); - o = (vulkan_t*)handle->internal; - } if(strcmp(prop, MwNvulkanExtension) == 0) { char* str = MwStringDuplicate(MwGetText(handle, MwNvulkanExtension)); - arrput(o->enabledExtensions, str); + arrput(enabledExtensions, str); } else if(strcmp(prop, MwNvulkanLayer) == 0) { char* str = MwStringDuplicate(MwGetText(handle, MwNvulkanExtension)); - arrput(o->enabledLayers, str); + arrput(enabledLayers, str); } }