• Home
Name Date Size #Lines LOC

..--

android/12-May-2024-997654

doc/12-May-2024-732560

fuchsia/12-May-2024-205120

ggp/12-May-2024-198119

linux/12-May-2024-1,425954

mac/12-May-2024-617459

null/12-May-2024-17599

shaders/12-May-2024-32,61630,614

win32/12-May-2024-315216

BUILD.gnD12-May-20247.4 KiB303277

BufferVk.cppD12-May-202448 KiB1,217875

BufferVk.hD12-May-202411.4 KiB267198

CLCommandQueueVk.cppD12-May-2024510 208

CLCommandQueueVk.hD12-May-2024745 2914

CLContextVk.cppD12-May-2024451 186

CLContextVk.hD12-May-2024677 2814

CLDeviceVk.cppD12-May-20241.4 KiB5939

CLDeviceVk.hD12-May-20241.3 KiB4124

CLEventVk.cppD12-May-2024429 186

CLEventVk.hD12-May-2024651 2814

CLKernelVk.cppD12-May-2024440 186

CLKernelVk.hD12-May-2024664 2814

CLMemoryVk.cppD12-May-2024440 186

CLMemoryVk.hD12-May-2024664 2814

CLPlatformVk.cppD12-May-20243.1 KiB10983

CLPlatformVk.hD12-May-20241.5 KiB5332

CLProgramVk.cppD12-May-2024451 186

CLProgramVk.hD12-May-2024677 2814

CLSamplerVk.cppD12-May-2024451 186

CLSamplerVk.hD12-May-2024677 2814

CommandProcessor.cppD12-May-202448.7 KiB1,4021,129

CommandProcessor.hD12-May-202423.9 KiB608439

CompilerVk.cppD12-May-2024537 2711

CompilerVk.hD12-May-2024735 3114

ContextVk.cppD12-May-2024273.8 KiB6,6944,998

ContextVk.hD12-May-202461.9 KiB1,300902

DebugAnnotatorVk.cppD12-May-20245.2 KiB145125

DebugAnnotatorVk.hD12-May-20241.3 KiB4325

DeviceVk.cppD12-May-20243.2 KiB11089

DeviceVk.hD12-May-2024889 3519

DisplayVk.cppD12-May-202411.1 KiB347268

DisplayVk.hD12-May-20246.4 KiB164104

DisplayVk_api.hD12-May-20241.9 KiB5937

FenceNVVk.cppD12-May-20241.4 KiB5434

FenceNVVk.hD12-May-2024960 3520

FramebufferVk.cppD12-May-2024123.6 KiB2,9022,155

FramebufferVk.hD12-May-202412.7 KiB274203

GlslangWrapperVk.cppD12-May-20242.9 KiB7251

GlslangWrapperVk.hD12-May-20241.8 KiB4830

ImageVk.cppD12-May-20246.1 KiB175124

ImageVk.hD12-May-20241.7 KiB6438

MemoryObjectVk.cppD12-May-20249.2 KiB263207

MemoryObjectVk.hD12-May-20242.4 KiB6946

OWNERSD12-May-202461 43

OverlayVk.cppD12-May-202412 KiB290207

OverlayVk.hD12-May-20241.8 KiB6236

PersistentCommandPool.cppD12-May-20243.5 KiB11878

PersistentCommandPool.hD12-May-20241.2 KiB5328

ProgramExecutableVk.cppD12-May-202483.8 KiB2,0281,602

ProgramExecutableVk.hD12-May-202414.1 KiB329246

ProgramPipelineVk.cppD12-May-202410.7 KiB267202

ProgramPipelineVk.hD12-May-20241.9 KiB6237

ProgramVk.cppD12-May-202430.1 KiB830651

ProgramVk.hD12-May-202410.1 KiB230187

QueryVk.cppD12-May-202423.1 KiB682486

QueryVk.hD12-May-20243.4 KiB8852

README.mdD12-May-20244.3 KiB8864

