diff --git a/src/virtio/vulkan/vn_feedback.c b/src/virtio/vulkan/vn_feedback.c index 9069533c3f9..d85340455d2 100644 --- a/src/virtio/vulkan/vn_feedback.c +++ b/src/virtio/vulkan/vn_feedback.c @@ -134,10 +134,12 @@ vn_feedback_buffer_destroy(struct vn_device *dev, } static inline uint32_t -vn_get_feedback_buffer_alignment(struct vn_feedback_buffer *fb_buf) +vn_get_feedback_buffer_alignment(struct vn_device *dev, + struct vn_feedback_buffer *fb_buf) { struct vn_buffer *buf = vn_buffer_from_handle(fb_buf->buf_handle); - return buf->requirements.memory.memoryRequirements.alignment; + return align(buf->requirements.memory.memoryRequirements.alignment, + dev->physical_device->wa_min_fb_align); } static VkResult @@ -153,7 +155,7 @@ vn_feedback_pool_grow_locked(struct vn_feedback_pool *pool) return result; pool->used = 0; - pool->alignment = vn_get_feedback_buffer_alignment(fb_buf); + pool->alignment = vn_get_feedback_buffer_alignment(pool->dev, fb_buf); list_add(&fb_buf->head, &pool->fb_bufs); diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index e72663201f4..3022a79e7c0 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -417,6 +417,8 @@ vn_physical_device_sanitize_properties(struct vn_physical_device *physical_dev) if (!forward_driver_version) props->driverVersion = vk_get_driver_version(); + physical_dev->wa_min_fb_align = strstr(props->deviceName, "JSL") ? 128 : 1; + char device_name[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; int device_name_len = snprintf(device_name, sizeof(device_name), "Virtio-GPU Venus (%s)", props->deviceName); diff --git a/src/virtio/vulkan/vn_physical_device.h b/src/virtio/vulkan/vn_physical_device.h index cc9dbb219d3..5e12acd5c52 100644 --- a/src/virtio/vulkan/vn_physical_device.h +++ b/src/virtio/vulkan/vn_physical_device.h @@ -73,6 +73,11 @@ struct vn_physical_device { struct vk_device_extension_table renderer_extensions; uint32_t *extension_spec_versions; + /* Venus feedback encounters cacheline overflush issue on Intel JSL, and + * has to workaround by further aligning up the feedback buffer alignment. + */ + uint32_t wa_min_fb_align; + enum VkDriverId renderer_driver_id; VkQueueFamilyProperties2 *queue_family_properties;