Skip to content

Commit

Permalink
Fix Vulkan GUI sample after HAL C changes. (#4603)
Browse files Browse the repository at this point in the history
  • Loading branch information
ScottTodd authored Jan 26, 2021
1 parent e0a1397 commit 265ec53
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 29 deletions.
21 changes: 13 additions & 8 deletions iree/samples/vulkan/vulkan_inference_gui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -201,27 +201,32 @@ int iree::IreeMain(int argc, char** argv) {
// Load symbols from our static `vkGetInstanceProcAddr` for IREE to use.
iree_hal_vulkan_syms_t* iree_vk_syms = nullptr;
IREE_CHECK_OK(iree_hal_vulkan_syms_create(
reinterpret_cast<void*>(&vkGetInstanceProcAddr), &iree_vk_syms));
reinterpret_cast<void*>(&vkGetInstanceProcAddr), iree_allocator_system(),
&iree_vk_syms));
// Create the driver sharing our VkInstance.
iree_hal_driver_t* iree_vk_driver = nullptr;
iree_hal_vulkan_driver_options_t options;
options.api_version = VK_API_VERSION_1_0;
options.features = static_cast<iree_hal_vulkan_features_t>(
iree_string_view_t driver_identifier = iree_make_cstring_view("vulkan");
iree_hal_vulkan_driver_options_t driver_options;
driver_options.api_version = VK_API_VERSION_1_0;
driver_options.requested_features = static_cast<iree_hal_vulkan_features_t>(
IREE_HAL_VULKAN_FEATURE_ENABLE_DEBUG_UTILS);
IREE_CHECK_OK(iree_hal_vulkan_driver_create_using_instance(
options, iree_vk_syms, g_Instance, &iree_vk_driver));
driver_identifier, &driver_options, iree_vk_syms, g_Instance,
iree_allocator_system(), &iree_vk_driver));
// Create a device sharing our VkDevice and queue.
// We could also create a separate (possibly low priority) compute queue for
// IREE, and/or provide a dedicated transfer queue.
iree_string_view_t device_identifier = iree_make_cstring_view("vulkan");
iree_hal_vulkan_queue_set_t compute_queue_set;
compute_queue_set.queue_family_index = g_QueueFamily;
compute_queue_set.queue_indices = 1 << 0;
iree_hal_vulkan_queue_set_t transfer_queue_set;
transfer_queue_set.queue_indices = 0;
iree_hal_device_t* iree_vk_device = nullptr;
IREE_CHECK_OK(iree_hal_vulkan_driver_wrap_device(
iree_vk_driver, g_PhysicalDevice, g_Device, compute_queue_set,
transfer_queue_set, &iree_vk_device));
IREE_CHECK_OK(iree_hal_vulkan_wrap_device(
device_identifier, &driver_options.device_options, iree_vk_syms,
g_Instance, g_PhysicalDevice, g_Device, &compute_queue_set,
&transfer_queue_set, iree_allocator_system(), &iree_vk_device));
// Create a HAL module using the HAL device.
iree_vm_module_t* hal_module = nullptr;
IREE_CHECK_OK(iree_hal_module_create(iree_vk_device, iree_allocator_system(),
Expand Down
2 changes: 1 addition & 1 deletion iree/testing/vulkan/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ iree_cc_library(
imgui::imgui
iree::base::api
iree::base::logging
iree::hal::vulkan::api
iree::hal::vulkan
SDL2::SDL2
Vulkan::Vulkan
)
Expand Down
48 changes: 28 additions & 20 deletions iree/testing/vulkan/vulkan_gui_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,13 @@ std::vector<const char*> GetIreeLayers(
iree_hal_vulkan_extensibility_set_t extensibility_set,
iree_hal_vulkan_features_t features) {
iree_host_size_t required_count;
iree_hal_vulkan_get_layers(extensibility_set, features, 0, NULL,
&required_count);
iree_hal_vulkan_query_extensibility_set(
features, extensibility_set, /*string_capacity=*/0,
/*out_string_values=*/NULL, &required_count);
std::vector<const char*> layers(required_count);
iree_hal_vulkan_get_layers(extensibility_set, features, layers.size(),
layers.data(), &required_count);
iree_hal_vulkan_query_extensibility_set(features, extensibility_set,
layers.size(), layers.data(),
&required_count);
return layers;
}

Expand All @@ -49,22 +51,26 @@ std::vector<const char*> GetIreeExtensions(
iree_hal_vulkan_extensibility_set_t extensibility_set,
iree_hal_vulkan_features_t features) {
iree_host_size_t required_count;
iree_hal_vulkan_get_extensions(extensibility_set, features, 0, NULL,
&required_count);
iree_hal_vulkan_query_extensibility_set(
features, extensibility_set, /*string_capacity=*/0,
/*out_string_values=*/NULL, &required_count);
std::vector<const char*> extensions(required_count);
iree_hal_vulkan_get_extensions(extensibility_set, features, extensions.size(),
extensions.data(), &required_count);
iree_hal_vulkan_query_extensibility_set(features, extensibility_set,
extensions.size(), extensions.data(),
&required_count);
return extensions;
}

// Returns the names of the Vulkan extensions used for the given IREE
// |vulkan_features|.
std::vector<const char*> GetDeviceExtensions(
iree_hal_vulkan_features_t vulkan_features) {
std::vector<const char*> iree_required_extensions =
GetIreeExtensions(IREE_HAL_VULKAN_DEVICE_REQUIRED, vulkan_features);
std::vector<const char*> iree_optional_extensions =
GetIreeExtensions(IREE_HAL_VULKAN_DEVICE_OPTIONAL, vulkan_features);
std::vector<const char*> iree_required_extensions = GetIreeExtensions(
IREE_HAL_VULKAN_EXTENSIBILITY_DEVICE_EXTENSIONS_REQUIRED,
vulkan_features);
std::vector<const char*> iree_optional_extensions = GetIreeExtensions(
IREE_HAL_VULKAN_EXTENSIBILITY_DEVICE_EXTENSIONS_OPTIONAL,
vulkan_features);

// Merge extensions lists, including optional and required for simplicity.
std::set<const char*> ext_set;
Expand All @@ -82,10 +88,10 @@ std::vector<const char*> GetDeviceExtensions(
std::vector<const char*> GetInstanceLayers(
iree_hal_vulkan_features_t vulkan_features) {
// Query the layers that IREE wants / needs.
std::vector<const char*> required_layers =
GetIreeLayers(IREE_HAL_VULKAN_INSTANCE_REQUIRED, vulkan_features);
std::vector<const char*> optional_layers =
GetIreeLayers(IREE_HAL_VULKAN_INSTANCE_OPTIONAL, vulkan_features);
std::vector<const char*> required_layers = GetIreeLayers(
IREE_HAL_VULKAN_EXTENSIBILITY_INSTANCE_LAYERS_REQUIRED, vulkan_features);
std::vector<const char*> optional_layers = GetIreeLayers(
IREE_HAL_VULKAN_EXTENSIBILITY_INSTANCE_LAYERS_OPTIONAL, vulkan_features);

// Query the layers that are available on the Vulkan ICD.
uint32_t layer_property_count = 0;
Expand Down Expand Up @@ -131,10 +137,12 @@ std::vector<const char*> GetInstanceExtensions(
SDL_Vulkan_GetInstanceExtensions(window, &sdl_extensions_count,
sdl_extensions.data());

std::vector<const char*> iree_required_extensions =
GetIreeExtensions(IREE_HAL_VULKAN_INSTANCE_REQUIRED, vulkan_features);
std::vector<const char*> iree_optional_extensions =
GetIreeExtensions(IREE_HAL_VULKAN_INSTANCE_OPTIONAL, vulkan_features);
std::vector<const char*> iree_required_extensions = GetIreeExtensions(
IREE_HAL_VULKAN_EXTENSIBILITY_INSTANCE_EXTENSIONS_REQUIRED,
vulkan_features);
std::vector<const char*> iree_optional_extensions = GetIreeExtensions(
IREE_HAL_VULKAN_EXTENSIBILITY_INSTANCE_EXTENSIONS_OPTIONAL,
vulkan_features);

// Merge extensions lists, including optional and required for simplicity.
std::set<const char*> ext_set;
Expand Down

0 comments on commit 265ec53

Please sign in to comment.