dxvk/src/dxvk/dxvk_sampler.h

83 lines
1.7 KiB
C++

#pragma once
#include "dxvk_resource.h"
namespace dxvk {
/**
* \brief Sampler properties
*/
struct DxvkSamplerCreateInfo {
/// Texture filter propertoes
VkFilter magFilter;
VkFilter minFilter;
/// Mipmapping properties
VkSamplerMipmapMode mipmapMode;
float mipmapLodBias;
float mipmapLodMin;
float mipmapLodMax;
/// Anisotropic filtering
VkBool32 useAnisotropy;
float maxAnisotropy;
/// Address modes
VkSamplerAddressMode addressModeU;
VkSamplerAddressMode addressModeV;
VkSamplerAddressMode addressModeW;
/// Compare op for shadow textures
VkBool32 compareToDepth;
VkCompareOp compareOp;
/// Texture border color
VkBorderColor borderColor;
/// Enables unnormalized coordinates
VkBool32 usePixelCoord;
};
/**
* \brief Sampler
*
* Manages a sampler object that can be bound to
* a pipeline. Sampler objects provide parameters
* for texture lookups within a shader.
*/
class DxvkSampler : public DxvkResource {
public:
DxvkSampler(
const Rc<vk::DeviceFn>& vkd,
const DxvkSamplerCreateInfo& info);
~DxvkSampler();
/**
* \brief Sampler handle
* \returns Sampler handle
*/
VkSampler handle() const {
return m_sampler;
}
/**
* \brief Sampler parameters
* \returns Sampler parameters
*/
const DxvkSamplerCreateInfo& info() const {
return m_info;
}
private:
Rc<vk::DeviceFn> m_vkd;
DxvkSamplerCreateInfo m_info;
VkSampler m_sampler = VK_NULL_HANDLE;
};
}