| 918 | } |
| 919 | |
| 920 | TextureData::TextureData( vk::PhysicalDevice const & physicalDevice, |
| 921 | vk::Device const & device, |
| 922 | vk::Extent2D const & extent_, |
| 923 | vk::ImageUsageFlags usageFlags, |
| 924 | vk::FormatFeatureFlags formatFeatureFlags, |
| 925 | bool anisotropyEnable, |
| 926 | bool forceStaging ) |
| 927 | : format( vk::Format::eR8G8B8A8Unorm ), extent( extent_ ) |
| 928 | { |
| 929 | vk::FormatProperties formatProperties = physicalDevice.getFormatProperties( format ); |
| 930 | |
| 931 | formatFeatureFlags |= vk::FormatFeatureFlagBits::eSampledImage; |
| 932 | needsStaging = forceStaging || ( ( formatProperties.linearTilingFeatures & formatFeatureFlags ) != formatFeatureFlags ); |
| 933 | vk::ImageTiling imageTiling; |
| 934 | vk::ImageLayout initialLayout; |
| 935 | vk::MemoryPropertyFlags requirements; |
| 936 | if ( needsStaging ) |
| 937 | { |
| 938 | assert( ( formatProperties.optimalTilingFeatures & formatFeatureFlags ) == formatFeatureFlags ); |
| 939 | stagingBufferData = |
| 940 | std::unique_ptr<BufferData>( new BufferData( physicalDevice, device, extent.width * extent.height * 4, vk::BufferUsageFlagBits::eTransferSrc ) ); |
| 941 | imageTiling = vk::ImageTiling::eOptimal; |
| 942 | usageFlags |= vk::ImageUsageFlagBits::eTransferDst; |
| 943 | initialLayout = vk::ImageLayout::eUndefined; |
| 944 | } |
| 945 | else |
| 946 | { |
| 947 | imageTiling = vk::ImageTiling::eLinear; |
| 948 | initialLayout = vk::ImageLayout::ePreinitialized; |
| 949 | requirements = vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible; |
| 950 | } |
| 951 | imageData = std::unique_ptr<ImageData>( new ImageData( physicalDevice, |
| 952 | device, |
| 953 | format, |
| 954 | extent, |
| 955 | imageTiling, |
| 956 | usageFlags | vk::ImageUsageFlagBits::eSampled, |
| 957 | initialLayout, |
| 958 | requirements, |
| 959 | vk::ImageAspectFlagBits::eColor ) ); |
| 960 | |
| 961 | sampler = device.createSampler( vk::SamplerCreateInfo( vk::SamplerCreateFlags(), |
| 962 | vk::Filter::eLinear, |
| 963 | vk::Filter::eLinear, |
| 964 | vk::SamplerMipmapMode::eLinear, |
| 965 | vk::SamplerAddressMode::eRepeat, |
| 966 | vk::SamplerAddressMode::eRepeat, |
| 967 | vk::SamplerAddressMode::eRepeat, |
| 968 | 0.0f, |
| 969 | anisotropyEnable, |
| 970 | 16.0f, |
| 971 | false, |
| 972 | vk::CompareOp::eNever, |
| 973 | 0.0f, |
| 974 | 0.0f, |
| 975 | vk::BorderColor::eFloatOpaqueBlack ) ); |
| 976 | } |
| 977 |
nothing calls this directly
no outgoing calls
no test coverage detected