/* * Copyright 2022 Alyssa Rosenzweig * SPDX-License-Identifier: MIT */ #pragma once #include "asahi/compiler/agx_compile.h" #include "agx_tilebuffer.h" #include "pool.h" struct agx_bg_eot_cache { struct agx_device *dev; struct agx_pool pool; /* Map from agx_bg_eot_key to agx_bg_eot_shader */ struct hash_table *ht; }; enum agx_bg_eot_op { AGX_BG_EOT_NONE, AGX_BG_CLEAR, AGX_BG_LOAD, AGX_EOT_STORE, }; struct agx_bg_eot_key { struct agx_tilebuffer_layout tib; enum agx_bg_eot_op op[8]; unsigned reserved_preamble; }; struct agx_bg_eot_shader { struct agx_bg_eot_key key; struct agx_shader_info info; struct agx_bo *bo; uint32_t ptr; }; struct agx_bg_eot_shader *agx_get_bg_eot_shader(struct agx_bg_eot_cache *cache, struct agx_bg_eot_key *key); void agx_bg_eot_init(struct agx_bg_eot_cache *cache, struct agx_device *dev); void agx_bg_eot_cleanup(struct agx_bg_eot_cache *cache);