Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Vulkan GUI sample after HAL C changes. #4603

Merged
merged 1 commit into from
Jan 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,
Comment on lines -38 to +39
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Swapping the argument ordering didn't produce a compiler here error since

typedef uint64_t iree_hal_vulkan_features_t;
...
typedef uint32_t iree_hal_vulkan_extensibility_set_t;

:(

/*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