• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

android/23-Nov-2023-958624

display/23-Nov-2023-222132

doc/23-Nov-2023-731559

fuchsia/23-Nov-2023-205120

ggp/23-Nov-2023-198119

headless/23-Nov-2023-201112

mac/23-Nov-2023-553412

null/23-Nov-2023-17599

shaders/23-Nov-2023-32,61630,614

win32/23-Nov-2023-315216

xcb/23-Nov-2023-290191

BUILD.gnD23-Nov-20236.9 KiB288264

BufferVk.cppD23-Nov-202336.1 KiB945681

BufferVk.hD23-Nov-20239.2 KiB228173

CLCommandQueueVk.cppD23-Nov-2023510 208

CLCommandQueueVk.hD23-Nov-2023745 2914

CLContextVk.cppD23-Nov-2023451 186

CLContextVk.hD23-Nov-2023677 2814

CLDeviceVk.cppD23-Nov-20231.4 KiB5939

CLDeviceVk.hD23-Nov-20231.3 KiB4124

CLEventVk.cppD23-Nov-2023429 186

CLEventVk.hD23-Nov-2023651 2814

CLKernelVk.cppD23-Nov-2023440 186

CLKernelVk.hD23-Nov-2023664 2814

CLMemoryVk.cppD23-Nov-2023440 186

CLMemoryVk.hD23-Nov-2023664 2814

CLPlatformVk.cppD23-Nov-20233.1 KiB10882

CLPlatformVk.hD23-Nov-20231.5 KiB5332

CLProgramVk.cppD23-Nov-2023451 186

CLProgramVk.hD23-Nov-2023677 2814

CLSamplerVk.cppD23-Nov-2023451 186

CLSamplerVk.hD23-Nov-2023677 2814

CommandGraph.cppD23-Nov-202350.7 KiB1,3791,097

CommandGraph.hD23-Nov-202331 KiB814507

CommandProcessor.cppD23-Nov-202346.6 KiB1,3651,093

CommandProcessor.hD23-Nov-202321.7 KiB569407

CompilerVk.cppD23-Nov-2023537 2711

CompilerVk.hD23-Nov-2023735 3114

ContextVk.cppD23-Nov-2023253.7 KiB6,3464,709

ContextVk.hD23-Nov-202357.4 KiB1,226843

DebugAnnotatorVk.cppD23-Nov-20235.2 KiB145125

DebugAnnotatorVk.hD23-Nov-20231.3 KiB4325

DeviceVk.cppD23-Nov-2023843 4526

DeviceVk.hD23-Nov-2023889 3519

DisplayVk.cppD23-Nov-202310.2 KiB325255

DisplayVk.hD23-Nov-20236.6 KiB168107

DisplayVk_api.hD23-Nov-20231.9 KiB5937

FenceNVVk.cppD23-Nov-20231.5 KiB5938

FenceNVVk.hD23-Nov-2023960 3520

FramebufferVk.cppD23-Nov-2023122.4 KiB2,8782,141

FramebufferVk.hD23-Nov-202312.7 KiB274203

GlslangWrapperVk.cppD23-Nov-20232.9 KiB7251

GlslangWrapperVk.hD23-Nov-20231.8 KiB4830

ImageVk.cppD23-Nov-20235.6 KiB165116

ImageVk.hD23-Nov-20231.6 KiB6237

MemoryObjectVk.cppD23-Nov-20239.3 KiB264198

MemoryObjectVk.hD23-Nov-20232.2 KiB6643

OWNERSD23-Nov-202361 43

OverlayVk.cppD23-Nov-202311.9 KiB290207

OverlayVk.hD23-Nov-20231.8 KiB6236

PersistentCommandPool.cppD23-Nov-20233.6 KiB11878

PersistentCommandPool.hD23-Nov-20231.2 KiB5328

ProgramExecutableVk.cppD23-Nov-202382.4 KiB1,9751,566

ProgramExecutableVk.hD23-Nov-202314.1 KiB329246

ProgramPipelineVk.cppD23-Nov-202311.2 KiB273209

ProgramPipelineVk.hD23-Nov-20232.3 KiB7045

ProgramVk.cppD23-Nov-202330.1 KiB830651

ProgramVk.hD23-Nov-202310 KiB230187

QueryVk.cppD23-Nov-202322.5 KiB675484

QueryVk.hD23-Nov-20233.3 KiB8751

