Path: blob/21.2-virgl/src/panfrost/vulkan/panvk_private.h
4560 views
/*1* Copyright © 2021 Collabora Ltd.2*3* derived from tu_private.h driver which is:4* Copyright © 2016 Red Hat.5* Copyright © 2016 Bas Nieuwenhuizen6* Copyright © 2015 Intel Corporation7*8* Permission is hereby granted, free of charge, to any person obtaining a9* copy of this software and associated documentation files (the "Software"),10* to deal in the Software without restriction, including without limitation11* the rights to use, copy, modify, merge, publish, distribute, sublicense,12* and/or sell copies of the Software, and to permit persons to whom the13* Software is furnished to do so, subject to the following conditions:14*15* The above copyright notice and this permission notice (including the next16* paragraph) shall be included in all copies or substantial portions of the17* Software.18*19* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR20* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,21* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL22* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER23* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING24* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER25* DEALINGS IN THE SOFTWARE.26*/2728#ifndef PANVK_PRIVATE_H29#define PANVK_PRIVATE_H3031#include <assert.h>32#include <pthread.h>33#include <stdbool.h>34#include <stdint.h>35#include <stdio.h>36#include <stdlib.h>37#include <string.h>38#ifdef HAVE_VALGRIND39#include <memcheck.h>40#include <valgrind.h>41#define VG(x) x42#else43#define VG(x)44#endif4546#include "c11/threads.h"47#include "compiler/shader_enums.h"48#include "util/list.h"49#include "util/macros.h"50#include "vk_alloc.h"51#include "vk_device.h"52#include "vk_instance.h"53#include "vk_object.h"54#include "vk_physical_device.h"55#include "wsi_common.h"5657#include "drm-uapi/panfrost_drm.h"5859#include "midgard/midgard_compile.h"6061#include "pan_blend.h"62#include "pan_blitter.h"63#include "pan_cs.h"64#include "pan_device.h"65#include "panvk_mempool.h"66#include "pan_texture.h"67#include "pan_scoreboard.h"68#include "pan_shader.h"69#include "vk_extensions.h"70#include "panvk_varyings.h"7172/* Pre-declarations needed for WSI entrypoints */73struct wl_surface;74struct wl_display;75typedef struct xcb_connection_t xcb_connection_t;76typedef uint32_t xcb_visualid_t;77typedef uint32_t xcb_window_t;7879#include <vulkan/vk_android_native_buffer.h>80#include <vulkan/vk_icd.h>81#include <vulkan/vulkan.h>8283#include "panvk_entrypoints.h"8485#define MAX_BIND_POINTS 2 /* compute + graphics */86#define MAX_VBS 1687#define MAX_VERTEX_ATTRIBS 1688#define MAX_RTS 889#define MAX_VSC_PIPES 3290#define MAX_VIEWPORTS 191#define MAX_SCISSORS 1692#define MAX_DISCARD_RECTANGLES 493#define MAX_PUSH_CONSTANTS_SIZE 12894#define MAX_PUSH_DESCRIPTORS 3295#define MAX_DYNAMIC_UNIFORM_BUFFERS 1696#define MAX_DYNAMIC_STORAGE_BUFFERS 897#define MAX_DYNAMIC_BUFFERS \98(MAX_DYNAMIC_UNIFORM_BUFFERS + MAX_DYNAMIC_STORAGE_BUFFERS)99#define MAX_SAMPLES_LOG2 4100#define NUM_META_FS_KEYS 13101#define PANVK_MAX_DRM_DEVICES 1102#define MAX_VIEWS 8103104#define NUM_DEPTH_CLEAR_PIPELINES 3105106#define panvk_printflike(a, b) __attribute__((__format__(__printf__, a, b)))107108/* Whenever we generate an error, pass it through this function. Useful for109* debugging, where we can break on it. Only call at error site, not when110* propagating errors. Might be useful to plug in a stack trace here.111*/112113struct panvk_instance;114115VkResult116__vk_errorf(struct panvk_instance *instance,117VkResult error,118const char *file,119int line,120const char *format,121...);122123#define vk_error(instance, error) \124__vk_errorf(instance, error, __FILE__, __LINE__, NULL);125#define vk_errorf(instance, error, format, ...) \126__vk_errorf(instance, error, __FILE__, __LINE__, format, ##__VA_ARGS__);127128void129panvk_logi(const char *format, ...) panvk_printflike(1, 2);130void131panvk_logi_v(const char *format, va_list va);132133#define panvk_stub() assert(!"stub")134135struct panvk_meta {136struct panvk_pool bin_pool;137struct panvk_pool desc_pool;138139/* Access to the blitter pools are protected by the blitter140* shader/rsd locks. They can't be merged with other binary/desc141* pools unless we patch pan_blitter.c to external pool locks.142*/143struct {144struct panvk_pool bin_pool;145struct panvk_pool desc_pool;146} blitter;147};148149struct panvk_physical_device {150struct vk_physical_device vk;151152/* The API agnostic device object. */153struct panfrost_device pdev;154155struct panvk_instance *instance;156157char path[20];158char name[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];159uint8_t driver_uuid[VK_UUID_SIZE];160uint8_t device_uuid[VK_UUID_SIZE];161uint8_t cache_uuid[VK_UUID_SIZE];162163struct wsi_device wsi_device;164struct panvk_meta meta;165166int master_fd;167};168169void170panvk_meta_init(struct panvk_physical_device *dev);171172void173panvk_meta_cleanup(struct panvk_physical_device *dev);174175176enum panvk_debug_flags {177PANVK_DEBUG_STARTUP = 1 << 0,178PANVK_DEBUG_NIR = 1 << 1,179PANVK_DEBUG_TRACE = 1 << 2,180PANVK_DEBUG_SYNC = 1 << 3,181PANVK_DEBUG_AFBC = 1 << 4,182PANVK_DEBUG_LINEAR = 1 << 5,183};184185struct panvk_instance {186struct vk_instance vk;187188uint32_t api_version;189int physical_device_count;190struct panvk_physical_device physical_devices[PANVK_MAX_DRM_DEVICES];191192enum panvk_debug_flags debug_flags;193};194195VkResult196panvk_wsi_init(struct panvk_physical_device *physical_device);197void198panvk_wsi_finish(struct panvk_physical_device *physical_device);199200bool201panvk_instance_extension_supported(const char *name);202uint32_t203panvk_physical_device_api_version(struct panvk_physical_device *dev);204bool205panvk_physical_device_extension_supported(struct panvk_physical_device *dev,206const char *name);207208struct panvk_pipeline_cache {209struct vk_object_base base;210VkAllocationCallbacks alloc;211};212213/* queue types */214#define PANVK_QUEUE_GENERAL 0215216#define PANVK_MAX_QUEUE_FAMILIES 1217218struct panvk_queue {219struct vk_object_base base;220struct panvk_device *device;221uint32_t queue_family_index;222VkDeviceQueueCreateFlags flags;223uint32_t sync;224};225226struct panvk_device {227struct vk_device vk;228229struct panvk_instance *instance;230231struct panvk_queue *queues[PANVK_MAX_QUEUE_FAMILIES];232int queue_count[PANVK_MAX_QUEUE_FAMILIES];233234struct panvk_physical_device *physical_device;235int _lost;236};237238VkResult _panvk_device_set_lost(struct panvk_device *device,239const char *file, int line,240const char *msg, ...) PRINTFLIKE(4, 5);241#define panvk_device_set_lost(dev, ...) \242_panvk_device_set_lost(dev, __FILE__, __LINE__, __VA_ARGS__)243244static inline bool245panvk_device_is_lost(struct panvk_device *device)246{247return unlikely(p_atomic_read(&device->_lost));248}249250struct panvk_batch {251struct list_head node;252struct util_dynarray jobs;253struct util_dynarray event_ops;254struct pan_scoreboard scoreboard;255struct {256const struct panvk_framebuffer *info;257struct panfrost_ptr desc;258} fb;259struct {260struct panfrost_bo *src, *dst;261} blit;262struct panfrost_ptr tls;263mali_ptr fragment_job;264struct {265struct pan_tiler_context ctx;266struct panfrost_ptr bifrost_descs;267union {268struct {269struct mali_bifrost_tiler_heap_packed heap;270struct mali_bifrost_tiler_packed tiler;271} bifrost;272struct mali_midgard_tiler_packed midgard;273} templ;274} tiler;275bool issued;276};277278struct panvk_syncobj {279uint32_t permanent, temporary;280};281282enum panvk_event_op_type {283PANVK_EVENT_OP_SET,284PANVK_EVENT_OP_RESET,285PANVK_EVENT_OP_WAIT,286};287288struct panvk_event_op {289enum panvk_event_op_type type;290struct panvk_event *event;291};292293struct panvk_fence {294struct vk_object_base base;295struct panvk_syncobj syncobj;296};297298struct panvk_semaphore {299struct vk_object_base base;300struct panvk_syncobj syncobj;301};302303int304panvk_signal_syncobjs(struct panvk_device *device,305struct panvk_syncobj *syncobj1,306struct panvk_syncobj *syncobj2);307308int309panvk_syncobj_to_fd(struct panvk_device *device,310struct panvk_syncobj *sync);311312struct panvk_device_memory {313struct vk_object_base base;314struct panfrost_bo *bo;315};316317struct panvk_descriptor {318union {319struct {320VkImageLayout layout;321struct panvk_image_view *view;322struct panvk_sampler *sampler;323} image;324325struct {326struct panvk_buffer *buffer;327uint64_t offset;328uint64_t range;329} buffer_info;330331struct panvk_buffer_view *buffer_view;332};333};334335struct panvk_descriptor_set {336struct vk_object_base base;337struct panvk_descriptor_pool *pool;338const struct panvk_descriptor_set_layout *layout;339struct panvk_descriptor *descs;340struct mali_uniform_buffer_packed *ubos;341struct mali_midgard_sampler_packed *samplers;342union {343struct mali_bifrost_texture_packed *bifrost;344mali_ptr *midgard;345} textures;346};347348#define MAX_SETS 4349350struct panvk_descriptor_set_binding_layout {351VkDescriptorType type;352353/* Number of array elements in this binding */354unsigned array_size;355356/* Indices in the desc arrays */357unsigned desc_idx;358union {359struct {360unsigned sampler_idx;361unsigned tex_idx;362};363struct {364union {365unsigned ssbo_idx;366unsigned ubo_idx;367};368unsigned dynoffset_idx;369};370};371372/* Shader stages affected by this set+binding */373uint16_t shader_stages;374375struct panvk_sampler **immutable_samplers;376};377378struct panvk_descriptor_set_layout {379struct vk_object_base base;380381/* The create flags for this descriptor set layout */382VkDescriptorSetLayoutCreateFlags flags;383384/* Shader stages affected by this descriptor set */385uint16_t shader_stages;386387unsigned num_descs;388unsigned num_samplers;389unsigned num_textures;390unsigned num_ubos;391unsigned num_ssbos;392unsigned num_dynoffsets;393394/* Number of bindings in this descriptor set */395uint32_t binding_count;396397/* Bindings in this descriptor set */398struct panvk_descriptor_set_binding_layout bindings[0];399};400401struct panvk_pipeline_layout {402struct vk_object_base base;403unsigned char sha1[20];404405unsigned num_samplers;406unsigned num_textures;407unsigned num_ubos;408unsigned num_ssbos;409unsigned num_dynoffsets;410uint32_t num_sets;411412struct {413struct panvk_descriptor_set_layout *layout;414unsigned sampler_offset;415unsigned tex_offset;416unsigned ubo_offset;417unsigned ssbo_offset;418unsigned dynoffset_offset;419} sets[MAX_SETS];420};421422struct panvk_desc_pool_counters {423unsigned samplers;424unsigned combined_image_samplers;425unsigned sampled_images;426unsigned storage_images;427unsigned uniform_texel_bufs;428unsigned storage_texel_bufs;429unsigned input_attachments;430unsigned uniform_bufs;431unsigned storage_bufs;432unsigned uniform_dyn_bufs;433unsigned storage_dyn_bufs;434unsigned sets;435};436437struct panvk_descriptor_pool {438struct vk_object_base base;439struct panvk_desc_pool_counters max;440struct panvk_desc_pool_counters cur;441struct panvk_descriptor_set *sets;442};443444struct panvk_buffer {445struct vk_object_base base;446VkDeviceSize size;447448VkBufferUsageFlags usage;449VkBufferCreateFlags flags;450451struct panfrost_bo *bo;452VkDeviceSize bo_offset;453};454455enum panvk_dynamic_state_bits {456PANVK_DYNAMIC_VIEWPORT = 1 << 0,457PANVK_DYNAMIC_SCISSOR = 1 << 1,458PANVK_DYNAMIC_LINE_WIDTH = 1 << 2,459PANVK_DYNAMIC_DEPTH_BIAS = 1 << 3,460PANVK_DYNAMIC_BLEND_CONSTANTS = 1 << 4,461PANVK_DYNAMIC_DEPTH_BOUNDS = 1 << 5,462PANVK_DYNAMIC_STENCIL_COMPARE_MASK = 1 << 6,463PANVK_DYNAMIC_STENCIL_WRITE_MASK = 1 << 7,464PANVK_DYNAMIC_STENCIL_REFERENCE = 1 << 8,465PANVK_DYNAMIC_DISCARD_RECTANGLE = 1 << 9,466PANVK_DYNAMIC_ALL = (1 << 10) - 1,467};468469struct panvk_descriptor_state {470struct {471const struct panvk_descriptor_set *set;472struct panfrost_ptr dynoffsets;473} sets[MAX_SETS];474mali_ptr sysvals[MESA_SHADER_STAGES];475mali_ptr ubos;476mali_ptr textures;477mali_ptr samplers;478};479480struct panvk_draw_info {481unsigned first_index;482unsigned index_count;483unsigned first_vertex;484unsigned vertex_count;485unsigned padded_vertex_count;486unsigned first_instance;487unsigned instance_count;488int vertex_offset;489unsigned offset_start;490struct mali_invocation_packed invocation;491struct {492mali_ptr varyings;493mali_ptr attributes;494mali_ptr push_constants;495} stages[MESA_SHADER_STAGES];496mali_ptr varying_bufs;497mali_ptr attribute_bufs;498mali_ptr textures;499mali_ptr samplers;500mali_ptr ubos;501mali_ptr position;502union {503mali_ptr psiz;504float line_width;505};506mali_ptr tls;507mali_ptr fb;508const struct pan_tiler_context *tiler_ctx;509mali_ptr fs_rsd;510mali_ptr viewport;511struct {512struct panfrost_ptr vertex;513struct panfrost_ptr tiler;514} jobs;515};516517struct panvk_attrib_info {518unsigned buf;519unsigned offset;520enum pipe_format format;521};522523struct panvk_attrib_buf_info {524bool special;525union {526struct {527unsigned stride;528bool per_instance;529};530unsigned special_id;531};532};533534struct panvk_attribs_info {535struct panvk_attrib_info attrib[PAN_MAX_ATTRIBUTE];536unsigned attrib_count;537struct panvk_attrib_buf_info buf[PAN_MAX_ATTRIBUTE];538unsigned buf_count;539};540541struct panvk_attrib_buf {542mali_ptr address;543unsigned size;544};545546struct panvk_cmd_state {547VkPipelineBindPoint bind_point;548549struct panvk_pipeline *pipeline;550551uint32_t dirty;552553struct panvk_varyings_info varyings;554mali_ptr fs_rsd;555556struct {557float constants[8][4];558} blend;559560struct {561struct pan_compute_dim wg_count;562} compute;563564struct {565struct {566float constant_factor;567float clamp;568float slope_factor;569} depth_bias;570float line_width;571} rast;572573struct {574struct panvk_attrib_buf bufs[MAX_VBS];575unsigned count;576mali_ptr attribs;577mali_ptr attrib_bufs;578} vb;579580/* Index buffer */581struct {582struct panvk_buffer *buffer;583uint64_t offset;584uint32_t type;585uint32_t max_index_count;586uint8_t index_size;587uint64_t index_va;588} ib;589590struct {591struct {592uint8_t compare_mask;593uint8_t write_mask;594uint8_t ref;595} s_front, s_back;596} zs;597598const struct panvk_render_pass *pass;599const struct panvk_subpass *subpass;600const struct panvk_framebuffer *framebuffer;601VkRect2D render_area;602603struct panvk_clear_value *clear;604605mali_ptr vpd;606VkViewport viewport;607VkRect2D scissor;608609struct panvk_batch *batch;610};611612struct panvk_cmd_pool {613struct vk_object_base base;614VkAllocationCallbacks alloc;615struct list_head active_cmd_buffers;616struct list_head free_cmd_buffers;617uint32_t queue_family_index;618struct panvk_bo_pool desc_bo_pool;619struct panvk_bo_pool varying_bo_pool;620struct panvk_bo_pool tls_bo_pool;621};622623enum panvk_cmd_buffer_status {624PANVK_CMD_BUFFER_STATUS_INVALID,625PANVK_CMD_BUFFER_STATUS_INITIAL,626PANVK_CMD_BUFFER_STATUS_RECORDING,627PANVK_CMD_BUFFER_STATUS_EXECUTABLE,628PANVK_CMD_BUFFER_STATUS_PENDING,629};630631struct panvk_cmd_buffer {632struct vk_object_base base;633634struct panvk_device *device;635636struct panvk_cmd_pool *pool;637struct list_head pool_link;638struct panvk_pool desc_pool;639struct panvk_pool varying_pool;640struct panvk_pool tls_pool;641struct list_head batches;642643VkCommandBufferUsageFlags usage_flags;644VkCommandBufferLevel level;645enum panvk_cmd_buffer_status status;646647struct panvk_cmd_state state;648uint32_t queue_family_index;649650uint8_t push_constants[MAX_PUSH_CONSTANTS_SIZE];651VkShaderStageFlags push_constant_stages;652struct panvk_descriptor_set meta_push_descriptors;653654struct panvk_descriptor_state descriptors[MAX_BIND_POINTS];655656VkResult record_result;657};658659void660panvk_cmd_open_batch(struct panvk_cmd_buffer *cmdbuf);661662void663panvk_cmd_close_batch(struct panvk_cmd_buffer *cmdbuf);664665void666panvk_cmd_get_midgard_polygon_list(struct panvk_cmd_buffer *cmdbuf,667unsigned width, unsigned height,668bool has_draws);669670void671panvk_cmd_get_bifrost_tiler_context(struct panvk_cmd_buffer *cmdbuf,672unsigned width, unsigned height);673674void675panvk_pack_color(struct panvk_clear_value *out,676const VkClearColorValue *in,677enum pipe_format format);678679struct panvk_event {680struct vk_object_base base;681uint32_t syncobj;682};683684struct panvk_shader_module {685struct vk_object_base base;686unsigned char sha1[20];687688uint32_t code_size;689const uint32_t *code[0];690};691692struct panvk_shader {693struct pan_shader_info info;694struct util_dynarray binary;695unsigned sysval_ubo;696};697698struct panvk_shader *699panvk_shader_create(struct panvk_device *dev,700gl_shader_stage stage,701const VkPipelineShaderStageCreateInfo *stage_info,702const struct panvk_pipeline_layout *layout,703unsigned sysval_ubo,704struct pan_blend_state *blend_state,705bool static_blend_constants,706const VkAllocationCallbacks *alloc);707708void709panvk_shader_destroy(struct panvk_device *dev,710struct panvk_shader *shader,711const VkAllocationCallbacks *alloc);712713union panvk_sysval_data {714float f32[4];715double f64[2];716uint32_t u32[4];717uint64_t u64[2];718};719720struct panvk_pipeline {721struct vk_object_base base;722723struct panvk_varyings_info varyings;724struct panvk_attribs_info attribs;725726const struct panvk_pipeline_layout *layout;727728unsigned active_stages;729730uint32_t dynamic_state_mask;731732struct panfrost_bo *binary_bo;733struct panfrost_bo *state_bo;734735mali_ptr vpd;736mali_ptr rsds[MESA_SHADER_STAGES];737738unsigned num_ubos;739unsigned num_sysvals;740741struct {742unsigned ubo_idx;743mali_ptr ubo;744struct panfrost_sysvals ids;745uint32_t dirty_mask;746} sysvals[MESA_SHADER_STAGES];747748unsigned tls_size;749unsigned wls_size;750751struct {752mali_ptr address;753struct pan_shader_info info;754struct mali_renderer_state_packed rsd_template;755bool required;756bool dynamic_rsd;757} fs;758759struct {760enum mali_draw_mode topology;761bool writes_point_size;762bool primitive_restart;763} ia;764765struct {766bool clamp_depth;767float line_width;768struct {769bool enable;770float constant_factor;771float clamp;772float slope_factor;773} depth_bias;774bool front_ccw;775bool cull_front_face;776bool cull_back_face;777} rast;778779struct {780bool z_test;781bool z_write;782enum mali_func z_compare_func;783bool s_test;784struct {785enum mali_stencil_op fail_op;786enum mali_stencil_op pass_op;787enum mali_stencil_op z_fail_op;788enum mali_func compare_func;789uint8_t compare_mask;790uint8_t write_mask;791uint8_t ref;792} s_front, s_back;793} zs;794795struct {796uint8_t rast_samples;797uint8_t min_samples;798uint16_t sample_mask;799bool alpha_to_coverage;800bool alpha_to_one;801} ms;802803struct {804struct pan_blend_state state;805struct mali_blend_packed bd_template[8];806struct {807uint8_t index;808uint16_t bifrost_factor;809} constant[8];810} blend;811812VkViewport viewport;813VkRect2D scissor;814};815816bool817panvk_blend_needs_lowering(const struct panfrost_device *dev,818const struct pan_blend_state *state,819unsigned rt);820821struct panvk_image_level {822VkDeviceSize offset;823VkDeviceSize size;824uint32_t pitch;825};826827struct panvk_slice_layout {828unsigned width;829unsigned height;830unsigned depth;831unsigned offset;832unsigned line_stride;833unsigned size;834835/* If there is a header preceding each slice, how big is836* that header? Used for AFBC.837*/838unsigned afbc_header_size;839840/* If checksumming is enabled following the slice, what841* is its offset/stride?842*/843struct {844unsigned offset;845unsigned stride;846unsigned size;847} checksum;848};849850#define PANVK_MAX_MIP_LEVELS 13851852struct panvk_plane_layout {853struct panvk_slice_layout slices[PANVK_MAX_MIP_LEVELS];854unsigned offset;855unsigned array_stride;856unsigned size;857};858859struct panvk_plane_memory {860const struct panfrost_bo *bo;861unsigned offset;862};863864#define PANVK_MAX_PLANES 1865866struct panvk_image {867struct vk_object_base base;868struct pan_image pimage;869VkImageType type;870871/* The original VkFormat provided by the client. This may not match any872* of the actual surface formats.873*/874VkFormat vk_format;875VkImageAspectFlags aspects;876VkImageUsageFlags usage; /**< Superset of VkImageCreateInfo::usage. */877VkImageTiling tiling; /** VkImageCreateInfo::tiling */878VkImageCreateFlags flags; /** VkImageCreateInfo::flags */879VkExtent3D extent;880881unsigned queue_family_mask;882bool exclusive;883bool shareable;884};885886unsigned887panvk_image_get_plane_size(const struct panvk_image *image, unsigned plane);888889unsigned890panvk_image_get_total_size(const struct panvk_image *image);891892struct panvk_image_view {893struct vk_object_base base;894struct pan_image_view pview;895896VkFormat vk_format;897struct panfrost_bo *bo;898struct {899struct mali_bifrost_texture_packed tex_desc;900} bifrost;901};902903struct panvk_sampler {904struct vk_object_base base;905struct mali_midgard_sampler_packed desc;906};907908struct panvk_buffer_view {909struct vk_object_base base;910};911912struct panvk_attachment_info {913struct panvk_image_view *iview;914};915916struct panvk_framebuffer {917struct vk_object_base base;918919uint32_t width;920uint32_t height;921uint32_t layers;922923uint32_t attachment_count;924struct panvk_attachment_info attachments[0];925};926927struct panvk_clear_value {928union {929uint32_t color[4];930struct {931float depth;932uint8_t stencil;933};934};935};936937struct panvk_subpass_attachment {938uint32_t idx;939VkImageLayout layout;940bool clear;941};942943struct panvk_subpass {944uint32_t input_count;945uint32_t color_count;946struct panvk_subpass_attachment *input_attachments;947uint8_t active_color_attachments;948struct panvk_subpass_attachment *color_attachments;949struct panvk_subpass_attachment *resolve_attachments;950struct panvk_subpass_attachment zs_attachment;951952uint32_t view_mask;953};954955struct panvk_render_pass_attachment {956VkAttachmentDescriptionFlags flags;957enum pipe_format format;958unsigned samples;959VkAttachmentLoadOp load_op;960VkAttachmentStoreOp store_op;961VkAttachmentLoadOp stencil_load_op;962VkAttachmentStoreOp stencil_store_op;963VkImageLayout initial_layout;964VkImageLayout final_layout;965unsigned view_mask;966unsigned clear_subpass;967};968969struct panvk_render_pass {970struct vk_object_base base;971972uint32_t attachment_count;973uint32_t subpass_count;974struct panvk_subpass_attachment *subpass_attachments;975struct panvk_render_pass_attachment *attachments;976struct panvk_subpass subpasses[0];977};978979static inline enum mali_func980panvk_translate_compare_func(VkCompareOp comp)981{982STATIC_ASSERT(VK_COMPARE_OP_NEVER == (VkCompareOp)MALI_FUNC_NEVER);983STATIC_ASSERT(VK_COMPARE_OP_LESS == (VkCompareOp)MALI_FUNC_LESS);984STATIC_ASSERT(VK_COMPARE_OP_EQUAL == (VkCompareOp)MALI_FUNC_EQUAL);985STATIC_ASSERT(VK_COMPARE_OP_LESS_OR_EQUAL == (VkCompareOp)MALI_FUNC_LEQUAL);986STATIC_ASSERT(VK_COMPARE_OP_GREATER == (VkCompareOp)MALI_FUNC_GREATER);987STATIC_ASSERT(VK_COMPARE_OP_NOT_EQUAL == (VkCompareOp)MALI_FUNC_NOT_EQUAL);988STATIC_ASSERT(VK_COMPARE_OP_GREATER_OR_EQUAL == (VkCompareOp)MALI_FUNC_GEQUAL);989STATIC_ASSERT(VK_COMPARE_OP_ALWAYS == (VkCompareOp)MALI_FUNC_ALWAYS);990991return (enum mali_func)comp;992}993994VK_DEFINE_HANDLE_CASTS(panvk_cmd_buffer, base, VkCommandBuffer, VK_OBJECT_TYPE_COMMAND_BUFFER)995VK_DEFINE_HANDLE_CASTS(panvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE)996VK_DEFINE_HANDLE_CASTS(panvk_instance, vk.base, VkInstance, VK_OBJECT_TYPE_INSTANCE)997VK_DEFINE_HANDLE_CASTS(panvk_physical_device, vk.base, VkPhysicalDevice, VK_OBJECT_TYPE_PHYSICAL_DEVICE)998VK_DEFINE_HANDLE_CASTS(panvk_queue, base, VkQueue, VK_OBJECT_TYPE_QUEUE)9991000VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_cmd_pool, base, VkCommandPool, VK_OBJECT_TYPE_COMMAND_POOL)1001VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER)1002VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer_view, base, VkBufferView, VK_OBJECT_TYPE_BUFFER_VIEW)1003VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_pool, base, VkDescriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL)1004VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set, base, VkDescriptorSet, VK_OBJECT_TYPE_DESCRIPTOR_SET)1005VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set_layout, base,1006VkDescriptorSetLayout, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)1007VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_device_memory, base, VkDeviceMemory, VK_OBJECT_TYPE_DEVICE_MEMORY)1008VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_fence, base, VkFence, VK_OBJECT_TYPE_FENCE)1009VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_event, base, VkEvent, VK_OBJECT_TYPE_EVENT)1010VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_framebuffer, base, VkFramebuffer, VK_OBJECT_TYPE_FRAMEBUFFER)1011VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image, base, VkImage, VK_OBJECT_TYPE_IMAGE)1012VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image_view, base, VkImageView, VK_OBJECT_TYPE_IMAGE_VIEW);1013VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline_cache, base, VkPipelineCache, VK_OBJECT_TYPE_PIPELINE_CACHE)1014VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline, base, VkPipeline, VK_OBJECT_TYPE_PIPELINE)1015VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_pipeline_layout, base, VkPipelineLayout, VK_OBJECT_TYPE_PIPELINE_LAYOUT)1016VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_render_pass, base, VkRenderPass, VK_OBJECT_TYPE_RENDER_PASS)1017VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_sampler, base, VkSampler, VK_OBJECT_TYPE_SAMPLER)1018VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_shader_module, base, VkShaderModule, VK_OBJECT_TYPE_SHADER_MODULE)1019VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_semaphore, base, VkSemaphore, VK_OBJECT_TYPE_SEMAPHORE)10201021#endif /* PANVK_PRIVATE_H */102210231024