blob: b570b24fceed12395aac773c51bab6a48541757f [file]
/*
* Copyright 2026 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_graphite_VulkanComputePipeline_DEFINED
#define skgpu_graphite_VulkanComputePipeline_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/core/SkSpan.h"
#include "include/gpu/vk/VulkanTypes.h"
#include "include/private/SkTArray.h"
#include "src/gpu/graphite/ComputePipeline.h"
#include "src/gpu/graphite/DescriptorData.h"
namespace skgpu::graphite {
class ComputePipelineDesc;
class VulkanSharedContext;
class VulkanComputePipeline final : public ComputePipeline {
public:
static sk_sp<VulkanComputePipeline> Make(VulkanSharedContext*,
const ComputePipelineDesc&);
~VulkanComputePipeline() override = default;
VkPipeline vkPipeline() const { return fPipeline; }
VkPipelineLayout vkPipelineLayout() const { return fPipelineLayout; }
SkSpan<const DescriptorData> descriptorData() const { return fDescriptorData; }
VkDescriptorType bindingType(size_t index) const;
VkAccessFlags bufferAccessFlags(size_t index) const;
private:
VulkanComputePipeline(const SharedContext*,
VkPipeline,
VkPipelineLayout,
skia_private::TArray<DescriptorData> descriptorData,
skia_private::TArray<VkAccessFlags> bufferAccessFlags);
void freeGpuData() override;
VkPipeline fPipeline;
VkPipelineLayout fPipelineLayout;
skia_private::TArray<DescriptorData> fDescriptorData;
skia_private::TArray<VkAccessFlags> fBufferAccessFlags;
};
} // namespace skgpu::graphite
#endif // skgpu_graphite_VulkanComputePipeline_DEFINED