92 lines
2.5 KiB
C++
92 lines
2.5 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
/*=============================================================================
|
|
VulkanState.h: Vulkan state definitions.
|
|
=============================================================================*/
|
|
|
|
#pragma once
|
|
|
|
#include "RHI.h"
|
|
#include "RHIResources.h"
|
|
#include "VulkanCommon.h"
|
|
#include "VulkanThirdParty.h"
|
|
|
|
class FVulkanDevice;
|
|
|
|
class FVulkanSamplerState : public FRHISamplerState
|
|
{
|
|
public:
|
|
FVulkanSamplerState(const VkSamplerCreateInfo& InInfo, FVulkanDevice& InDevice, const bool bInIsImmutable = false);
|
|
|
|
virtual bool IsImmutable() const final override { return bIsImmutable; }
|
|
|
|
VkSampler Sampler;
|
|
uint32 SamplerId;
|
|
FRHIDescriptorHandle BindlessHandle;
|
|
|
|
static void SetupSamplerCreateInfo(const FSamplerStateInitializerRHI& Initializer, FVulkanDevice& InDevice, VkSamplerCreateInfo& OutSamplerInfo);
|
|
|
|
virtual FRHIDescriptorHandle GetBindlessHandle() const override final { return BindlessHandle; }
|
|
|
|
private:
|
|
bool bIsImmutable;
|
|
};
|
|
|
|
class FVulkanRasterizerState : public FRHIRasterizerState
|
|
{
|
|
public:
|
|
FVulkanRasterizerState(const FRasterizerStateInitializerRHI& InInitializer);
|
|
|
|
static void ResetCreateInfo(VkPipelineRasterizationStateCreateInfo& OutInfo)
|
|
{
|
|
ZeroVulkanStruct(OutInfo, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO);
|
|
OutInfo.frontFace = VK_FRONT_FACE_CLOCKWISE;
|
|
OutInfo.lineWidth = 1.0f;
|
|
}
|
|
|
|
virtual bool GetInitializer(FRasterizerStateInitializerRHI& Out) override final
|
|
{
|
|
Out = Initializer;
|
|
return true;
|
|
}
|
|
|
|
VkPipelineRasterizationStateCreateInfo RasterizerState;
|
|
FRasterizerStateInitializerRHI Initializer;
|
|
};
|
|
|
|
class FVulkanDepthStencilState : public FRHIDepthStencilState
|
|
{
|
|
public:
|
|
FVulkanDepthStencilState(const FDepthStencilStateInitializerRHI& InInitializer)
|
|
{
|
|
Initializer = InInitializer;
|
|
}
|
|
|
|
virtual bool GetInitializer(FDepthStencilStateInitializerRHI& Out) override final
|
|
{
|
|
Out = Initializer;
|
|
return true;
|
|
}
|
|
|
|
void SetupCreateInfo(const FGraphicsPipelineStateInitializer& GfxPSOInit, VkPipelineDepthStencilStateCreateInfo& OutDepthStencilState);
|
|
|
|
FDepthStencilStateInitializerRHI Initializer;
|
|
};
|
|
|
|
class FVulkanBlendState : public FRHIBlendState
|
|
{
|
|
public:
|
|
FVulkanBlendState(const FBlendStateInitializerRHI& InInitializer);
|
|
|
|
virtual bool GetInitializer(FBlendStateInitializerRHI& Out) override final
|
|
{
|
|
Out = Initializer;
|
|
return true;
|
|
}
|
|
|
|
// array the pipeline state can point right to
|
|
VkPipelineColorBlendAttachmentState BlendStates[MaxSimultaneousRenderTargets];
|
|
|
|
FBlendStateInitializerRHI Initializer;
|
|
};
|