26 :
public Pipeline<PipelineDescriptor>,
27 public BackendCast<PipelineVK, Pipeline<PipelineDescriptor>> {
29 static std::unique_ptr<PipelineVK>
Create(
31 const std::shared_ptr<DeviceHolderVK>& device_holder,
32 const std::weak_ptr<PipelineLibrary>& weak_library,
34 std::shared_ptr<SamplerVK> immutable_sampler = {});
46 const std::shared_ptr<SamplerVK>& immutable_sampler)
const;
53 using ImmutableSamplerVariants =
55 std::shared_ptr<PipelineVK>,
59 std::weak_ptr<DeviceHolderVK> device_holder_;
60 vk::UniquePipeline pipeline_;
61 vk::UniqueRenderPass render_pass_;
62 vk::UniquePipelineLayout
layout_;
63 vk::UniqueDescriptorSetLayout descriptor_set_layout_;
64 std::shared_ptr<SamplerVK> immutable_sampler_;
66 mutable Mutex immutable_sampler_variants_mutex_;
67 mutable ImmutableSamplerVariants immutable_sampler_variants_
69 bool is_valid_ =
false;
71 PipelineVK(std::weak_ptr<DeviceHolderVK> device_holder,
72 std::weak_ptr<PipelineLibrary> library,
74 vk::UniquePipeline pipeline,
75 vk::UniqueRenderPass render_pass,
76 vk::UniquePipelineLayout layout,
77 vk::UniqueDescriptorSetLayout descriptor_set_layout,
79 std::shared_ptr<SamplerVK> immutable_sampler);
82 bool IsValid()
const override;
static std::unique_ptr< PipelineVK > Create(const PipelineDescriptor &desc, const std::shared_ptr< DeviceHolderVK > &device_holder, const std::weak_ptr< PipelineLibrary > &weak_library, PipelineKey pipeline_key, std::shared_ptr< SamplerVK > immutable_sampler={})