This commit is contained in:
xsl
2025-09-04 10:54:47 +08:00
commit 6bc8f61b18
1808 changed files with 208268 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
/* Copyright (c) 2019-2025, Arm Limited and Contributors
*
* SPDX-License-Identifier: Apache-2.0
*
* 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.
*/
#pragma once
#include "core/render_pass.h"
#include "rendering/pipeline_state.h"
#include "rendering/render_target.h"
#include <vector>
namespace vkb
{
class GraphicsPipeline;
class PipelineLayout;
class RenderPass;
class ShaderModule;
enum class ResourceType
{
ShaderModule,
PipelineLayout,
RenderPass,
GraphicsPipeline
};
/**
* @brief Writes Vulkan objects in a memory stream.
*/
class ResourceRecord
{
public:
void set_data(const std::vector<uint8_t> &data);
std::vector<uint8_t> get_data();
const std::ostringstream &get_stream();
size_t register_shader_module(VkShaderStageFlagBits stage,
const ShaderSource &glsl_source,
const std::string &entry_point,
const ShaderVariant &shader_variant);
size_t register_pipeline_layout(const std::vector<ShaderModule *> &shader_modules);
size_t register_render_pass(const std::vector<Attachment> &attachments,
const std::vector<LoadStoreInfo> &load_store_infos,
const std::vector<SubpassInfo> &subpasses);
size_t register_graphics_pipeline(VkPipelineCache pipeline_cache,
PipelineState &pipeline_state);
void set_shader_module(size_t index, const ShaderModule &shader_module);
void set_pipeline_layout(size_t index, const PipelineLayout &pipeline_layout);
void set_render_pass(size_t index, const RenderPass &render_pass);
void set_graphics_pipeline(size_t index, const GraphicsPipeline &graphics_pipeline);
private:
std::ostringstream stream;
std::vector<size_t> shader_module_indices;
std::vector<size_t> pipeline_layout_indices;
std::vector<size_t> render_pass_indices;
std::vector<size_t> graphics_pipeline_indices;
std::unordered_map<const ShaderModule *, size_t> shader_module_to_index;
std::unordered_map<const PipelineLayout *, size_t> pipeline_layout_to_index;
std::unordered_map<const RenderPass *, size_t> render_pass_to_index;
std::unordered_map<const GraphicsPipeline *, size_t> graphics_pipeline_to_index;
};
} // namespace vkb