--- a/SamTFE/Sources/Engine/Graphics/Gfx_Vulkan.cpp 2022-06-02 22:21:09.612476908 +0300 +++ b/SamTFE/Sources/Engine/Graphics/Gfx_Vulkan.cpp 2022-06-05 09:29:39.377281128 +0300 @@ -791,9 +791,68 @@ qinfo.pQueuePriorities = priorities; } +#ifndef PLATFORM_RPI4 VkPhysicalDeviceFeatures features = {}; - features.samplerAnisotropy = VK_TRUE; - features.depthBounds = VK_TRUE; + features.samplerAnisotropy = VK_TRUE; + features.depthBounds = VK_TRUE; +#else + VkPhysicalDeviceFeatures features = {}; + features.robustBufferAccess = VK_TRUE; + features.fullDrawIndexUint32 = VK_FALSE; + features.imageCubeArray = VK_TRUE; + features.independentBlend = VK_TRUE; + features.geometryShader = VK_TRUE; + features.tessellationShader = VK_FALSE; + features.sampleRateShading = VK_TRUE; + features.dualSrcBlend = VK_FALSE; + features.logicOp = VK_TRUE; + features.multiDrawIndirect = VK_FALSE; + features.drawIndirectFirstInstance = VK_TRUE; + features.depthClamp = VK_FALSE; + features.depthBiasClamp = VK_TRUE; + features.fillModeNonSolid = VK_TRUE; + features.depthBounds = VK_FALSE; + features.wideLines = VK_TRUE; + features.largePoints = VK_TRUE; + features.alphaToOne = VK_TRUE; + features.multiViewport = VK_FALSE; + features.samplerAnisotropy = VK_TRUE; + features.textureCompressionETC2 = VK_TRUE; + features.textureCompressionASTC_LDR = VK_TRUE; + features.textureCompressionBC = VK_FALSE; + features.occlusionQueryPrecise = VK_TRUE; + features.pipelineStatisticsQuery = VK_FALSE; + features.vertexPipelineStoresAndAtomics = VK_TRUE; + features.fragmentStoresAndAtomics = VK_TRUE; + features.shaderTessellationAndGeometryPointSize = VK_TRUE; + features.shaderImageGatherExtended = VK_FALSE; + features.shaderStorageImageExtendedFormats = VK_TRUE; + features.shaderStorageImageMultisample = VK_FALSE; + features.shaderStorageImageReadWithoutFormat = VK_FALSE; + features.shaderStorageImageWriteWithoutFormat = VK_FALSE; + features.shaderUniformBufferArrayDynamicIndexing = VK_FALSE; + features.shaderSampledImageArrayDynamicIndexing = VK_FALSE; + features.shaderStorageBufferArrayDynamicIndexing = VK_FALSE; + features.shaderStorageImageArrayDynamicIndexing = VK_FALSE; + features.shaderClipDistance = VK_TRUE; + features.shaderCullDistance = VK_FALSE; + features.shaderFloat64 = VK_FALSE; + features.shaderInt64 = VK_FALSE; + features.shaderInt16 = VK_FALSE; + features.shaderResourceResidency = VK_FALSE; + features.shaderResourceMinLod = VK_FALSE; + features.sparseBinding = VK_FALSE; + features.sparseResidencyBuffer = VK_FALSE; + features.sparseResidencyImage2D = VK_FALSE; + features.sparseResidencyImage3D = VK_FALSE; + features.sparseResidency2Samples = VK_FALSE; + features.sparseResidency4Samples = VK_FALSE; + features.sparseResidency8Samples = VK_FALSE; + features.sparseResidency16Samples = VK_FALSE; + features.sparseResidencyAliased = VK_FALSE; + features.variableMultisampleRate = VK_FALSE; + features.inheritedQueries = VK_TRUE; +#endif VkDeviceCreateInfo createInfo = {}; createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; --- a/SamTSE/Sources/Engine/Graphics/Gfx_Vulkan.cpp 2022-06-02 22:21:09.612476908 +0300 +++ b/SamTSE/Sources/Engine/Graphics/Gfx_Vulkan.cpp 2022-06-05 09:29:39.377281128 +0300 @@ -791,9 +791,68 @@ qinfo.pQueuePriorities = priorities; } +#ifndef PLATFORM_RPI4 VkPhysicalDeviceFeatures features = {}; - features.samplerAnisotropy = VK_TRUE; - features.depthBounds = VK_TRUE; + features.samplerAnisotropy = VK_TRUE; + features.depthBounds = VK_TRUE; +#else + VkPhysicalDeviceFeatures features = {}; + features.robustBufferAccess = VK_TRUE; + features.fullDrawIndexUint32 = VK_FALSE; + features.imageCubeArray = VK_TRUE; + features.independentBlend = VK_TRUE; + features.geometryShader = VK_TRUE; + features.tessellationShader = VK_FALSE; + features.sampleRateShading = VK_TRUE; + features.dualSrcBlend = VK_FALSE; + features.logicOp = VK_TRUE; + features.multiDrawIndirect = VK_FALSE; + features.drawIndirectFirstInstance = VK_TRUE; + features.depthClamp = VK_FALSE; + features.depthBiasClamp = VK_TRUE; + features.fillModeNonSolid = VK_TRUE; + features.depthBounds = VK_FALSE; + features.wideLines = VK_TRUE; + features.largePoints = VK_TRUE; + features.alphaToOne = VK_TRUE; + features.multiViewport = VK_FALSE; + features.samplerAnisotropy = VK_TRUE; + features.textureCompressionETC2 = VK_TRUE; + features.textureCompressionASTC_LDR = VK_TRUE; + features.textureCompressionBC = VK_FALSE; + features.occlusionQueryPrecise = VK_TRUE; + features.pipelineStatisticsQuery = VK_FALSE; + features.vertexPipelineStoresAndAtomics = VK_TRUE; + features.fragmentStoresAndAtomics = VK_TRUE; + features.shaderTessellationAndGeometryPointSize = VK_TRUE; + features.shaderImageGatherExtended = VK_FALSE; + features.shaderStorageImageExtendedFormats = VK_TRUE; + features.shaderStorageImageMultisample = VK_FALSE; + features.shaderStorageImageReadWithoutFormat = VK_FALSE; + features.shaderStorageImageWriteWithoutFormat = VK_FALSE; + features.shaderUniformBufferArrayDynamicIndexing = VK_FALSE; + features.shaderSampledImageArrayDynamicIndexing = VK_FALSE; + features.shaderStorageBufferArrayDynamicIndexing = VK_FALSE; + features.shaderStorageImageArrayDynamicIndexing = VK_FALSE; + features.shaderClipDistance = VK_TRUE; + features.shaderCullDistance = VK_FALSE; + features.shaderFloat64 = VK_FALSE; + features.shaderInt64 = VK_FALSE; + features.shaderInt16 = VK_FALSE; + features.shaderResourceResidency = VK_FALSE; + features.shaderResourceMinLod = VK_FALSE; + features.sparseBinding = VK_FALSE; + features.sparseResidencyBuffer = VK_FALSE; + features.sparseResidencyImage2D = VK_FALSE; + features.sparseResidencyImage3D = VK_FALSE; + features.sparseResidency2Samples = VK_FALSE; + features.sparseResidency4Samples = VK_FALSE; + features.sparseResidency8Samples = VK_FALSE; + features.sparseResidency16Samples = VK_FALSE; + features.sparseResidencyAliased = VK_FALSE; + features.variableMultisampleRate = VK_FALSE; + features.inheritedQueries = VK_TRUE; +#endif VkDeviceCreateInfo createInfo = {}; createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;