ac/radv/radeonsi: add ac_get_num_physical_sgprs() helper
[mesa.git] / src / amd / vulkan / radv_meta.h
index 252514540ed3799ca39d3c95aa75cd0a096e6d23..5e0afd11a001709849f2beb26df1979186bffd2b 100644 (file)
 extern "C" {
 #endif
 
+enum radv_meta_save_flags {
+       RADV_META_SAVE_PASS              = (1 << 0),
+       RADV_META_SAVE_CONSTANTS         = (1 << 1),
+       RADV_META_SAVE_DESCRIPTORS       = (1 << 2),
+       RADV_META_SAVE_GRAPHICS_PIPELINE = (1 << 3),
+       RADV_META_SAVE_COMPUTE_PIPELINE  = (1 << 4),
+};
+
 struct radv_meta_saved_state {
+       uint32_t flags;
+
        struct radv_descriptor_set *old_descriptor_set0;
        struct radv_pipeline *old_pipeline;
        struct radv_viewport_state viewport;
        struct radv_scissor_state scissor;
 
        char push_constants[128];
-};
 
-struct radv_meta_saved_pass_state {
        struct radv_render_pass *pass;
        const struct radv_subpass *subpass;
        struct radv_attachment_state *attachments;
@@ -50,59 +58,44 @@ struct radv_meta_saved_pass_state {
        VkRect2D render_area;
 };
 
-struct radv_meta_saved_compute_state {
-       struct radv_descriptor_set *old_descriptor_set0;
-       struct radv_pipeline *old_pipeline;
-
-       unsigned push_constant_size;
-       char push_constants[128];
-};
-
-VkResult radv_device_init_meta_clear_state(struct radv_device *device);
+VkResult radv_device_init_meta_clear_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_clear_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_resolve_state(struct radv_device *device);
+VkResult radv_device_init_meta_resolve_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_resolve_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_depth_decomp_state(struct radv_device *device);
+VkResult radv_device_init_meta_depth_decomp_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_depth_decomp_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_fast_clear_flush_state(struct radv_device *device);
+VkResult radv_device_init_meta_fast_clear_flush_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_fast_clear_flush_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_blit_state(struct radv_device *device);
+VkResult radv_device_init_meta_blit_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_blit_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_blit2d_state(struct radv_device *device);
+VkResult radv_device_init_meta_blit2d_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_blit2d_state(struct radv_device *device);
 
 VkResult radv_device_init_meta_buffer_state(struct radv_device *device);
 void radv_device_finish_meta_buffer_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_query_state(struct radv_device *device);
+VkResult radv_device_init_meta_query_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_query_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_resolve_compute_state(struct radv_device *device);
+VkResult radv_device_init_meta_resolve_compute_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_resolve_compute_state(struct radv_device *device);
 
-VkResult radv_device_init_meta_resolve_fragment_state(struct radv_device *device);
+VkResult radv_device_init_meta_resolve_fragment_state(struct radv_device *device, bool on_demand);
 void radv_device_finish_meta_resolve_fragment_state(struct radv_device *device);
 
-void radv_meta_restore(const struct radv_meta_saved_state *state,
-                      struct radv_cmd_buffer *cmd_buffer);
-
-void radv_meta_save_pass(struct radv_meta_saved_pass_state *state,
-                        const struct radv_cmd_buffer *cmd_buffer);
+VkResult radv_device_init_meta_fmask_expand_state(struct radv_device *device);
+void radv_device_finish_meta_fmask_expand_state(struct radv_device *device);
 
-void radv_meta_restore_pass(const struct radv_meta_saved_pass_state *state,
-                           struct radv_cmd_buffer *cmd_buffer);
+void radv_meta_save(struct radv_meta_saved_state *saved_state,
+                   struct radv_cmd_buffer *cmd_buffer, uint32_t flags);
 
-void radv_meta_save_compute(struct radv_meta_saved_compute_state *state,
-                           const struct radv_cmd_buffer *cmd_buffer,
-                           unsigned push_constant_size);
-
-void radv_meta_restore_compute(const struct radv_meta_saved_compute_state *state,
-                              struct radv_cmd_buffer *cmd_buffer);
+void radv_meta_restore(const struct radv_meta_saved_state *state,
+                      struct radv_cmd_buffer *cmd_buffer);
 
 VkImageViewType radv_meta_get_view_type(const struct radv_image *image);
 
@@ -119,6 +112,7 @@ struct radv_meta_blit2d_surf {
        unsigned level;
        unsigned layer;
        VkImageAspectFlags aspect_mask;
+       VkImageLayout current_layout;
 };
 
 struct radv_meta_blit2d_buffer {
@@ -180,9 +174,12 @@ void radv_resummarize_depth_image_inplace(struct radv_cmd_buffer *cmd_buffer,
 void radv_fast_clear_flush_image_inplace(struct radv_cmd_buffer *cmd_buffer,
                                         struct radv_image *image,
                                         const VkImageSubresourceRange *subresourceRange);
-
-void radv_meta_save_graphics_reset_vport_scissor_novertex(struct radv_meta_saved_state *saved_state,
-                                                         struct radv_cmd_buffer *cmd_buffer);
+void radv_decompress_dcc(struct radv_cmd_buffer *cmd_buffer,
+                       struct radv_image *image,
+                        const VkImageSubresourceRange *subresourceRange);
+void radv_expand_fmask_image_inplace(struct radv_cmd_buffer *cmd_buffer,
+                                    struct radv_image *image,
+                                    const VkImageSubresourceRange *subresourceRange);
 
 void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
                                     struct radv_image *src_image,
@@ -200,9 +197,20 @@ void radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer,
                                      uint32_t region_count,
                                      const VkImageResolve *regions);
 
-void radv_blit_to_prime_linear(struct radv_cmd_buffer *cmd_buffer,
-                              struct radv_image *image,
-                              struct radv_image *linear_image);
+void radv_decompress_resolve_subpass_src(struct radv_cmd_buffer *cmd_buffer);
+
+void radv_decompress_resolve_src(struct radv_cmd_buffer *cmd_buffer,
+                                struct radv_image *src_image,
+                                VkImageLayout src_image_layout,
+                                uint32_t region_count,
+                                const VkImageResolve *regions);
+
+uint32_t radv_clear_cmask(struct radv_cmd_buffer *cmd_buffer,
+                         struct radv_image *image, uint32_t value);
+uint32_t radv_clear_fmask(struct radv_cmd_buffer *cmd_buffer,
+                         struct radv_image *image, uint32_t value);
+uint32_t radv_clear_dcc(struct radv_cmd_buffer *cmd_buffer,
+                       struct radv_image *image, uint32_t value);
 
 /* common nir builder helpers */
 #include "nir/nir_builder.h"