README.mdD23-Nov-20234.3 KiB8864

RenderTargetVk.cppD23-Nov-202314.4 KiB390301

RenderTargetVk.hD23-Nov-20239.4 KiB219111

RenderbufferVk.cppD23-Nov-202314.8 KiB367283

RenderbufferVk.hD23-Nov-20235.8 KiB13289

RendererVk.cppD23-Nov-2023135.4 KiB3,4362,587

RendererVk.hD23-Nov-202321.7 KiB571420

ResourceVk.cppD23-Nov-20233.1 KiB142101

ResourceVk.hD23-Nov-20235.7 KiB210142

SamplerVk.cppD23-Nov-20231.1 KiB4929

SamplerVk.hD23-Nov-20231 KiB4224

SecondaryCommandBuffer.cppD23-Nov-202329.8 KiB634609

SecondaryCommandBuffer.hD23-Nov-202355.9 KiB1,4791,240

SemaphoreVk.cppD23-Nov-202310.7 KiB280198

SemaphoreVk.hD23-Nov-20231.6 KiB5030

ShaderVk.cppD23-Nov-20233.9 KiB12381

ShaderVk.hD23-Nov-2023912 3417

SurfaceVk.cppD23-Nov-202377.6 KiB1,9951,432

SurfaceVk.hD23-Nov-202315.3 KiB357242

SyncVk.cppD23-Nov-202319.2 KiB609444

SyncVk.hD23-Nov-20234.6 KiB14199

TextureVk.cppD23-Nov-2023133.2 KiB3,1082,252

TextureVk.hD23-Nov-202328 KiB572407

TransformFeedbackVk.cppD23-Nov-202314.2 KiB366283

TransformFeedbackVk.hD23-Nov-20235 KiB13895

UtilsVk.cppD23-Nov-2023147 KiB3,5172,559

UtilsVk.hD23-Nov-202323.5 KiB583442

VertexArrayVk.cppD23-Nov-202343.6 KiB948746

VertexArrayVk.hD23-Nov-20237.2 KiB165124

cl_types.hD23-Nov-2023518 2310

gen_vk_format_table.pyD23-Nov-20239.1 KiB289215

gen_vk_internal_shaders.pyD23-Nov-202329.3 KiB815562

gen_vk_mandatory_format_support_table.pyD23-Nov-20235.2 KiB147109

vk_cache_utils.cppD23-Nov-2023165.1 KiB3,9403,025

vk_cache_utils.hD23-Nov-202367.4 KiB1,7561,235

vk_caps_utils.cppD23-Nov-202361.1 KiB1,266787

vk_caps_utils.hD23-Nov-20232.5 KiB8251

vk_format_map.jsonD23-Nov-202319 KiB505502

vk_format_table_autogen.cppD23-Nov-2023136.7 KiB2,8272,519

vk_format_utils.cppD23-Nov-202317.8 KiB452342

vk_format_utils.hD23-Nov-20237.9 KiB209129

vk_helpers.cppD23-Nov-2023319.4 KiB8,1106,380

vk_helpers.hD23-Nov-2023113.2 KiB2,6961,926

vk_internal_shaders_autogen.cppD23-Nov-202330.1 KiB549508

vk_internal_shaders_autogen.gniD23-Nov-20236.8 KiB151149

vk_internal_shaders_autogen.hD23-Nov-20238.2 KiB

vk_mandatory_format_support_data.jsonD23-Nov-202317.7 KiB439439

vk_mandatory_format_support_table_autogen.cppD23-Nov-202314 KiB300282

vk_mem_alloc_wrapper.cppD23-Nov-20236.7 KiB162131

vk_mem_alloc_wrapper.hD23-Nov-20232.7 KiB7146

vk_utils.cppD23-Nov-202354 KiB1,4911,204

vk_utils.hD23-Nov-202334.1 KiB1,058792

vk_wrapper.hD23-Nov-202368.3 KiB1,9091,577

README.md

