You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+11-67Lines changed: 11 additions & 67 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Anvil
2
2
3
-
This is a README file for Anvil v1.3.1, a framework for Vulkan™.
3
+
This is a README file for Anvil, a framework for Vulkan™.
4
4
The README is organized as a FAQ.
5
5
6
6
|Toolchain|Status|
@@ -15,8 +15,9 @@ MIT. See `LICENSE.txt`.
15
15
16
16
What is this?
17
17
------
18
-
Anvil is a framework for Vulkan v1.0, which we have been using internally for
19
-
quite some time now, in order to develop various Vulkan applications.
18
+
Anvil is a framework for Vulkan v1.0 and v1.1, which we have been using internally for
19
+
quite some time now, in order to develop various Vulkan applications. This guarantees
20
+
that vast majority of the functionality exposed by the library is regularly tested.
20
21
21
22
The general idea we started from was to have a cross-platform tool, which would
22
23
reduce the amount of time required to write portable Vulkan-based apps from
@@ -34,16 +35,10 @@ Anvil was designed with the following goals in mind:
34
35
using Vulkan, without hiding the API behind thick abstraction layers.
35
36
- Simplify validation layer usage. All you have to do is specify which function
36
37
you would like to be called if a debug call-back is made, and that's it.
37
-
- Provide a reasonable level of deferred approach to baking objects, in order
38
-
to emulate mutability of certain Vulkan objects to a certain degree. Note
39
-
that this is an optional feature - you are free to request baking of any
40
-
object at any time, in order to ensure it will never happen at draw time.
41
38
- Provide a simple cross-platform implementation for areas unrelated to Vulkan
42
39
(eg. window management)
43
-
44
-
Anvil can be thought of as a toolbox. You are free to use any of its parts you
45
-
like, and write your own code for everything else. Any Anvil wrapper for an
46
-
actual Vulkan object can be queried to retrieve the raw Vulkan handle.
40
+
- Provide a simple way (with optional flexibility) to manage memory allocations
41
+
and memory bindings.
47
42
48
43
Anvil is **not** the right choice for developers who do not have a reasonable
49
44
understanding of how Vulkan works. Its goal is not to provide a glBegin/glEnd-like
@@ -61,8 +56,7 @@ What are Anvil's requirements?
61
56
In order to build Anvil, you will need the following software:
62
57
- C++11 compiler.
63
58
- CMake
64
-
- Vulkan RT 1.0.39.1 or newer.
65
-
- Vulkan SDK 1.0.13.0 or newer.
59
+
- Vulkan SDK (the latest available version is highly recommended)
66
60
67
61
To build Anvil on Linux, additional packages should be installed:
68
62
- libxcb-keysyms (For ubuntu, use "apt-get install libxcb-keysyms1-dev")
@@ -78,54 +72,9 @@ implementation and on AMDGPU-PRO Vulkan implementation on Linux.
78
72
79
73
What can it do?
80
74
------
81
-
This version of Anvil provides:
82
-
83
-
* Low-level ref-counted wrappers for the following Vulkan v1.0 features:
84
-
- Buffer objects (sparse and non-sparse)
85
-
- Buffer views
86
-
- Command buffers
87
-
- Command pools
88
-
- Descriptor pools
89
-
- Descriptor sets
90
-
- Descriptor set layouts
91
-
- Devices
92
-
- Events
93
-
- Fences
94
-
- Framebuffers
95
-
- Image objects (sparse, sparse bindings, PRT)
96
-
- Image views
97
-
- Instances
98
-
- Physical devices
99
-
- Pipeline cache
100
-
- Pipeline layouts
101
-
- Query pools
102
-
- Queues
103
-
- Renderpasses
104
-
- Rendering surfaces
105
-
- Samplers
106
-
- Semaphores
107
-
- Shader modules
108
-
- Swapchains
109
-
110
-
* More complicated wrappers:
111
-
- Compute / graphics pipeline managers: provide a way to create regular/derivative pipelines with automatic pipeline layout re-use.
112
-
- Descriptor set groups: simplify descriptor set configuration, management and updates.
113
-
- Memory allocator: implements a memory allocator with two back-ends: one that is more appropriate for one-shot
114
-
mem alloc requests, and one that can be used for dynamic memory allocation purposes.
115
-
- Pipeline layout manager: caches all created pipeline layouts to avoid instantiating duplicate layout instances.
116
-
117
-
* Miscellaneous functionality:
118
-
- Debug markers: names and tags can be optionally assigned to any of the created objects. If VK_EXT_debug_marker is enabled, these
119
-
will be automatically patched through to layers that implement the extension on the running platform.
120
-
- Format info reflection: provides information about format properties.
121
-
- GLSL -> SPIR-V conversion: provides glslang-based GLSL->SPIR-V conversion. The conversion is performed in run-time. Disassembly can also be retrieved, if needed.
122
-
- GLSL -> SPIR-V conversion cache: re-uses SPIR-V blobs throughout Instance's lifetime if GLSL->SPIR-V conversion is requested for GLSL source code which has already
123
-
been converted to SPIR-V before.
124
-
- IO: provides a number of functions to simplify directory- and file-related operations.
- Shader module cache: re-uses shader module instances across Instance lifetime. Improve execution time if your application instantiates shader modules with
127
-
exactly the same configuration during its runtime.
128
-
- Time: provides a way to query current time using high-performance system queries.
75
+
Anvil provides full support for functionality exposed in Vulkan 1.0 and Vulkan 1.1.
76
+
We also try to do our best to keep it up to date with any extensions our Vulkan implementations
77
+
expose.
129
78
130
79
We are planning to keep adding new features in the future.
131
80
@@ -143,12 +92,7 @@ OutOfOrderRasterization and the other example applications are located in the
143
92
144
93
What are the known issues?
145
94
------
146
-
Just a handful:
147
-
* All command queues are currently assigned a priority of 1.0.
148
-
* DescriptorSetGroup wrapper does not leverage the <releaseable_sets> flag at
149
-
baking time.
150
-
151
-
These will be addressed at some point in the future.
0 commit comments