17 const std::shared_ptr<YUVConversionVK>& yuv_conversion) {
25 vk::StructureChain<vk::SamplerCreateInfo,
27 vk::SamplerYcbcrConversionInfo>
30 auto& sampler_info = sampler_chain.get();
32 sampler_info.magFilter = mag_filter;
33 sampler_info.minFilter = min_filter;
34 sampler_info.addressModeU = address_mode_u;
35 sampler_info.addressModeV = address_mode_v;
36 sampler_info.addressModeW = address_mode_w;
37 sampler_info.borderColor = vk::BorderColor::eFloatTransparentBlack;
38 sampler_info.maxLod = VK_LOD_CLAMP_NONE;
44 sampler_info.maxAnisotropy =
static_cast<float>(desc.
max_anisotropy);
49 sampler_info.mipmapMode = vk::SamplerMipmapMode::eNearest;
50 sampler_info.minLod = sampler_info.maxLod = 0.0f;
53 sampler_info.mipmapMode = vk::SamplerMipmapMode::eNearest;
56 sampler_info.mipmapMode = vk::SamplerMipmapMode::eLinear;
60 if (yuv_conversion && yuv_conversion->IsValid()) {
61 sampler_chain.get<vk::SamplerYcbcrConversionInfo>().conversion =
62 yuv_conversion->GetConversion();
74 sampler_info.minFilter = sampler_info.magFilter =
75 yuv_conversion->GetDescriptor().get().chromaFilter;
84 sampler_info.addressModeU = vk::SamplerAddressMode::eClampToEdge;
85 sampler_info.addressModeV = vk::SamplerAddressMode::eClampToEdge;
86 sampler_info.addressModeW = vk::SamplerAddressMode::eClampToEdge;
87 sampler_info.anisotropyEnable =
false;
88 sampler_info.unnormalizedCoordinates =
false;
90 sampler_chain.unlink<vk::SamplerYcbcrConversionInfo>();
93 auto sampler =
device.createSamplerUnique(sampler_chain.get());
94 if (sampler.result != vk::Result::eSuccess) {
96 << vk::to_string(sampler.result);
100 if (!desc.
label.empty()) {
104 return std::move(sampler.value);
bool SetDebugName(T handle, std::string_view label) const
std::optional< PipelineDescriptor > desc_