From: Iván Briano Date: Mon, 5 Dec 2022 23:52:09 +0000 (-0800) Subject: anv: expose some helper functions X-Git-Tag: upstream/23.3.3~9597 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5faf75dd74f2c5bf34716a84e4c7f899535e320d;p=platform%2Fupstream%2Fmesa.git anv: expose some helper functions v2: (Rohan Garg) - Make set_fast_clear_state take an image and format instead of an iview Reviewed-by: Nanley Chery Part-of: --- diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index 1a92eda..05efe15 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -257,6 +257,26 @@ anv_cmd_buffer_mark_image_written(struct anv_cmd_buffer *cmd_buffer, } void +anv_cmd_buffer_mark_image_fast_cleared(struct anv_cmd_buffer *cmd_buffer, + const struct anv_image *image, + const enum isl_format format, + union isl_color_value clear_color) +{ + const struct intel_device_info *devinfo = cmd_buffer->device->info; + anv_genX(devinfo, set_fast_clear_state)(cmd_buffer, image, format, + clear_color); +} + +void +anv_cmd_buffer_load_clear_color_from_image(struct anv_cmd_buffer *cmd_buffer, + struct anv_state state, + const struct anv_image *image) +{ + const struct intel_device_info *devinfo = cmd_buffer->device->info; + anv_genX(devinfo, load_image_clear_color)(cmd_buffer, state, image); +} + +void anv_cmd_emit_conditional_render_predicate(struct anv_cmd_buffer *cmd_buffer) { const struct intel_device_info *devinfo = cmd_buffer->device->info; diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h index e0b0369..30a323d 100644 --- a/src/intel/vulkan/anv_genX.h +++ b/src/intel/vulkan/anv_genX.h @@ -58,6 +58,17 @@ VkResult genX(init_device_state)(struct anv_device *device); void genX(init_cps_device_state)(struct anv_device *device); +void +genX(set_fast_clear_state)(struct anv_cmd_buffer *cmd_buffer, + const struct anv_image *image, + const enum isl_format format, + union isl_color_value clear_color); + +void +genX(load_image_clear_color)(struct anv_cmd_buffer *cmd_buffer, + struct anv_state surface_state, + const struct anv_image *image); + void genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer); void genX(cmd_buffer_apply_pipe_flushes)(struct anv_cmd_buffer *cmd_buffer); diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 285afde..e6f2d7c 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -3997,6 +3997,17 @@ anv_cmd_buffer_mark_image_written(struct anv_cmd_buffer *cmd_buffer, uint32_t layer_count); void +anv_cmd_buffer_mark_image_fast_cleared(struct anv_cmd_buffer *cmd_buffer, + const struct anv_image *image, + const enum isl_format format, + union isl_color_value clear_color); + +void +anv_cmd_buffer_load_clear_color_from_image(struct anv_cmd_buffer *cmd_buffer, + struct anv_state state, + const struct anv_image *image); + +void anv_image_clear_color(struct anv_cmd_buffer *cmd_buffer, const struct anv_image *image, VkImageAspectFlagBits aspect, diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index e5af964..6e5c913 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -785,11 +785,12 @@ init_fast_clear_color(struct anv_cmd_buffer *cmd_buffer, /* Copy the fast-clear value dword(s) between a surface state object and an * image's fast clear state buffer. */ -static void +void genX(load_image_clear_color)(struct anv_cmd_buffer *cmd_buffer, struct anv_state surface_state, const struct anv_image *image) { +#if GFX_VER < 10 assert(cmd_buffer && image); assert(image->vk.aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV); @@ -824,6 +825,29 @@ genX(load_image_clear_color)(struct anv_cmd_buffer *cmd_buffer, anv_add_pending_pipe_bits(cmd_buffer, ANV_PIPE_STATE_CACHE_INVALIDATE_BIT, "after load_image_clear_color surface state update"); +#endif +} + +void +genX(set_fast_clear_state)(struct anv_cmd_buffer *cmd_buffer, + const struct anv_image *image, + const enum isl_format format, + union isl_color_value clear_color) +{ + if (isl_color_value_is_zero(clear_color, format)) { + /* This image has the auxiliary buffer enabled. We can mark the + * subresource as not needing a resolve because the clear color + * will match what's in every RENDER_SURFACE_STATE object when + * it's being used for sampling. + */ + set_image_fast_clear_state(cmd_buffer, image, + VK_IMAGE_ASPECT_COLOR_BIT, + ANV_FAST_CLEAR_DEFAULT_VALUE); + } else { + set_image_fast_clear_state(cmd_buffer, image, + VK_IMAGE_ASPECT_COLOR_BIT, + ANV_FAST_CLEAR_ANY); + } } /** @@ -7143,21 +7167,9 @@ void genX(CmdBeginRendering)( base_clear_layer++; clear_layer_count--; - if (isl_color_value_is_zero(clear_color, - iview->planes[0].isl.format)) { - /* This image has the auxiliary buffer enabled. We can mark the - * subresource as not needing a resolve because the clear color - * will match what's in every RENDER_SURFACE_STATE object when - * it's being used for sampling. - */ - set_image_fast_clear_state(cmd_buffer, iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - ANV_FAST_CLEAR_DEFAULT_VALUE); - } else { - set_image_fast_clear_state(cmd_buffer, iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - ANV_FAST_CLEAR_ANY); - } + genX(set_fast_clear_state)(cmd_buffer, iview->image, + iview->planes[0].isl.format, + clear_color); } if (is_multiview) {