Blender V4.3
vk_resource_access_info.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
12
14
16{
17 if (vk_access_flags & (VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT)) {
18 /* TODO: when read only use VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL */
19 return VK_IMAGE_LAYOUT_GENERAL;
20 }
21
22 if (vk_access_flags &
23 (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT))
24 {
25 return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
26 }
27
28 // TODO: Add ATTACHMENT_READ_ONLY_OPTIMAL
29 if (vk_access_flags &
30 (VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT))
31 {
32 if (vk_image_aspect == VK_IMAGE_ASPECT_DEPTH_BIT) {
33 return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL;
34 }
35 if (vk_image_aspect == VK_IMAGE_ASPECT_STENCIL_BIT) {
36 return VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL;
37 }
38 BLI_assert(vk_image_aspect == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT));
39 return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
40 }
42 return VK_IMAGE_LAYOUT_UNDEFINED;
43}
44
46static constexpr VkAccessFlags VK_ACCESS_WRITE_MASK =
47 VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
48 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT |
49 VK_ACCESS_HOST_WRITE_BIT;
50
52 VKRenderGraphNodeLinks &node_links) const
53{
54 for (const VKBufferAccess &buffer_access : buffers) {
55 const bool writes_to_resource = bool(buffer_access.vk_access_flags & VK_ACCESS_WRITE_MASK);
56 ResourceWithStamp versioned_resource = writes_to_resource ?
58 buffer_access.vk_buffer) :
59 resources.get_buffer(buffer_access.vk_buffer);
60 if (writes_to_resource) {
61 node_links.outputs.append(
62 {versioned_resource, buffer_access.vk_access_flags, VK_IMAGE_LAYOUT_UNDEFINED});
63 }
64 else {
65 node_links.inputs.append(
66 {versioned_resource, buffer_access.vk_access_flags, VK_IMAGE_LAYOUT_UNDEFINED});
67 }
68 }
69
70 for (const VKImageAccess &image_access : images) {
71 VkImageLayout image_layout = image_access.to_vk_image_layout();
72 const bool writes_to_resource = bool(image_access.vk_access_flags & VK_ACCESS_WRITE_MASK);
73 ResourceWithStamp versioned_resource = writes_to_resource ?
75 image_access.vk_image) :
76 resources.get_image(image_access.vk_image);
77 if (writes_to_resource) {
78 node_links.outputs.append({versioned_resource,
79 image_access.vk_access_flags,
80 image_layout,
81 image_access.vk_image_aspect,
82 image_access.layer_base,
83 image_access.layer_count});
84 }
85 else {
86 node_links.inputs.append({versioned_resource,
87 image_access.vk_access_flags,
88 image_layout,
89 image_access.vk_image_aspect,
90 image_access.layer_base,
91 image_access.layer_count});
92 }
93 }
94}
95
97{
98 images.clear();
99 buffers.clear();
100}
101
102} // namespace blender::gpu::render_graph
#define BLI_assert_unreachable()
Definition BLI_assert.h:97
#define BLI_assert(a)
Definition BLI_assert.h:50
ResourceWithStamp get_image_and_increase_stamp(VkImage vk_image)
ResourceWithStamp get_buffer_and_increase_stamp(VkBuffer vk_buffer)
ResourceWithStamp get_buffer(VkBuffer vk_buffer) const
ResourceWithStamp get_image(VkImage vk_image) const
static constexpr VkAccessFlags VK_ACCESS_WRITE_MASK
void build_links(VKResourceStateTracker &resources, VKRenderGraphNodeLinks &node_links) const