• 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_CONFIG_HPP_
16 #define VK_CONFIG_HPP_
17 
18 #include "Version.h"
19 
20 #include <Vulkan/VulkanPlatform.h>
21 
22 namespace vk {
23 
24 // Note: Constant array initialization requires a string literal.
25 //       constexpr char* or char[] does not work for that purpose.
26 #define SWIFTSHADER_DEVICE_NAME "SwiftShader Device" // Max length: VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
27 #define SWIFTSHADER_UUID "SwiftShaderUUID" // Max length: VK_UUID_SIZE (16)
28 
29 enum
30 {
31 	API_VERSION = VK_API_VERSION_1_1,
32 	DRIVER_VERSION = VK_MAKE_VERSION(MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION),
33 	VENDOR_ID = 0x1AE0, // Google, Inc.: https://pcisig.com/google-inc-1
34 	DEVICE_ID = 0xC0DE, // SwiftShader (placeholder)
35 };
36 
37 enum
38 {
39 	// Alignment of all Vulkan objects, pools, device memory, images, buffers, descriptors.
40 	REQUIRED_MEMORY_ALIGNMENT = 16,  // 16 bytes for 128-bit vector types.
41 
42 	MIN_TEXEL_BUFFER_OFFSET_ALIGNMENT = 256,
43 	MIN_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 256,
44 	MIN_STORAGE_BUFFER_OFFSET_ALIGNMENT = 256,
45 
46 	MEMORY_TYPE_GENERIC_BIT = 0x1, // Generic system memory.
47 };
48 
49 enum
50 {
51 	MAX_IMAGE_LEVELS_1D = 14,
52 	MAX_IMAGE_LEVELS_2D = 14,
53 	MAX_IMAGE_LEVELS_3D = 11,
54 	MAX_IMAGE_LEVELS_CUBE = 14,
55 	MAX_IMAGE_ARRAY_LAYERS = 2048,
56 	MAX_SAMPLER_LOD_BIAS = 15,
57 };
58 
59 enum
60 {
61 	MAX_BOUND_DESCRIPTOR_SETS = 4,
62 	MAX_VERTEX_INPUT_BINDINGS = 16,
63 	MAX_PUSH_CONSTANT_SIZE = 128,
64 };
65 
66 enum
67 {
68 	MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS_DYNAMIC = 8,
69 	MAX_DESCRIPTOR_SET_STORAGE_BUFFERS_DYNAMIC = 4,
70 	MAX_DESCRIPTOR_SET_COMBINED_BUFFERS_DYNAMIC =
71 			MAX_DESCRIPTOR_SET_UNIFORM_BUFFERS_DYNAMIC +
72 			MAX_DESCRIPTOR_SET_STORAGE_BUFFERS_DYNAMIC,
73 };
74 
75 enum
76 {
77 	MAX_POINT_SIZE = 1,		// Large points are not supported. If/when we turn this on, must be >= 64.
78 };
79 
80 constexpr int SUBPIXEL_PRECISION_BITS = 4;
81 constexpr float SUBPIXEL_PRECISION_FACTOR = static_cast<float>(1 << SUBPIXEL_PRECISION_BITS);
82 constexpr int SUBPIXEL_PRECISION_MASK = 0xFFFFFFFF >> (32 - SUBPIXEL_PRECISION_BITS);
83 
84 }  // namespace vk
85 
86 #if defined(__linux__) || defined(__ANDROID__)
87 #define SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD        1
88 #define SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD     1
89 #endif
90 
91 constexpr VkDeviceSize MAX_MEMORY_ALLOCATION_SIZE = 0x40000000ull;  // 0x40000000 = 1 GiB
92 
93 // Memory offset calculations in 32-bit SIMD elements limit us to addressing at most 4 GiB.
94 // Signed arithmetic further restricts it to 2 GiB.
95 static_assert(MAX_MEMORY_ALLOCATION_SIZE <= 0x80000000ull, "maxMemoryAllocationSize must not exceed 2 GiB");
96 
97 #endif // VK_CONFIG_HPP_
98