private PipelineDepthStencilStateCreateInfo CreateDepthStencilState(PipelineStateDescription pipelineStateDescription) { var description = pipelineStateDescription.DepthStencilState; return(new PipelineDepthStencilStateCreateInfo { StructureType = StructureType.PipelineDepthStencilStateCreateInfo, DepthTestEnable = description.DepthBufferEnable, StencilTestEnable = description.StencilEnable, DepthWriteEnable = description.DepthBufferWriteEnable, MinDepthBounds = 0.0f, MaxDepthBounds = 1.0f, DepthCompareOperation = VulkanConvertExtensions.ConvertComparisonFunction(description.DepthBufferFunction), Front = new StencilOperationState { CompareOperation = VulkanConvertExtensions.ConvertComparisonFunction(description.FrontFace.StencilFunction), DepthFailOperation = VulkanConvertExtensions.ConvertStencilOperation(description.FrontFace.StencilDepthBufferFail), FailOperation = VulkanConvertExtensions.ConvertStencilOperation(description.FrontFace.StencilFail), PassOperation = VulkanConvertExtensions.ConvertStencilOperation(description.FrontFace.StencilPass), CompareMask = description.StencilMask, WriteMask = description.StencilWriteMask }, Back = new StencilOperationState { CompareOperation = VulkanConvertExtensions.ConvertComparisonFunction(description.BackFace.StencilFunction), DepthFailOperation = VulkanConvertExtensions.ConvertStencilOperation(description.BackFace.StencilDepthBufferFail), FailOperation = VulkanConvertExtensions.ConvertStencilOperation(description.BackFace.StencilFail), PassOperation = VulkanConvertExtensions.ConvertStencilOperation(description.BackFace.StencilPass), CompareMask = description.StencilMask, WriteMask = description.StencilWriteMask } }); }
private unsafe void CreateNativeSampler() { var createInfo = new SamplerCreateInfo { StructureType = StructureType.SamplerCreateInfo, AddressModeU = ConvertAddressMode(Description.AddressU), AddressModeV = ConvertAddressMode(Description.AddressV), AddressModeW = ConvertAddressMode(Description.AddressW), MipLodBias = Description.MipMapLevelOfDetailBias, MaxAnisotropy = Description.MaxAnisotropy, CompareOperation = VulkanConvertExtensions.ConvertComparisonFunction(Description.CompareFunction), MinLod = Description.MinMipLevel, MaxLod = Description.MaxMipLevel, BorderColor = BorderColor.FloatOpaqueBlack // TODO VULKAN: How to handle BorderColor }; ConvertMinFilter(Description.Filter, out createInfo.MinFilter, out createInfo.MagFilter, out createInfo.MipmapMode, out createInfo.CompareEnable, out createInfo.AnisotropyEnable); NativeSampler = GraphicsDevice.NativeDevice.CreateSampler(ref createInfo); }