radv: don't emit unneeded vertex state.
[mesa.git] / src / amd / vulkan / radv_meta.h
index 45a91f76a72bc5b33dd1ea1eaba440a27a53b047..9f3198e87976c6bca7d894a640c44664381cff23 100644 (file)
 #define RADV_META_H
 
 #include "radv_private.h"
+#include "radv_shader.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#define RADV_META_VERTEX_BINDING_COUNT 2
+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 {
-       bool vertex_saved;
-       /**
-        * Bitmask of (1 << VK_DYNAMIC_STATE_*). Defines the set of saved dynamic
-        * state.
-        */
-       uint32_t dynamic_mask;
-       struct radv_dynamic_state dynamic;
-       struct radv_vertex_binding old_vertex_bindings[RADV_META_VERTEX_BINDING_COUNT];
+       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;
@@ -57,13 +58,6 @@ 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;
-
-       char push_constants[128];
-};
-
 VkResult radv_device_init_meta_clear_state(struct radv_device *device);
 void radv_device_finish_meta_clear_state(struct radv_device *device);
 
@@ -94,23 +88,12 @@ void radv_device_finish_meta_resolve_compute_state(struct radv_device *device);
 VkResult radv_device_init_meta_resolve_fragment_state(struct radv_device *device);
 void radv_device_finish_meta_resolve_fragment_state(struct radv_device *device);
 
+void radv_meta_save(struct radv_meta_saved_state *saved_state,
+                   struct radv_cmd_buffer *cmd_buffer, uint32_t flags);
+
 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);
-
-void radv_meta_restore_pass(const struct radv_meta_saved_pass_state *state,
-                           struct radv_cmd_buffer *cmd_buffer);
-
-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,
-                              unsigned push_constant_size);
-
 VkImageViewType radv_meta_get_view_type(const struct radv_image *image);
 
 uint32_t radv_meta_get_iview_layer(const struct radv_image *dest_image,
@@ -126,6 +109,7 @@ struct radv_meta_blit2d_surf {
        unsigned level;
        unsigned layer;
        VkImageAspectFlags aspect_mask;
+       VkImageLayout current_layout;
 };
 
 struct radv_meta_blit2d_buffer {
@@ -158,18 +142,6 @@ void radv_meta_end_blit2d(struct radv_cmd_buffer *cmd_buffer,
 
 VkResult radv_device_init_meta_bufimage_state(struct radv_device *device);
 void radv_device_finish_meta_bufimage_state(struct radv_device *device);
-void radv_meta_begin_bufimage(struct radv_cmd_buffer *cmd_buffer,
-                             struct radv_meta_saved_compute_state *save);
-void radv_meta_end_bufimage(struct radv_cmd_buffer *cmd_buffer,
-                           struct radv_meta_saved_compute_state *save);
-void radv_meta_begin_itoi(struct radv_cmd_buffer *cmd_buffer,
-                         struct radv_meta_saved_compute_state *save);
-void radv_meta_end_itoi(struct radv_cmd_buffer *cmd_buffer,
-                       struct radv_meta_saved_compute_state *save);
-void radv_meta_begin_cleari(struct radv_cmd_buffer *cmd_buffer,
-                           struct radv_meta_saved_compute_state *save);
-void radv_meta_end_cleari(struct radv_cmd_buffer *cmd_buffer,
-                         struct radv_meta_saved_compute_state *save);
 void radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer,
                               struct radv_meta_blit2d_surf *src,
                               struct radv_meta_blit2d_buffer *dst,
@@ -199,9 +171,9 @@ 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_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
                                     struct radv_image *src_image,