X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgallium%2Fdrivers%2Fzink%2Fzink_program.h;fp=src%2Fgallium%2Fdrivers%2Fzink%2Fzink_program.h;h=60fc778476f9a666035feb9e7a05bd105cfd3ef4;hb=a03d17ede778610f2c66099d0d5342cf09ef12a2;hp=aaad9f31a93f2f1e8037e881342e5e6129b15e85;hpb=8772c693c5a0b94be7fd891c278e504dabc0ee54;p=mesa.git diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h index aaad9f31a93..60fc778476f 100644 --- a/src/gallium/drivers/zink/zink_program.h +++ b/src/gallium/drivers/zink/zink_program.h @@ -27,6 +27,7 @@ #include #include "pipe/p_state.h" +#include "util/u_inlines.h" struct zink_context; struct zink_screen; @@ -37,6 +38,8 @@ struct hash_table; struct set; struct zink_gfx_program { + struct pipe_reference reference; + struct zink_shader *stages[PIPE_SHADER_TYPES - 1]; // compute stage doesn't belong here VkDescriptorSetLayout dsl; VkPipelineLayout layout; @@ -61,4 +64,20 @@ zink_get_gfx_pipeline(struct zink_screen *screen, void zink_program_init(struct zink_context *ctx); + +void +debug_describe_zink_gfx_program(char* buf, const struct zink_gfx_program *ptr); + +static inline void +zink_gfx_program_reference(struct zink_screen *screen, + struct zink_gfx_program **dst, + struct zink_gfx_program *src) +{ + struct zink_gfx_program *old_dst = dst ? *dst : NULL; + + if (pipe_reference_described(old_dst ? &old_dst->reference : NULL, &src->reference, + (debug_reference_descriptor)debug_describe_zink_gfx_program)) + zink_destroy_gfx_program(screen, old_dst); + if (dst) *dst = src; +} #endif