This commit is contained in:
parent
1b91851739
commit
9379031ab4
2 changed files with 69 additions and 45 deletions
|
|
@ -104,7 +104,9 @@ constexpr auto dynamic_rendering = VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME;
|
||||||
constexpr auto descriptor_indexing = VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME;
|
constexpr auto descriptor_indexing = VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME;
|
||||||
constexpr auto depth_stencil_resolve = VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME;
|
constexpr auto depth_stencil_resolve = VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME;
|
||||||
constexpr auto maintenance_3 = VK_KHR_MAINTENANCE3_EXTENSION_NAME;
|
constexpr auto maintenance_3 = VK_KHR_MAINTENANCE3_EXTENSION_NAME;
|
||||||
constexpr auto create_renderpass2= VK_KHR_CREATE_RENDERPASS2_EXTENSION_NAME
|
constexpr auto maintenance_2 = VK_KHR_MAINTENANCE2_EXTENSION_NAME;
|
||||||
|
constexpr auto create_renderpass_2 = VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME;
|
||||||
|
constexpr auto multiview = VK_KHR_MULTIVIEW_EXTENSION_NAME;
|
||||||
|
|
||||||
|
|
||||||
}; // namespace device_extension_names
|
}; // namespace device_extension_names
|
||||||
|
|
@ -2854,6 +2856,7 @@ void Device::load_functions()
|
||||||
{
|
{
|
||||||
const auto load_fn = [this]<typename T>(T &pfn, const char *fn_name) {
|
const auto load_fn = [this]<typename T>(T &pfn, const char *fn_name) {
|
||||||
pfn = std::bit_cast<T>(api::get_device_proc_address(m_device, fn_name));
|
pfn = std::bit_cast<T>(api::get_device_proc_address(m_device, fn_name));
|
||||||
|
log::trace("Loading: {}", fn_name);
|
||||||
lt::debug::ensure(pfn, "Failed to load vulkan device function: {}", fn_name);
|
lt::debug::ensure(pfn, "Failed to load vulkan device function: {}", fn_name);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -3612,59 +3615,77 @@ Device::Device(const Gpu &gpu, CreateInfo info)
|
||||||
|
|
||||||
auto vk_descriptor_indexing_features = VkPhysicalDeviceDescriptorIndexingFeatures {};
|
auto vk_descriptor_indexing_features = VkPhysicalDeviceDescriptorIndexingFeatures {};
|
||||||
auto vk_dynamic_rendering_features = VkPhysicalDeviceDynamicRenderingFeatures {};
|
auto vk_dynamic_rendering_features = VkPhysicalDeviceDynamicRenderingFeatures {};
|
||||||
void **last_p_next = &vk_features_2.pNext;
|
vk_dynamic_rendering_features = VkPhysicalDeviceDynamicRenderingFeatures {
|
||||||
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES,
|
||||||
|
.pNext = {},
|
||||||
|
.dynamicRendering = true,
|
||||||
|
};
|
||||||
|
log::debug("Dynamic rendering: {}", vk_dynamic_rendering_features.dynamicRendering);
|
||||||
|
// void **last_p_next = &vk_features_2.pNext;
|
||||||
|
|
||||||
if (info.dynamic_rendering_features)
|
if (info.dynamic_rendering_features)
|
||||||
{
|
{
|
||||||
vk_dynamic_rendering_features = VkPhysicalDeviceDynamicRenderingFeatures {
|
// *last_p_next = &vk_dynamic_rendering_features;
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES,
|
|
||||||
.pNext = {},
|
|
||||||
.dynamicRendering = true,
|
|
||||||
};
|
|
||||||
log::debug("Dynamic rendering: {}", vk_dynamic_rendering_features.dynamicRendering);
|
|
||||||
|
|
||||||
*last_p_next = &vk_dynamic_rendering_features;
|
|
||||||
// last_p_next = &vk_dynamic_rendering_features.pNext;
|
// last_p_next = &vk_dynamic_rendering_features.pNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info.descriptor_indexing_features)
|
// if (info.descriptor_indexing_features)
|
||||||
{
|
// {
|
||||||
const auto features = *info.descriptor_indexing_features;
|
// const auto features = *info.descriptor_indexing_features;
|
||||||
vk_descriptor_indexing_features = VkPhysicalDeviceDescriptorIndexingFeatures {
|
// vk_descriptor_indexing_features = VkPhysicalDeviceDescriptorIndexingFeatures {
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
|
// .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
|
||||||
.pNext = {},
|
// .pNext = {},
|
||||||
// clang-format off
|
// // clang-format off
|
||||||
.shaderInputAttachmentArrayDynamicIndexing = features.shader_input_attachment_array_dynamic_indexing,
|
// .shaderInputAttachmentArrayDynamicIndexing =
|
||||||
.shaderUniformTexelBufferArrayDynamicIndexing = features.shader_uniform_texel_buffer_array_dynamic_indexing,
|
// features.shader_input_attachment_array_dynamic_indexing,
|
||||||
.shaderStorageTexelBufferArrayDynamicIndexing = features.shader_storage_texel_buffer_array_dynamic_indexing,
|
// .shaderUniformTexelBufferArrayDynamicIndexing =
|
||||||
.shaderUniformBufferArrayNonUniformIndexing = features.shader_uniform_buffer_array_non_uniform_indexing,
|
// features.shader_uniform_texel_buffer_array_dynamic_indexing,
|
||||||
.shaderSampledImageArrayNonUniformIndexing = features.shader_sampled_image_array_non_uniform_indexing,
|
// .shaderStorageTexelBufferArrayDynamicIndexing =
|
||||||
.shaderStorageBufferArrayNonUniformIndexing = features.shader_storage_buffer_array_non_uniform_indexing,
|
// features.shader_storage_texel_buffer_array_dynamic_indexing,
|
||||||
.shaderStorageImageArrayNonUniformIndexing = features.shader_storage_image_array_non_uniform_indexing,
|
// .shaderUniformBufferArrayNonUniformIndexing =
|
||||||
.shaderInputAttachmentArrayNonUniformIndexing = features.shader_input_attachment_array_non_uniform_indexing,
|
// features.shader_uniform_buffer_array_non_uniform_indexing,
|
||||||
.shaderUniformTexelBufferArrayNonUniformIndexing = features.shader_uniform_texel_buffer_array_non_uniform_indexing,
|
// .shaderSampledImageArrayNonUniformIndexing =
|
||||||
.shaderStorageTexelBufferArrayNonUniformIndexing = features.shader_storage_texel_buffer_array_non_uniform_indexing,
|
// features.shader_sampled_image_array_non_uniform_indexing,
|
||||||
.descriptorBindingUniformBufferUpdateAfterBind = features.descriptor_binding_uniform_buffer_update_after_bind,
|
// .shaderStorageBufferArrayNonUniformIndexing =
|
||||||
.descriptorBindingSampledImageUpdateAfterBind = features.descriptor_binding_sampled_image_update_after_bind,
|
// features.shader_storage_buffer_array_non_uniform_indexing,
|
||||||
.descriptorBindingStorageImageUpdateAfterBind = features.descriptor_binding_storage_image_update_after_bind,
|
// .shaderStorageImageArrayNonUniformIndexing =
|
||||||
.descriptorBindingStorageBufferUpdateAfterBind = features.descriptor_binding_storage_buffer_update_after_bind,
|
// features.shader_storage_image_array_non_uniform_indexing,
|
||||||
.descriptorBindingUniformTexelBufferUpdateAfterBind = features.descriptor_binding_uniform_texel_buffer_update_after_bind,
|
// .shaderInputAttachmentArrayNonUniformIndexing =
|
||||||
.descriptorBindingStorageTexelBufferUpdateAfterBind = features.descriptor_binding_storage_texel_buffer_update_after_bind,
|
// features.shader_input_attachment_array_non_uniform_indexing,
|
||||||
.descriptorBindingUpdateUnusedWhilePending = features.descriptor_binding_update_unused_while_pending,
|
// .shaderUniformTexelBufferArrayNonUniformIndexing =
|
||||||
.descriptorBindingPartiallyBound = features.descriptor_binding_partially_bound,
|
// features.shader_uniform_texel_buffer_array_non_uniform_indexing,
|
||||||
.descriptorBindingVariableDescriptorCount = features.descriptor_binding_variable_descriptor_count,
|
// .shaderStorageTexelBufferArrayNonUniformIndexing =
|
||||||
.runtimeDescriptorArray = features.runtime_descriptor_array,
|
// features.shader_storage_texel_buffer_array_non_uniform_indexing,
|
||||||
// clang-format on
|
// .descriptorBindingUniformBufferUpdateAfterBind =
|
||||||
};
|
// features.descriptor_binding_uniform_buffer_update_after_bind,
|
||||||
|
// .descriptorBindingSampledImageUpdateAfterBind =
|
||||||
// *last_p_next = &vk_descriptor_indexing_features;
|
// features.descriptor_binding_sampled_image_update_after_bind,
|
||||||
// last_p_next = &vk_descriptor_indexing_features.pNext;
|
// .descriptorBindingStorageImageUpdateAfterBind =
|
||||||
}
|
// features.descriptor_binding_storage_image_update_after_bind,
|
||||||
|
// .descriptorBindingStorageBufferUpdateAfterBind =
|
||||||
|
// features.descriptor_binding_storage_buffer_update_after_bind,
|
||||||
|
// .descriptorBindingUniformTexelBufferUpdateAfterBind =
|
||||||
|
// features.descriptor_binding_uniform_texel_buffer_update_after_bind,
|
||||||
|
// .descriptorBindingStorageTexelBufferUpdateAfterBind =
|
||||||
|
// features.descriptor_binding_storage_texel_buffer_update_after_bind,
|
||||||
|
// .descriptorBindingUpdateUnusedWhilePending =
|
||||||
|
// features.descriptor_binding_update_unused_while_pending,
|
||||||
|
// .descriptorBindingPartiallyBound = features.descriptor_binding_partially_bound,
|
||||||
|
// .descriptorBindingVariableDescriptorCount =
|
||||||
|
// features.descriptor_binding_variable_descriptor_count, .runtimeDescriptorArray =
|
||||||
|
// features.runtime_descriptor_array,
|
||||||
|
// // clang-format on
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// // *last_p_next = &vk_descriptor_indexing_features;
|
||||||
|
// // last_p_next = &vk_descriptor_indexing_features.pNext;
|
||||||
|
// }
|
||||||
for (auto name : vk_extension_names)
|
for (auto name : vk_extension_names)
|
||||||
{
|
{
|
||||||
log::debug("Extension name: {}", name);
|
log::debug("Extension name: {}", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto physical_device_features = VkPhysicalDeviceFeatures {};
|
||||||
auto vk_info = VkDeviceCreateInfo {
|
auto vk_info = VkDeviceCreateInfo {
|
||||||
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
|
||||||
.pNext = &vk_dynamic_rendering_features,
|
.pNext = &vk_dynamic_rendering_features,
|
||||||
|
|
@ -3672,7 +3693,7 @@ Device::Device(const Gpu &gpu, CreateInfo info)
|
||||||
.pQueueCreateInfos = vk_queue_infos.data(),
|
.pQueueCreateInfos = vk_queue_infos.data(),
|
||||||
.enabledExtensionCount = static_cast<uint32_t>(vk_extension_names.size()),
|
.enabledExtensionCount = static_cast<uint32_t>(vk_extension_names.size()),
|
||||||
.ppEnabledExtensionNames = vk_extension_names.data(),
|
.ppEnabledExtensionNames = vk_extension_names.data(),
|
||||||
.pEnabledFeatures = &vk_features_2.features, // replaced with VkPhysicalDeviceFeatures2
|
.pEnabledFeatures = &physical_device_features,
|
||||||
};
|
};
|
||||||
|
|
||||||
vkc(api::create_device(gpu.m_physical_device, &vk_info, nullptr, &m_device));
|
vkc(api::create_device(gpu.m_physical_device, &vk_info, nullptr, &m_device));
|
||||||
|
|
@ -3682,6 +3703,7 @@ Device::~Device()
|
||||||
{
|
{
|
||||||
if (m_device)
|
if (m_device)
|
||||||
{
|
{
|
||||||
|
log::debug("Destrying device");
|
||||||
api::destroy_device(m_device, nullptr);
|
api::destroy_device(m_device, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,9 @@ void Device::initialize_logical_device()
|
||||||
vk::device_extension_names::descriptor_indexing,
|
vk::device_extension_names::descriptor_indexing,
|
||||||
vk::device_extension_names::depth_stencil_resolve,
|
vk::device_extension_names::depth_stencil_resolve,
|
||||||
vk::device_extension_names::maintenance_3,
|
vk::device_extension_names::maintenance_3,
|
||||||
vk::device_extension_names::create_renderpass2,
|
vk::device_extension_names::maintenance_2,
|
||||||
|
vk::device_extension_names::create_renderpass_2,
|
||||||
|
vk::device_extension_names::multiview,
|
||||||
},
|
},
|
||||||
|
|
||||||
.features = {},
|
.features = {},
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue