In pre-Broadwell devices, as B4G4R4A4 is not supported natively, we workaround it by using a format with a more complex swizzle, that uses blue in alpha component.
Signed-off-by: Juan A. Suarez Romero <jasua...@igalia.com> --- src/intel/vulkan/anv_private.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 51e85c7..e9bf13c 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1559,13 +1559,19 @@ static inline struct isl_swizzle anv_swizzle_for_render(struct isl_swizzle swizzle) { /* Sometimes the swizzle will have alpha map to one. We do this to fake - * RGB as RGBA for texturing + * RGB as RGBA for texturing. + * + * It can have also alpha to blue. This happens to workaround support for + * B4G4R4A4 in gen < 8 devices, as this not supported natively. */ assert(swizzle.a == ISL_CHANNEL_SELECT_ONE || - swizzle.a == ISL_CHANNEL_SELECT_ALPHA); + swizzle.a == ISL_CHANNEL_SELECT_ALPHA || + swizzle.a == ISL_CHANNEL_SELECT_BLUE); - /* But it doesn't matter what we render to that channel */ - swizzle.a = ISL_CHANNEL_SELECT_ALPHA; + /* But it doesn't matter what we render to that channel, except for the + * B4G4R4A4 workaround */ + if (swizzle.a == ISL_CHANNEL_SELECT_ONE) + swizzle.a = ISL_CHANNEL_SELECT_ALPHA; return swizzle; } -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev