blob: 87889fe6c03a28b7a1e035cc1a344d4c93dc451b [file] [log] [blame]
// Copyright (c) 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GPU_VULKAN_VULKAN_SAMPLER_H_
#define GPU_VULKAN_VULKAN_SAMPLER_H_
#include <float.h>
#include <vulkan/vulkan.h>
#include "base/macros.h"
#include "gpu/vulkan/vulkan_export.h"
namespace gpu {
class VulkanDeviceQueue;
class VULKAN_EXPORT VulkanSampler {
public:
struct SamplerOptions {
SamplerOptions();
~SamplerOptions();
VkFilter mag_filter = VK_FILTER_NEAREST;
VkFilter min_filter = VK_FILTER_NEAREST;
VkSamplerMipmapMode mipmap_mode = VK_SAMPLER_MIPMAP_MODE_NEAREST;
VkSamplerAddressMode address_mode_u = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
VkSamplerAddressMode address_mode_v = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
VkSamplerAddressMode address_mode_w = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
float mip_lod_bias = 0.0f;
bool anisotropy_enable = false;
float max_anisotropy = 1.0f;
bool compare_enable = false;
VkCompareOp compare_op = VK_COMPARE_OP_NEVER;
float min_lod = 0.0f;
float max_lod = FLT_MAX;
VkBorderColor border_color = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK;
bool unnormalized_coordinates = false;
};
explicit VulkanSampler(VulkanDeviceQueue* device_queue);
~VulkanSampler();
bool Initialize(const SamplerOptions& options);
void Destroy();
VkSampler handle() const { return handle_; }
private:
VulkanDeviceQueue* device_queue_ = nullptr;
VkSampler handle_ = VK_NULL_HANDLE;
DISALLOW_COPY_AND_ASSIGN(VulkanSampler);
};
} // namespace gpu
#endif // GPU_VULKAN_VULKAN_SAMPLER_H_