1# ANGLE: Vulkan Back-end
2
3ANGLE's Vulkan back-end implementation lives in this folder.
4
5[Vulkan](https://www.khronos.org/vulkan/) is an explicit graphics API. It has a lot in common with
6other explicit APIs such as Microsoft's [D3D12][D3D12 Guide] and Apple's
7[Metal](https://developer.apple.com/metal/). Compared to APIs like OpenGL or D3D11 explicit APIs can
8offer a number of significant benefits:
9
10 * Lower API call CPU overhead.
11 * A smaller API surface with more direct hardware control.
12 * Better support for multi-core programming.
13 * Vulkan in particular has open-source tooling and tests.
14
15[D3D12 Guide]: https://docs.microsoft.com/en-us/windows/desktop/direct3d12/directx-12-programming-guide
16
17## Back-end Design
18
19The [`RendererVk`](RendererVk.cpp) class represents an `EGLDisplay`. `RendererVk` owns shared global
20resources like the [VkDevice][VkDevice], [VkQueue][VkQueue], the [Vulkan format tables](vk_format_utils.h)
21and [internal Vulkan shaders](shaders). The [ContextVk](ContextVk.cpp) class implements the back-end
22of a front-end OpenGL Context. ContextVk processes state changes and handles action commands like
23`glDrawArrays` and `glDrawElements`.
24
25## Command recording
26
27The back-end records commands into command buffers via the following `ContextVk` APIs:
28
29 * `beginNewRenderPass`: Writes out (aka flushes) prior pending commands into a primary command
30   buffer, then starts a new render pass. Returns a secondary command buffer *inside* a render pass
31   instance.
32 * `getOutsideRenderPassCommandBuffer`: May flush prior command buffers and close the render pass if
33   necessary, in addition to issuing the appropriate barriers. Returns a secondary command buffer
34   *outside* a render pass instance.
35 * `getStartedRenderPassCommands`: Returns a reference to the currently open render pass' commands
36   buffer.
37
38The back-end (mostly) records Image and Buffer barriers through additional `CommandBufferAccess`
39APIs, the result of which is passed to `getOutsideRenderPassCommandBuffer`.  Note that the
40barriers are not actually recorded until `getOutsideRenderPassCommandBuffer` is called:
41
42 * `onBufferTransferRead` and `onBufferComputeShaderRead` accumulate `VkBuffer` read barriers.
43 * `onBufferTransferWrite` and `onBufferComputeShaderWrite` accumulate `VkBuffer` write barriers.
44 * `onBuffferSelfCopy` is a special case for `VkBuffer` self copies. It behaves the same as write.
45 * `onImageTransferRead` and `onImageComputerShadeRead` accumulate `VkImage` read barriers.
46 * `onImageTransferWrite` and `onImageComputerShadeWrite` accumulate `VkImage` write barriers.
47 * `onImageRenderPassRead` and `onImageRenderPassWrite` accumulate `VkImage` barriers inside a
48   started RenderPass.
49
50After the back-end records commands to the primary buffer and we flush (e.g. on swap) or when we call
51`ContextVk::finishToSerial`, ANGLE submits the primary command buffer to a `VkQueue`.
52
53See the [code][CommandAPIs] for more details.
54
55### Simple command recording example
56
57In this example we'll be recording a buffer copy command:
58
59```
60    // Ensure that ANGLE sets proper read and write barriers for the Buffers.
61    vk::CommandBufferAccess access;
62    access.onBufferTransferWrite(destBuffer);
63    access.onBufferTransferRead(srcBuffer);
64
65    // Get a pointer to a secondary command buffer for command recording.
66    vk::CommandBuffer *commandBuffer;
67    ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(access, &commandBuffer));
68
69    // Record the copy command into the secondary buffer. We're done!
70    commandBuffer->copyBuffer(srcBuffer->getBuffer(), destBuffer->getBuffer(), copyCount, copies);
71```
72
73## Additional Reading
74
75More implementation details can be found in the `doc` directory:
76
77- [Fast OpenGL State Transitions](doc/FastOpenGLStateTransitions.md)
78- [Shader Module Compilation](doc/ShaderModuleCompilation.md)
79- [OpenGL Line Segment Rasterization](doc/OpenGLLineSegmentRasterization.md)
80- [Format Tables and Emulation](doc/FormatTablesAndEmulation.md)
81- [Deferred Clears](doc/DeferredClears.md)
82- [Queries](doc/Queries.md)
83
84[VkDevice]: https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkDevice.html
85[VkQueue]: https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkQueue.html
86[CommandAPIs]: https://chromium.googlesource.com/angle/angle/+/df31624eaf3df986a0bdf3f58a87b79b0cc8db5c/src/libANGLE/renderer/vulkan/ContextVk.h#620
87
88