mesa/src/virtio/vulkan/vn_pipeline.h

76 lines
2.2 KiB
C

/*
* Copyright 2019 Google LLC
* SPDX-License-Identifier: MIT
*
* based in part on anv and radv which are:
* Copyright © 2015 Intel Corporation
* Copyright © 2016 Red Hat.
* Copyright © 2016 Bas Nieuwenhuizen
*/
#ifndef VN_PIPELINE_H
#define VN_PIPELINE_H
#include "vn_common.h"
struct vn_shader_module {
struct vn_object_base base;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_shader_module,
base.base,
VkShaderModule,
VK_OBJECT_TYPE_SHADER_MODULE)
struct vn_pipeline_layout {
struct vn_object_base base;
struct vn_descriptor_set_layout *push_descriptor_set_layout;
bool has_push_constant_ranges;
struct vn_refcount refcount;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_pipeline_layout,
base.base,
VkPipelineLayout,
VK_OBJECT_TYPE_PIPELINE_LAYOUT)
struct vn_pipeline_cache {
struct vn_object_base base;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_pipeline_cache,
base.base,
VkPipelineCache,
VK_OBJECT_TYPE_PIPELINE_CACHE)
enum vn_pipeline_type {
VN_PIPELINE_TYPE_GRAPHICS,
VN_PIPELINE_TYPE_COMPUTE,
};
struct vn_pipeline {
struct vn_object_base base;
enum vn_pipeline_type type;
/**
* The VkPipelineLayout provided directly (without linking) at pipeline
* creation. Null if none was provided.
*
* We track the pipeline layout here to extend its and its children's
* lifetime, NOT because this is the actual layout used by the pipeline.
*
* WARNING. This may not be the actual layout used by the pipeline. The
* Vulkan 1.3.254 spec says:
*
* The final effective pipeline layout is effectively the union of the
* linked pipeline layouts. When binding descriptor sets for this
* pipeline, the pipeline layout used must be compatible with this
* union.
*/
struct vn_pipeline_layout *layout;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_pipeline,
base.base,
VkPipeline,
VK_OBJECT_TYPE_PIPELINE)
#endif /* VN_PIPELINE_H */