mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
anv/clear: Clear E5B9G9R9 images as R32_UINT
We can't actually clear these images normally because we can't render to
them. Instead, we have to manually unpack the rgb9e5 color value on the
CPU and clear it as R32_UINT. We still have a bit of work to do to clear
non-power-of-two images, but this should get all of the power-of-two clears
working on at least Haswell. This fixes three of the new Vulkan CTS tests
in the dEQP-VK.api.image_clearing.clear_color_image.* group.
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 7bdccd104b)
[Emil Velikov: rgb9e5 header is renamed in master
s/format_rgb9e5.h/u_format_rgb9e5.h/]
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
015b920fb4
commit
42fe245370
1 changed files with 14 additions and 2 deletions
|
|
@ -25,6 +25,8 @@
|
|||
#include "anv_private.h"
|
||||
#include "nir/nir_builder.h"
|
||||
|
||||
#include "util/u_format_rgb9e5.h"
|
||||
|
||||
/** Vertex attributes for color clears. */
|
||||
struct color_clear_vattrs {
|
||||
struct anv_vue_header vue_header;
|
||||
|
|
@ -760,6 +762,16 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
|
|||
{
|
||||
VkDevice device_h = anv_device_to_handle(cmd_buffer->device);
|
||||
|
||||
VkFormat vk_format = image->vk_format;
|
||||
if (vk_format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) {
|
||||
/* We can't actually render to this format so we have to work around it
|
||||
* by manually unpacking and using R32_UINT.
|
||||
*/
|
||||
clear_value.color.uint32[0] =
|
||||
float3_to_rgb9e5(clear_value.color.float32);
|
||||
vk_format = VK_FORMAT_R32_UINT;
|
||||
}
|
||||
|
||||
for (uint32_t r = 0; r < range_count; r++) {
|
||||
const VkImageSubresourceRange *range = &ranges[r];
|
||||
for (uint32_t l = 0; l < anv_get_levelCount(image, range); ++l) {
|
||||
|
|
@ -773,7 +785,7 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
|
|||
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
||||
.image = anv_image_to_handle(image),
|
||||
.viewType = anv_meta_get_view_type(image),
|
||||
.format = image->vk_format,
|
||||
.format = vk_format,
|
||||
.subresourceRange = {
|
||||
.aspectMask = range->aspectMask,
|
||||
.baseMipLevel = range->baseMipLevel + l,
|
||||
|
|
@ -800,7 +812,7 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer,
|
|||
&fb);
|
||||
|
||||
VkAttachmentDescription att_desc = {
|
||||
.format = iview.vk_format,
|
||||
.format = vk_format,
|
||||
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||
.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue