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
|