blob: fbd0d7ee9fd59c845dfdccb7d8c3dd4712aabf62 [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.
#include "gpu/vulkan/vulkan_sampler.h"
#include "base/logging.h"
#include "gpu/vulkan/vulkan_device_queue.h"
namespace gpu {
VulkanSampler::SamplerOptions::SamplerOptions() = default;
VulkanSampler::SamplerOptions::~SamplerOptions() = default;
VulkanSampler::VulkanSampler(VulkanDeviceQueue* device_queue)
: device_queue_(device_queue) {}
VulkanSampler::~VulkanSampler() {
DCHECK_EQ(static_cast<VkSampler>(VK_NULL_HANDLE), handle_);
}
bool VulkanSampler::Initialize(const SamplerOptions& options) {
DCHECK_EQ(static_cast<VkSampler>(VK_NULL_HANDLE), handle_);
VkSamplerCreateInfo sampler_create_info = {};
sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
sampler_create_info.magFilter = options.mag_filter;
sampler_create_info.minFilter = options.min_filter;
sampler_create_info.mipmapMode = options.mipmap_mode;
sampler_create_info.addressModeU = options.address_mode_u;
sampler_create_info.addressModeV = options.address_mode_v;
sampler_create_info.addressModeW = options.address_mode_w;
sampler_create_info.mipLodBias = options.mip_lod_bias;
sampler_create_info.anisotropyEnable = options.anisotropy_enable;
sampler_create_info.maxAnisotropy = options.max_anisotropy;
sampler_create_info.compareOp = options.compare_op;
sampler_create_info.minLod = options.min_lod;
sampler_create_info.maxLod = options.max_lod;
sampler_create_info.borderColor = options.border_color;
sampler_create_info.unnormalizedCoordinates =
options.unnormalized_coordinates;
VkResult result = vkCreateSampler(device_queue_->GetVulkanDevice(),
&sampler_create_info, nullptr, &handle_);
if (VK_SUCCESS != result) {
DLOG(ERROR) << "vkCreateSampler() failed: " << result;
return false;
}
return true;
}
void VulkanSampler::Destroy() {
if (VK_NULL_HANDLE != handle_) {
vkDestroySampler(device_queue_->GetVulkanDevice(), handle_, nullptr);
handle_ = VK_NULL_HANDLE;
}
}
} // namespace gpu