|  | // Copyright 2018 The Fuchsia 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 "src/graphics/examples/vkproto/common/shader.h" | 
|  |  | 
|  | #include <fstream> | 
|  |  | 
|  | #include "src/graphics/examples/vkproto/common/utils.h" | 
|  |  | 
|  | #include <vulkan/vulkan.hpp> | 
|  |  | 
|  | namespace vkp { | 
|  |  | 
|  | bool Shader::ReadFile(const std::string& file_name, std::vector<char>* buffer) { | 
|  | std::ifstream file(file_name, std::ios::ate | std::ios::binary); | 
|  | if (!file.is_open()) { | 
|  | RTN_MSG(false, "Failed to open file \"%s\"\n", file_name.c_str()); | 
|  | } | 
|  |  | 
|  | size_t file_size = static_cast<size_t>(file.tellg()); | 
|  | buffer->resize(file_size); | 
|  | file.seekg(0); | 
|  | file.read(buffer->data(), file_size); | 
|  | file.close(); | 
|  |  | 
|  | return true; | 
|  | } | 
|  |  | 
|  | vk::ResultValue<vk::UniqueShaderModule> Shader::CreateShaderModule(vk::Device device, | 
|  | const std::vector<char>& code) { | 
|  | vk::ShaderModuleCreateInfo info; | 
|  | info.codeSize = code.size(); | 
|  | info.pCode = reinterpret_cast<const uint32_t*>(code.data()); | 
|  |  | 
|  | return device.createShaderModuleUnique(info); | 
|  | } | 
|  |  | 
|  | }  // namespace vkp |