@@ -12332,10 +12332,27 @@ static void VULKAN_INTERNAL_LoadEntryPoints(void)
1233212332}
1233312333
1233412334static bool VULKAN_INTERNAL_PrepareVulkan (
12335- VulkanRenderer * renderer )
12335+ VulkanRenderer * renderer ,
12336+ SDL_PropertiesID props )
1233612337{
1233712338 VULKAN_INTERNAL_LoadEntryPoints ();
1233812339
12340+ // Opt out device features (higher compatibility in exchange for reduced functionality)
12341+ renderer -> desiredVulkan10DeviceFeatures .samplerAnisotropy = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12342+ renderer -> desiredVulkan10DeviceFeatures .depthClamp = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12343+ renderer -> desiredVulkan10DeviceFeatures .shaderClipDistance = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12344+ renderer -> desiredVulkan10DeviceFeatures .drawIndirectFirstInstance = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12345+
12346+ // These features have near universal support so they are always enabled
12347+ renderer -> desiredVulkan10DeviceFeatures .independentBlend = VK_TRUE ;
12348+ renderer -> desiredVulkan10DeviceFeatures .sampleRateShading = VK_TRUE ;
12349+ renderer -> desiredVulkan10DeviceFeatures .imageCubeArray = VK_TRUE ;
12350+
12351+ // Handle opt-in device features
12352+ VULKAN_INTERNAL_AddOptInVulkanOptions (props , renderer );
12353+
12354+ renderer -> requireHardwareAcceleration = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN , false);
12355+
1233912356 if (!VULKAN_INTERNAL_CreateInstance (renderer )) {
1234012357 SDL_LogWarn (SDL_LOG_CATEGORY_GPU , "Vulkan: Could not create Vulkan instance" );
1234112358 return false;
@@ -12375,23 +12392,9 @@ static bool VULKAN_PrepareDriver(SDL_VideoDevice *_this, SDL_PropertiesID props)
1237512392 // This needs to be set early for log filtering
1237612393 renderer -> debugMode = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN , false);
1237712394
12378- // Opt out device features (higher compatibility in exchange for reduced functionality)
12379- renderer -> desiredVulkan10DeviceFeatures .samplerAnisotropy = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12380- renderer -> desiredVulkan10DeviceFeatures .depthClamp = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12381- renderer -> desiredVulkan10DeviceFeatures .shaderClipDistance = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12382- renderer -> desiredVulkan10DeviceFeatures .drawIndirectFirstInstance = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12383-
12384- // These features have near universal support so they are always enabled
12385- renderer -> desiredVulkan10DeviceFeatures .independentBlend = VK_TRUE ;
12386- renderer -> desiredVulkan10DeviceFeatures .sampleRateShading = VK_TRUE ;
12387- renderer -> desiredVulkan10DeviceFeatures .imageCubeArray = VK_TRUE ;
12395+ renderer -> preferLowPower = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN , false);
1238812396
12389- // Handle opt-in device features
12390- VULKAN_INTERNAL_AddOptInVulkanOptions (props , renderer );
12391-
12392- renderer -> requireHardwareAcceleration = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN , false);
12393-
12394- result = VULKAN_INTERNAL_PrepareVulkan (renderer );
12397+ result = VULKAN_INTERNAL_PrepareVulkan (renderer , props );
1239512398 if (result ) {
1239612399 renderer -> vkDestroyInstance (renderer -> instance , NULL );
1239712400 }
@@ -12430,23 +12433,7 @@ static SDL_GPUDevice *VULKAN_CreateDevice(bool debugMode, bool preferLowPower, S
1243012433 renderer -> preferLowPower = preferLowPower ;
1243112434 renderer -> allowedFramesInFlight = 2 ;
1243212435
12433- // Opt out device features (higher compatibility in exchange for reduced functionality)
12434- renderer -> desiredVulkan10DeviceFeatures .samplerAnisotropy = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12435- renderer -> desiredVulkan10DeviceFeatures .depthClamp = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12436- renderer -> desiredVulkan10DeviceFeatures .shaderClipDistance = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12437- renderer -> desiredVulkan10DeviceFeatures .drawIndirectFirstInstance = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN , true) ? VK_TRUE : VK_FALSE ;
12438-
12439- // These features have near universal support so they are always enabled
12440- renderer -> desiredVulkan10DeviceFeatures .independentBlend = VK_TRUE ;
12441- renderer -> desiredVulkan10DeviceFeatures .sampleRateShading = VK_TRUE ;
12442- renderer -> desiredVulkan10DeviceFeatures .imageCubeArray = VK_TRUE ;
12443-
12444- // Handle opt-in device features
12445- VULKAN_INTERNAL_AddOptInVulkanOptions (props , renderer );
12446-
12447- renderer -> requireHardwareAcceleration = SDL_GetBooleanProperty (props , SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN , false);
12448-
12449- if (!VULKAN_INTERNAL_PrepareVulkan (renderer )) {
12436+ if (!VULKAN_INTERNAL_PrepareVulkan (renderer , props )) {
1245012437 SET_STRING_ERROR ("Failed to initialize Vulkan!" );
1245112438 SDL_free (renderer );
1245212439 SDL_Vulkan_UnloadLibrary ();
0 commit comments