// 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 #include #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_