File: data_graph_pipeline_session_state.cpp

package info (click to toggle)
vulkan-validationlayers 1.4.328.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 49,412 kB
  • sloc: cpp: 615,223; python: 12,115; sh: 24; makefile: 20; xml: 14
file content (64 lines) | stat: -rw-r--r-- 2,972 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/* Copyright (c) 2015-2024 The Khronos Group Inc.
 * Copyright (C) 2025 Arm Limited.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "state_tracker/data_graph_pipeline_session_state.h"
#include "generated/dispatch_functions.h"

namespace vvl {

DataGraphPipelineSession::DataGraphPipelineSession(DeviceState &dev_data, VkDataGraphPipelineSessionARM handle,
                                                   const VkDataGraphPipelineSessionCreateInfoARM *pCreateInfo)
    : StateObject(handle, kVulkanObjectTypeDataGraphPipelineSessionARM),
      safe_create_info(pCreateInfo),
      create_info(*safe_create_info.ptr()),
      session_(handle),
      unprotected_((pCreateInfo->flags & VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM) == 0) {
}

void DataGraphPipelineSession::InitMemoryRequirements(VkDevice device, const VkDataGraphPipelineSessionBindPointRequirementARM *p_bind_point_reqs, uint32_t n_reqs) {

    bind_point_reqs_.resize(n_reqs);
    memcpy(bind_point_reqs_.data(), p_bind_point_reqs, n_reqs * sizeof(VkDataGraphPipelineSessionBindPointRequirementARM));

    mem_reqs_map_.clear();
    for (uint32_t j = 0; j < n_reqs; j++) {
        const auto& bpr = p_bind_point_reqs[j];
        if (VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM == bpr.bindPointType) {
            for (uint32_t i = 0; i < bpr.numObjects; i++) {
                VkDataGraphPipelineSessionMemoryRequirementsInfoARM session_mem_info = vku::InitStructHelper();
                session_mem_info.bindPoint = bpr.bindPoint;
                session_mem_info.session = session_;
                session_mem_info.objectIndex = i;
                VkMemoryRequirements2 mem_reqs = vku::InitStructHelper();
                DispatchGetDataGraphPipelineSessionMemoryRequirementsARM(device, &session_mem_info, &mem_reqs);
                mem_reqs_map_[bpr.bindPoint].push_back(mem_reqs.memoryRequirements);
            }
        }
    }
}

void DataGraphPipelineSession::AddBoundMemory(VkDataGraphPipelineSessionBindPointARM bind_point, MemoryBinding binding) {
    bound_memory_map_[bind_point].push_back(binding);
}

const VkDataGraphPipelineSessionBindPointRequirementARM *DataGraphPipelineSession::FindBindPointRequirement(VkDataGraphPipelineSessionBindPointARM bind_point) const {
    for (auto &bpr : bind_point_reqs_) {
        if (bpr.bindPoint == bind_point) {
            return &bpr;
        }
    }
    return nullptr;
}
}  // namespace vvl