# HG changeset patch # User sam # Date 1742137690 -25200 # Node ID 8125d5b0c68c9a630e7b0854d5cd77899c4b1928 # Parent e88f4e544f76bd60767fcbc8774d36f743869f0b add: some support for 16-bit data access in shaders, and a check diff -r e88f4e544f76 -r 8125d5b0c68c semicongine/rendering.nim --- a/semicongine/rendering.nim Wed Mar 12 22:18:38 2025 +0700 +++ b/semicongine/rendering.nim Sun Mar 16 22:08:10 2025 +0700 @@ -158,6 +158,14 @@ let enabledFeatures = VkPhysicalDeviceFeatures( fillModeNonSolid: true, depthClamp: true, wideLines: true, largePoints: true ) + + var vk16bitExt = VkPhysicalDevice16BitStorageFeatures( + sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, + storageBuffer16BitAccess: true, + uniformAndStorageBuffer16BitAccess: true, + storagePushConstant16: false, + storageInputOutput16: false, + ) var createDeviceInfo = VkDeviceCreateInfo( sType: VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, queueCreateInfoCount: 1, @@ -167,6 +175,7 @@ enabledExtensionCount: uint32(deviceExtensions.len), ppEnabledExtensionNames: deviceExtensionsC, pEnabledFeatures: addr(enabledFeatures), + pNext: addr(vk16bitExt), ) checkVkResult vkCreateDevice( physicalDevice = result.physicalDevice, diff -r e88f4e544f76 -r 8125d5b0c68c semicongine/rendering/shaders.nim --- a/semicongine/rendering/shaders.nim Wed Mar 12 22:18:38 2025 +0700 +++ b/semicongine/rendering/shaders.nim Sun Mar 16 22:08:10 2025 +0700 @@ -349,6 +349,9 @@ for constFieldName, constFieldValue in fieldPairs(value): assert typeof(constFieldValue) is SupportedGPUType, "push constant field '" & constFieldName & "' is not a SupportedGPUType" + assert not ( + typeof(constFieldValue) is uint16 or typeof(constFieldValue) is int16 + ), "16-bit members are not supported for push constants" pushConstants.add " " & glslType(constFieldValue) & " " & constFieldName & ";" pushConstants.add "} " & fieldname & ";" else: