Skip to content

Commit 5365071

Browse files
committed
gpu: De-duplicate property enumeration for Vulkan features
1 parent b7ea19d commit 5365071

File tree

1 file changed

+21
-34
lines changed

1 file changed

+21
-34
lines changed

src/gpu/vulkan/SDL_gpu_vulkan.c

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12332,10 +12332,27 @@ static void VULKAN_INTERNAL_LoadEntryPoints(void)
1233212332
}
1233312333

1233412334
static 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

Comments
 (0)