1 // Copyright 2018 The SwiftShader Authors. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef VK_SHADER_MODULE_HPP_ 16 #define VK_SHADER_MODULE_HPP_ 17 18 #include "VkObject.hpp" 19 20 #include <atomic> 21 #include <vector> 22 23 namespace rr { 24 class Routine; 25 } 26 27 namespace vk { 28 29 class ShaderModule : public Object<ShaderModule, VkShaderModule> 30 { 31 public: 32 ShaderModule(const VkShaderModuleCreateInfo *pCreateInfo, void *mem); 33 void destroy(const VkAllocationCallbacks *pAllocator); 34 35 static size_t ComputeRequiredAllocationSize(const VkShaderModuleCreateInfo *pCreateInfo); 36 // TODO: reconsider boundary of ShaderModule class; try to avoid 'expose the 37 // guts' operations, and this copy. getCode() const38 std::vector<uint32_t> getCode() const { return std::vector<uint32_t>{ code, code + wordCount }; } 39 getSerialID() const40 uint32_t getSerialID() const { return serialID; } nextSerialID()41 static uint32_t nextSerialID() { return serialCounter++; } 42 43 private: 44 const uint32_t serialID; 45 static std::atomic<uint32_t> serialCounter; 46 47 uint32_t *code = nullptr; 48 uint32_t wordCount = 0; 49 }; 50 Cast(VkShaderModule object)51static inline ShaderModule *Cast(VkShaderModule object) 52 { 53 return ShaderModule::Cast(object); 54 } 55 56 } // namespace vk 57 58 #endif // VK_SHADER_MODULE_HPP_ 59