}
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;
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);
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,
/* 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);
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);
+ }
}
/**
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) {