radv: Add support for IMG_DATA_FORMAT_32_32_32.
Basic sampling support for linear tiling. No CTS regressions, but it seems the blitting coverage is not very extensive. https://bugs.freedesktop.org/show_bug.cgi?id=106331 Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
dd102405de
commit
e361970ed7
|
@ -1320,6 +1320,10 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib,
|
||||||
assert(!(surf->flags & RADEON_SURF_Z_OR_SBUFFER));
|
assert(!(surf->flags & RADEON_SURF_Z_OR_SBUFFER));
|
||||||
AddrSurfInfoIn.format = ADDR_FMT_32_32;
|
AddrSurfInfoIn.format = ADDR_FMT_32_32;
|
||||||
break;
|
break;
|
||||||
|
case 12:
|
||||||
|
assert(!(surf->flags & RADEON_SURF_Z_OR_SBUFFER));
|
||||||
|
AddrSurfInfoIn.format = ADDR_FMT_32_32_32;
|
||||||
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
assert(!(surf->flags & RADEON_SURF_Z_OR_SBUFFER));
|
assert(!(surf->flags & RADEON_SURF_Z_OR_SBUFFER));
|
||||||
AddrSurfInfoIn.format = ADDR_FMT_32_32_32_32;
|
AddrSurfInfoIn.format = ADDR_FMT_32_32_32_32;
|
||||||
|
|
|
@ -321,10 +321,8 @@ uint32_t radv_translate_tex_dataformat(VkFormat format,
|
||||||
return V_008F14_IMG_DATA_FORMAT_32;
|
return V_008F14_IMG_DATA_FORMAT_32;
|
||||||
case 2:
|
case 2:
|
||||||
return V_008F14_IMG_DATA_FORMAT_32_32;
|
return V_008F14_IMG_DATA_FORMAT_32_32;
|
||||||
#if 0 /* Not supported for render targets */
|
|
||||||
case 3:
|
case 3:
|
||||||
return V_008F14_IMG_DATA_FORMAT_32_32_32;
|
return V_008F14_IMG_DATA_FORMAT_32_32_32;
|
||||||
#endif
|
|
||||||
case 4:
|
case 4:
|
||||||
return V_008F14_IMG_DATA_FORMAT_32_32_32_32;
|
return V_008F14_IMG_DATA_FORMAT_32_32_32_32;
|
||||||
}
|
}
|
||||||
|
@ -638,13 +636,17 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
||||||
tiled |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
|
tiled |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tiled && util_is_power_of_two_or_zero(vk_format_get_blocksize(format)) && !scaled) {
|
if (tiled && !scaled) {
|
||||||
tiled |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
|
tiled |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
|
||||||
VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
|
VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tiled formatting does not support NPOT pixel sizes */
|
||||||
|
if (!util_is_power_of_two_or_zero(vk_format_get_blocksize(format)))
|
||||||
|
tiled = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (linear && util_is_power_of_two_or_zero(vk_format_get_blocksize(format)) && !scaled) {
|
if (linear && !scaled) {
|
||||||
linear |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
|
linear |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR |
|
||||||
VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
|
VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ vk_format_for_size(int bs)
|
||||||
case 2: return VK_FORMAT_R8G8_UINT;
|
case 2: return VK_FORMAT_R8G8_UINT;
|
||||||
case 4: return VK_FORMAT_R8G8B8A8_UINT;
|
case 4: return VK_FORMAT_R8G8B8A8_UINT;
|
||||||
case 8: return VK_FORMAT_R16G16B16A16_UINT;
|
case 8: return VK_FORMAT_R16G16B16A16_UINT;
|
||||||
|
case 12: return VK_FORMAT_R32G32B32_UINT;
|
||||||
case 16: return VK_FORMAT_R32G32B32A32_UINT;
|
case 16: return VK_FORMAT_R32G32B32A32_UINT;
|
||||||
default:
|
default:
|
||||||
unreachable("Invalid format block size");
|
unreachable("Invalid format block size");
|
||||||
|
|
Loading…
Reference in New Issue