13 SamplerLibraryVK::SamplerLibraryVK(
14 const std::weak_ptr<DeviceHolder>& device_holder)
15 : device_holder_(device_holder) {}
19 std::shared_ptr<const Sampler> SamplerLibraryVK::GetSampler(
20 SamplerDescriptor desc) {
21 auto found = samplers_.find(desc);
22 if (found != samplers_.end()) {
25 auto device_holder = device_holder_.lock();
26 if (!device_holder || !device_holder->GetDevice()) {
39 const auto sampler_create_info =
40 vk::SamplerCreateInfo()
41 .setMagFilter(mag_filter)
42 .setMinFilter(min_filter)
43 .setAddressModeU(address_mode_u)
44 .setAddressModeV(address_mode_v)
45 .setAddressModeW(address_mode_w)
46 .setBorderColor(vk::BorderColor::eFloatTransparentBlack)
47 .setMipmapMode(mip_map);
50 device_holder->GetDevice().createSamplerUnique(sampler_create_info);
51 if (res.result != vk::Result::eSuccess) {
52 FML_LOG(ERROR) <<
"Failed to create sampler: " << vk::to_string(res.result);
56 auto sampler = std::make_shared<SamplerVK>(desc, std::move(res.value));
58 if (!sampler->IsValid()) {
62 if (!desc.label.empty()) {
67 samplers_[desc] = sampler;