RaytracingPipelineVk.h#

Includes#

  • PVRVk/DeviceVk.h

  • PVRVk/PipelineConfigVk.h

  • PVRVk/PipelineVk.h

Included By#

Namespaces#

Classes#

Source Code#

#pragma once
#include "PVRVk/PipelineVk.h"
#include "PVRVk/DeviceVk.h"
#include "PVRVk/PipelineConfigVk.h"
namespace pvrvk {
struct RaytracingPipelineCreateInfo : public PipelineCreateInfo<RaytracingPipeline>
{
public:
    std::vector<PipelineShaderStageCreateInfo> stages;

    std::vector<RayTracingShaderGroupCreateInfo> shaderGroups;

    uint32_t maxRecursionDepth;

    RaytracingPipelineCreateInfo() : PipelineCreateInfo(), maxRecursionDepth(0) {}
};

namespace impl {
class RaytracingPipeline_ : public Pipeline<RaytracingPipeline, RaytracingPipelineCreateInfo>
{
private:
    friend class Device_;

    class make_shared_enabler
    {
    protected:
        make_shared_enabler() {}
        friend class RaytracingPipeline_;
    };

    static RaytracingPipeline constructShared(const DeviceWeakPtr& device, VkPipeline vkPipeline, const RaytracingPipelineCreateInfo& desc)
    {
        return std::make_shared<RaytracingPipeline_>(make_shared_enabler{}, device, vkPipeline, desc);
    }

public:
    DECLARE_NO_COPY_SEMANTICS(RaytracingPipeline_)
    RaytracingPipeline_(make_shared_enabler, const DeviceWeakPtr& device, VkPipeline vkPipeline, const RaytracingPipelineCreateInfo& desc) : Pipeline(device, vkPipeline, desc) {}
};
} // namespace impl
} // namespace pvrvk