@@ -307,7 +307,9 @@ namespace ZEngine::Hardwares
307307 physical_device_descriptor_indexing_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
308308 VkPhysicalDeviceFeatures2 device_features_2 = {};
309309 device_features_2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
310- device_features_2.features = PhysicalDeviceFeature.features ;
310+ device_features_2.features .drawIndirectFirstInstance = PhysicalDeviceFeature.features .drawIndirectFirstInstance ;
311+ device_features_2.features .multiDrawIndirect = PhysicalDeviceFeature.features .multiDrawIndirect ;
312+ device_features_2.features .samplerAnisotropy = PhysicalDeviceFeature.features .samplerAnisotropy ;
311313
312314 if (PhysicalDeviceSupportSampledImageBindless || PhysicalDeviceSupportStorageBufferBindless)
313315 {
@@ -417,9 +419,29 @@ namespace ZEngine::Hardwares
417419 CommandBufferMgr->Initialize (this , SwapchainPtr->BufferredFrameCount );
418420
419421 /*
420- * Creating Global Descriptor Pool for : Textures
422+ * Creating Global Descriptor Pool for : Textures, Samplers
421423 */
422- MaxGlobalTexture = std::min (MaxGlobalTexture, PhysicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSampledImages - 1 );
424+ VkSamplerCreateInfo sampler_create_info = {};
425+ sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
426+ sampler_create_info.minFilter = VK_FILTER_LINEAR;
427+ sampler_create_info.magFilter = VK_FILTER_LINEAR;
428+ sampler_create_info.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT;
429+ sampler_create_info.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
430+ sampler_create_info.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
431+ sampler_create_info.anisotropyEnable = PhysicalDeviceFeature.features .samplerAnisotropy ;
432+ sampler_create_info.maxAnisotropy = PhysicalDeviceFeature.features .samplerAnisotropy ? PhysicalDeviceProperties.properties .limits .maxSamplerAnisotropy : 1 .0f ;
433+ sampler_create_info.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK;
434+ sampler_create_info.unnormalizedCoordinates = VK_FALSE;
435+ sampler_create_info.compareEnable = VK_FALSE;
436+ sampler_create_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
437+ sampler_create_info.mipLodBias = 0 .0f ;
438+ sampler_create_info.minLod = 0 .0f ;
439+ sampler_create_info.maxLod = VK_LOD_CLAMP_NONE;
440+
441+ ZENGINE_VALIDATE_ASSERT (vkCreateSampler (LogicalDevice, &sampler_create_info, nullptr , &GlobalLinearWrapSampler) == VK_SUCCESS, " Failed to create Texture Sampler" )
442+
443+ GlobalLinearWrapSamplerImageInfo = VkDescriptorImageInfo{.sampler = GlobalLinearWrapSampler, .imageView = VK_NULL_HANDLE, .imageLayout = VK_IMAGE_LAYOUT_UNDEFINED};
444+ MaxGlobalTexture = std::min (MaxGlobalTexture, PhysicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSampledImages - 1 );
423445
424446 GlobalTextures.Initialize (Arena, MaxGlobalTexture);
425447 Image2DBufferManager.Initialize (Arena, MaxGlobalTexture);
@@ -434,7 +456,7 @@ namespace ZEngine::Hardwares
434456
435457 VkDescriptorPoolSize pool_sizes[] = {
436458 {.type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, .descriptorCount = (MaxGlobalTexture * SwapchainPtr->BufferredFrameCount )},
437- {.type = VK_DESCRIPTOR_TYPE_SAMPLER, .descriptorCount = (1 * SwapchainPtr->BufferredFrameCount )}
459+ { .type = VK_DESCRIPTOR_TYPE_SAMPLER, .descriptorCount = (1 * SwapchainPtr->BufferredFrameCount )}
438460 };
439461
440462 for (const auto & layout_binding_set : ShaderReservedLayoutBindingSpecificationMap)
@@ -581,11 +603,13 @@ namespace ZEngine::Hardwares
581603 __destroyDebugMessengerPtr = nullptr ;
582604 __createDebugMessengerPtr = nullptr ;
583605 }
606+ vkDestroySampler (LogicalDevice, GlobalLinearWrapSampler, nullptr );
584607 vkDestroyDevice (LogicalDevice, nullptr );
585608 vkDestroyInstance (Instance, nullptr );
586609
587- LogicalDevice = VK_NULL_HANDLE;
588- Instance = VK_NULL_HANDLE;
610+ GlobalLinearWrapSampler = VK_NULL_HANDLE;
611+ LogicalDevice = VK_NULL_HANDLE;
612+ Instance = VK_NULL_HANDLE;
589613 }
590614
591615 bool VulkanDevice::QueueSubmit (const VkPipelineStageFlags wait_stage_flag, CommandBuffer* command_buffer, Rendering::Primitives::Semaphore* const signal_semaphore, Rendering::Primitives::Fence* const fence)
@@ -726,7 +750,7 @@ namespace ZEngine::Hardwares
726750 switch (res_handle.Type )
727751 {
728752 case Rendering::DeviceResourceType::SAMPLER:
729- vkDestroySampler (LogicalDevice, reinterpret_cast <VkSampler>(res_handle.Handle ), nullptr );
753+ // vkDestroySampler(LogicalDevice, reinterpret_cast<VkSampler>(res_handle.Handle), nullptr);
730754 break ;
731755 case Rendering::DeviceResourceType::FRAMEBUFFER:
732756 vkDestroyFramebuffer (LogicalDevice, reinterpret_cast <VkFramebuffer>(res_handle.Handle ), nullptr );
@@ -810,7 +834,7 @@ namespace ZEngine::Hardwares
810834 BufferImage& buffer = DirtyBufferImages[handle];
811835
812836 vkDestroyImageView (LogicalDevice, buffer.ViewHandle , nullptr );
813- vkDestroySampler (LogicalDevice, buffer.Sampler , nullptr );
837+ // vkDestroySampler(LogicalDevice, buffer.Sampler, nullptr);
814838 vmaDestroyImage (VmaAllocatorValue, buffer.Handle , buffer.Allocation );
815839
816840 DirtyBufferImages.Remove (handle);
@@ -972,41 +996,14 @@ namespace ZEngine::Hardwares
972996 ZENGINE_VALIDATE_ASSERT (vmaCreateImage (VmaAllocatorValue, &image_create_info, &allocation_create_info, &(buffer_image.Handle ), &(buffer_image.Allocation ), nullptr ) == VK_SUCCESS, " Failed to create buffer" );
973997
974998 buffer_image.ViewHandle = CreateImageView (buffer_image.Handle , image_format, image_view_type, image_aspect_flag, layer_count);
975- buffer_image.Sampler = CreateImageSampler () ;
999+ // buffer_image.Sampler = GlobalLinearWrapSampler ;
9761000
9771001 // Metadata info
9781002 buffer_image.FrameIndex = SwapchainPtr->CurrentFrame == nullptr ? 0u : SwapchainPtr->CurrentFrame ->Index ;
9791003
9801004 return buffer_image;
9811005 }
9821006
983- VkSampler VulkanDevice::CreateImageSampler ()
984- {
985- VkSampler sampler{VK_NULL_HANDLE};
986-
987- VkSamplerCreateInfo sampler_create_info = {};
988- sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
989- sampler_create_info.minFilter = VK_FILTER_LINEAR;
990- sampler_create_info.magFilter = VK_FILTER_LINEAR;
991- sampler_create_info.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT;
992- sampler_create_info.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
993- sampler_create_info.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
994- sampler_create_info.anisotropyEnable = PhysicalDeviceFeature.features .samplerAnisotropy ;
995- sampler_create_info.maxAnisotropy = PhysicalDeviceFeature.features .samplerAnisotropy ? PhysicalDeviceProperties.properties .limits .maxSamplerAnisotropy : 1 .0f ;
996- sampler_create_info.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
997- sampler_create_info.unnormalizedCoordinates = VK_FALSE;
998- sampler_create_info.compareEnable = VK_FALSE;
999- sampler_create_info.compareOp = VK_COMPARE_OP_ALWAYS;
1000- sampler_create_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
1001- sampler_create_info.mipLodBias = 0 .0f ;
1002- sampler_create_info.minLod = -1000 .0f ;
1003- sampler_create_info.maxLod = 1000 .0f ;
1004-
1005- ZENGINE_VALIDATE_ASSERT (vkCreateSampler (LogicalDevice, &sampler_create_info, nullptr , &sampler) == VK_SUCCESS, " Failed to create Texture Sampler" )
1006-
1007- return sampler;
1008- }
1009-
10101007 VkFormat VulkanDevice::FindSupportedFormat (Core::Containers::ArrayView<VkFormat> format_collection, VkImageTiling image_tiling, VkFormatFeatureFlags feature_flags)
10111008 {
10121009 VkFormat supported_format = VK_FORMAT_UNDEFINED;
@@ -1186,7 +1183,7 @@ namespace ZEngine::Hardwares
11861183 switch (res_handle.Type )
11871184 {
11881185 case Rendering::DeviceResourceType::SAMPLER:
1189- vkDestroySampler (LogicalDevice, reinterpret_cast <VkSampler>(res_handle.Handle ), nullptr );
1186+ // vkDestroySampler(LogicalDevice, reinterpret_cast<VkSampler>(res_handle.Handle), nullptr);
11901187 break ;
11911188 case Rendering::DeviceResourceType::FRAMEBUFFER:
11921189 vkDestroyFramebuffer (LogicalDevice, reinterpret_cast <VkFramebuffer>(res_handle.Handle ), nullptr );
@@ -1279,7 +1276,7 @@ namespace ZEngine::Hardwares
12791276 if (buffer && buffer.FrameIndex == SwapchainPtr->CurrentFrame ->Index )
12801277 {
12811278 vkDestroyImageView (LogicalDevice, buffer.ViewHandle , nullptr );
1282- vkDestroySampler (LogicalDevice, buffer.Sampler , nullptr );
1279+ // vkDestroySampler(LogicalDevice, buffer.Sampler, nullptr);
12831280 vmaDestroyImage (VmaAllocatorValue, buffer.Handle , buffer.Allocation );
12841281 buffer.Handle = VK_NULL_HANDLE;
12851282 buffer.Allocation = VK_NULL_HANDLE;
0 commit comments