Skip to content

Commit 0af4aef

Browse files
author
=
committed
Update demos to work on mac by adding mac-specific extensions that are enabled on only m1 series mac platforms
1 parent 8074c77 commit 0af4aef

5 files changed

Lines changed: 85 additions & 200 deletions

File tree

demos/1-instance/application.cpp

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,23 @@ debug_callback(
2525
return false;
2626
}
2727

28-
std::vector<const char*>
29-
initialize_instance_extensions() {
28+
std::vector<const char*> get_instance_extensions() {
3029
std::vector<const char*> extension_names;
30+
uint32_t extension_count = 0;
31+
const char** required_extensions = glfwGetRequiredInstanceExtensions(&extension_count);
3132

32-
extension_names.emplace_back(VK_KHR_SURFACE_EXTENSION_NAME);
33+
for(uint32_t i = 0; i < extension_count; i++) {
34+
std::println("Required Extension = {}", required_extensions[i]);
35+
extension_names.emplace_back(required_extensions[i]);
36+
}
3337

3438
extension_names.emplace_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
3539

36-
// An additional surface extension needs to be loaded. This extension is
37-
// platform-specific so needs to be selected based on the platform the
38-
// example is going to be deployed to. Preprocessor directives are used
39-
// here to select the correct platform.
40-
#ifdef VK_USE_PLATFORM_WIN32_KHR
41-
extension_names.emplace_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
42-
#endif
43-
#ifdef VK_USE_PLATFORM_XLIB_KHR
44-
extensionNames.emplace_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
45-
#endif
46-
#ifdef VK_USE_PLATFORM_XCB_KHR
47-
extensionNames.emplace_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
48-
#endif
49-
#ifdef VK_USE_PLATFORM_ANDROID_KHR
50-
extensionNames.emplace_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
51-
#endif
52-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
53-
extensionNames.emplace_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
54-
#endif
55-
#ifdef VK_USE_PLATFORM_MACOS_MVK
56-
extensionNames.emplace_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
57-
#endif
58-
#ifdef USE_PLATFORM_NULLWS
59-
extensionNames.emplace_back(VK_KHR_DISPLAY_EXTENSION_NAME);
40+
#if defined(__APPLE__)
41+
extension_names.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
42+
extension_names.emplace_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
6043
#endif
44+
6145
return extension_names;
6246
}
6347

@@ -91,7 +75,7 @@ main() {
9175

9276
// setting up extensions
9377
std::vector<const char*> global_extensions =
94-
initialize_instance_extensions();
78+
get_instance_extensions();
9579

9680
vk::debug_message_utility debug_callback_info = {
9781
.severity =

demos/2-physical-device/application.cpp

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,23 @@ debug_callback(
2525
return false;
2626
}
2727

28-
std::vector<const char*>
29-
initialize_instance_extensions() {
28+
std::vector<const char*> get_instance_extensions() {
3029
std::vector<const char*> extension_names;
30+
uint32_t extension_count = 0;
31+
const char** required_extensions = glfwGetRequiredInstanceExtensions(&extension_count);
3132

32-
extension_names.emplace_back(VK_KHR_SURFACE_EXTENSION_NAME);
33+
for(uint32_t i = 0; i < extension_count; i++) {
34+
std::println("Required Extension = {}", required_extensions[i]);
35+
extension_names.emplace_back(required_extensions[i]);
36+
}
3337

3438
extension_names.emplace_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
3539

36-
// An additional surface extension needs to be loaded. This extension is
37-
// platform-specific so needs to be selected based on the platform the
38-
// example is going to be deployed to. Preprocessor directives are used
39-
// here to select the correct platform.
40-
#ifdef VK_USE_PLATFORM_WIN32_KHR
41-
extension_names.emplace_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
42-
#endif
43-
#ifdef VK_USE_PLATFORM_XLIB_KHR
44-
extensionNames.emplace_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
45-
#endif
46-
#ifdef VK_USE_PLATFORM_XCB_KHR
47-
extensionNames.emplace_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
48-
#endif
49-
#ifdef VK_USE_PLATFORM_ANDROID_KHR
50-
extensionNames.emplace_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
51-
#endif
52-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
53-
extensionNames.emplace_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
54-
#endif
55-
#ifdef VK_USE_PLATFORM_MACOS_MVK
56-
extensionNames.emplace_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
57-
#endif
58-
#ifdef USE_PLATFORM_NULLWS
59-
extensionNames.emplace_back(VK_KHR_DISPLAY_EXTENSION_NAME);
40+
#if defined(__APPLE__)
41+
extension_names.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
42+
extension_names.emplace_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
6043
#endif
44+
6145
return extension_names;
6246
}
6347

@@ -91,7 +75,7 @@ main() {
9175

9276
// setting up extensions
9377
std::vector<const char*> global_extensions =
94-
initialize_instance_extensions();
78+
get_instance_extensions();
9579

9680
vk::debug_message_utility debug_callback_info = {
9781
.severity =
@@ -119,7 +103,7 @@ main() {
119103

120104
// setting up physical device
121105
vk::physical_enumeration enumerate_devices{ .device_type =
122-
vk::physical_gpu::discrete };
106+
vk::physical_gpu::integrated };
123107

124108
vk::physical_device device(api_instance, enumerate_devices);
125109

demos/3-logical-device/application.cpp

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,23 @@ debug_callback(
2525
return false;
2626
}
2727

28-
std::vector<const char*>
29-
initialize_instance_extensions() {
28+
std::vector<const char*> get_instance_extensions() {
3029
std::vector<const char*> extension_names;
30+
uint32_t extension_count = 0;
31+
const char** required_extensions = glfwGetRequiredInstanceExtensions(&extension_count);
3132

32-
extension_names.emplace_back(VK_KHR_SURFACE_EXTENSION_NAME);
33+
for(uint32_t i = 0; i < extension_count; i++) {
34+
std::println("Required Extension = {}", required_extensions[i]);
35+
extension_names.emplace_back(required_extensions[i]);
36+
}
3337

3438
extension_names.emplace_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
3539

36-
// An additional surface extension needs to be loaded. This extension is
37-
// platform-specific so needs to be selected based on the platform the
38-
// example is going to be deployed to. Preprocessor directives are used
39-
// here to select the correct platform.
40-
#ifdef VK_USE_PLATFORM_WIN32_KHR
41-
extension_names.emplace_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
42-
#endif
43-
#ifdef VK_USE_PLATFORM_XLIB_KHR
44-
extensionNames.emplace_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
45-
#endif
46-
#ifdef VK_USE_PLATFORM_XCB_KHR
47-
extensionNames.emplace_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
48-
#endif
49-
#ifdef VK_USE_PLATFORM_ANDROID_KHR
50-
extensionNames.emplace_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
51-
#endif
52-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
53-
extensionNames.emplace_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
54-
#endif
55-
#ifdef VK_USE_PLATFORM_MACOS_MVK
56-
extensionNames.emplace_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
57-
#endif
58-
#ifdef USE_PLATFORM_NULLWS
59-
extensionNames.emplace_back(VK_KHR_DISPLAY_EXTENSION_NAME);
40+
#if defined(__APPLE__)
41+
extension_names.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
42+
extension_names.emplace_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
6043
#endif
44+
6145
return extension_names;
6246
}
6347

@@ -91,7 +75,7 @@ main() {
9175

9276
// setting up extensions
9377
std::vector<const char*> global_extensions =
94-
initialize_instance_extensions();
78+
get_instance_extensions();
9579

9680
vk::debug_message_utility debug_callback_info = {
9781
.severity =
@@ -117,21 +101,14 @@ main() {
117101
std::println("\napi_instance alive and initiated!!!");
118102
}
119103

120-
// TODO: Implement this as a way to setup physical devices
121-
// vk::enumerate_physical_devices(vk::instance) -> returns
122-
// std::span<vk::physical_device>
123-
124104
// setting up physical device
125105
vk::physical_enumeration enumerate_devices{
126-
.device_type = vk::physical_gpu::discrete,
106+
.device_type = vk::physical_gpu::integrated,
127107
};
128108
vk::physical_device physical_device(api_instance, enumerate_devices);
129109

130110
// selecting depth format
131111
std::array<vk::format, 3> format_support = {
132-
// VK_FORMAT_D32_SFLOAT,
133-
// VK_FORMAT_D32_SFLOAT_S8_UINT,
134-
// VK_FORMAT_D24_UNORM_S8_UINT,
135112
vk::format::d32_sfloat,
136113
vk::format::d32_sfloat_s8_uint,
137114
vk::format::d24_unorm_s8_uint
@@ -154,7 +131,12 @@ main() {
154131

155132
// setting up logical device
156133
std::array<float, 1> priorities = { 0.f };
134+
#if defined(__APPLE__)
135+
std::array<const char*, 2> extensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, "VK_KHR_portability_subset" };
136+
#else
157137
std::array<const char*, 1> extensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME };
138+
#endif
139+
158140
vk::device_params logical_device_params = {
159141
.queue_priorities = priorities,
160142
.extensions = extensions,

demos/4-surface/application.cpp

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,23 @@ debug_callback(
2525
return false;
2626
}
2727

28-
std::vector<const char*>
29-
initialize_instance_extensions() {
28+
std::vector<const char*> get_instance_extensions() {
3029
std::vector<const char*> extension_names;
30+
uint32_t extension_count = 0;
31+
const char** required_extensions = glfwGetRequiredInstanceExtensions(&extension_count);
3132

32-
extension_names.emplace_back(VK_KHR_SURFACE_EXTENSION_NAME);
33+
for(uint32_t i = 0; i < extension_count; i++) {
34+
std::println("Required Extension = {}", required_extensions[i]);
35+
extension_names.emplace_back(required_extensions[i]);
36+
}
3337

3438
extension_names.emplace_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
3539

36-
// An additional surface extension needs to be loaded. This extension is
37-
// platform-specific so needs to be selected based on the platform the
38-
// example is going to be deployed to. Preprocessor directives are used
39-
// here to select the correct platform.
40-
#ifdef VK_USE_PLATFORM_WIN32_KHR
41-
extension_names.emplace_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
42-
#endif
43-
#ifdef VK_USE_PLATFORM_XLIB_KHR
44-
extensionNames.emplace_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
45-
#endif
46-
#ifdef VK_USE_PLATFORM_XCB_KHR
47-
extensionNames.emplace_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
48-
#endif
49-
#ifdef VK_USE_PLATFORM_ANDROID_KHR
50-
extensionNames.emplace_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
51-
#endif
52-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
53-
extensionNames.emplace_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
54-
#endif
55-
#ifdef VK_USE_PLATFORM_MACOS_MVK
56-
extensionNames.emplace_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
57-
#endif
58-
#ifdef USE_PLATFORM_NULLWS
59-
extensionNames.emplace_back(VK_KHR_DISPLAY_EXTENSION_NAME);
40+
#if defined(__APPLE__)
41+
extension_names.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
42+
extension_names.emplace_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
6043
#endif
44+
6145
return extension_names;
6246
}
6347

@@ -91,7 +75,7 @@ main() {
9175

9276
// setting up extensions
9377
std::vector<const char*> global_extensions =
94-
initialize_instance_extensions();
78+
get_instance_extensions();
9579

9680
vk::debug_message_utility debug_callback_info = {
9781
.severity =
@@ -123,15 +107,12 @@ main() {
123107

124108
// setting up physical device
125109
vk::physical_enumeration enumerate_devices{
126-
.device_type = vk::physical_gpu::discrete,
110+
.device_type = vk::physical_gpu::integrated,
127111
};
128112
vk::physical_device physical_device(api_instance, enumerate_devices);
129113

130114
// selecting depth format
131115
std::array<vk::format, 3> format_support = {
132-
// VK_FORMAT_D32_SFLOAT,
133-
// VK_FORMAT_D32_SFLOAT_S8_UINT,
134-
// VK_FORMAT_D24_UNORM_S8_UINT,
135116
vk::format::d32_sfloat,
136117
vk::format::d32_sfloat_s8_uint,
137118
vk::format::d24_unorm_s8_uint
@@ -146,7 +127,13 @@ main() {
146127

147128
// setting up logical device
148129
std::array<float, 1> priorities = { 0.f };
130+
131+
#if defined(__APPLE__)
132+
std::array<const char*, 2> extensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, "VK_KHR_portability_subset" };
133+
#else
149134
std::array<const char*, 1> extensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME };
135+
#endif
136+
150137
vk::device_params logical_device_params = {
151138
.queue_priorities = priorities,
152139
.extensions = extensions,

0 commit comments

Comments
 (0)