• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)51 static inline ShaderModule *Cast(VkShaderModule object)
52 {
53 	return ShaderModule::Cast(object);
54 }
55 
56 }  // namespace vk
57 
58 #endif  // VK_SHADER_MODULE_HPP_
59