RenderTargetVk.cppD12-May-202414.8 KiB408316

RenderTargetVk.hD12-May-20249.6 KiB222113

RenderbufferVk.cppD12-May-202414.8 KiB365283

RenderbufferVk.hD12-May-20245.8 KiB13289

RendererVk.cppD12-May-2024157.1 KiB3,8452,909

RendererVk.hD12-May-202425.7 KiB679514

ResourceVk.cppD12-May-20244.8 KiB207156

ResourceVk.hD12-May-20248.2 KiB277184

SamplerVk.cppD12-May-20241.2 KiB4929

SamplerVk.hD12-May-20241 KiB4224

SecondaryCommandBuffer.cppD12-May-202429.5 KiB628602

SecondaryCommandBuffer.hD12-May-202456.9 KiB1,5201,271

SemaphoreVk.cppD12-May-20249.8 KiB256170

SemaphoreVk.hD12-May-20241.6 KiB5030

ShaderVk.cppD12-May-20243.7 KiB11676

ShaderVk.hD12-May-2024912 3417

SurfaceVk.cppD12-May-202484.2 KiB2,1501,556

SurfaceVk.hD12-May-202416.8 KiB382240

SyncVk.cppD12-May-202418.5 KiB561397

SyncVk.hD12-May-20244.5 KiB13697

TextureVk.cppD12-May-2024147.2 KiB3,4242,495

TextureVk.hD12-May-202428.8 KiB590417

TransformFeedbackVk.cppD12-May-202414.2 KiB366283

TransformFeedbackVk.hD12-May-20245 KiB13895

UtilsVk.cppD12-May-2024151.7 KiB3,6132,613

UtilsVk.hD12-May-202424 KiB600455

VertexArrayVk.cppD12-May-202443.2 KiB940738

VertexArrayVk.hD12-May-20247.2 KiB165124

VulkanSecondaryCommandBuffer.cppD12-May-20244.2 KiB11789

VulkanSecondaryCommandBuffer.hD12-May-202426.3 KiB642553

cl_types.hD12-May-2024518 2310

gen_vk_format_table.pyD12-May-20249.1 KiB288214

gen_vk_internal_shaders.pyD12-May-202429.3 KiB815562

gen_vk_mandatory_format_support_table.pyD12-May-20245.2 KiB147109

vk_cache_utils.cppD12-May-2024169.4 KiB4,0213,092

vk_cache_utils.hD12-May-202467.6 KiB1,7751,250

vk_caps_utils.cppD12-May-202463.1 KiB1,307812

vk_caps_utils.hD12-May-20242.5 KiB8251

vk_command_buffer_utils.hD12-May-20241.2 KiB3919

vk_format_map.jsonD12-May-202419.1 KiB510507

vk_format_table_autogen.cppD12-May-2024139.9 KiB2,8482,539

vk_format_utils.cppD12-May-202419.8 KiB492373

vk_format_utils.hD12-May-20249.8 KiB264180

vk_helpers.cppD12-May-2024346.9 KiB8,6866,838

vk_helpers.hD12-May-2024120.1 KiB2,8562,054

vk_internal_shaders_autogen.cppD12-May-202430.1 KiB549508

vk_internal_shaders_autogen.gniD12-May-20246.8 KiB151149

vk_internal_shaders_autogen.hD12-May-20248.2 KiB267237

vk_mandatory_format_support_data.jsonD12-May-202417.7 KiB439439

vk_mandatory_format_support_table_autogen.cppD12-May-202414.1 KiB301283

vk_mem_alloc_wrapper.cppD12-May-20247.4 KiB185152

vk_mem_alloc_wrapper.hD12-May-20243 KiB7953

vk_utils.cppD12-May-202460.2 KiB1,6731,357

vk_utils.hD12-May-202438.3 KiB1,212908

vk_wrapper.hD12-May-202461.4 KiB1,7671,453

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(dstBuffer);
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(), dstBuffer->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