+Ken
On Tue, May 16, 2017 at 10:17:11AM -0700, Nanley Chery wrote: > The procedure for decompressing an opaque BC1 Vulkan format is dependant on > the > comparison of two colors stored in the first 32 bits of the compressed block. > Here's the specified OpenGL (and Vulkan) behavior for reference: > > The RGB color for a texel at location (x,y) in the block is given by: > > RGB0, if color0 > color1 and code(x,y) == 0 > RGB1, if color0 > color1 and code(x,y) == 1 > (2*RGB0+RGB1)/3, if color0 > color1 and code(x,y) == 2 > (RGB0+2*RGB1)/3, if color0 > color1 and code(x,y) == 3 > > RGB0, if color0 <= color1 and code(x,y) == 0 > RGB1, if color0 <= color1 and code(x,y) == 1 > (RGB0+RGB1)/2, if color0 <= color1 and code(x,y) == 2 > BLACK, if color0 <= color1 and code(x,y) == 3 > > The sampling operation performed on an opaque DXT1 Intel format essentially > hard-codes the comparison result of the two colors as color0 > color1. This > means that the behavior is incompatible with OpenGL and Vulkan. This is stated > in the SKL PRM, Vol 5: Memory Views: > > Opaque Textures (DXT1_RGB) > Texture format DXT1_RGB is identical to DXT1, with the exception that > the > One-bit Alpha encoding is removed. Color 0 and Color 1 are not > compared, and > the resulting texel color is derived strictly from the Opaque Color > Encoding. > The alpha channel defaults to 1.0. > > Programming Note > Context: Opaque Textures (DXT1_RGB) > The behavior of this format is not compliant with the OGL spec. > > The opaque and non-opaque BC1 Vulkan formats are specified to be decoded in > exactly the same way except the BLACK value must have a transparent alpha > channel in the latter. Use the four-channel BC1 Intel formats with the alpha > set to 1 to provide the behavior required by the spec. > > v2 (Kenneth Graunke): > - Provide a more detailed commit message. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100925 > Cc: <mesa-sta...@lists.freedesktop.org> > Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> (v1) > Signed-off-by: Nanley Chery <nanley.g.ch...@intel.com> > --- > src/intel/vulkan/anv_formats.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c > index c39cec3800..25801e8b06 100644 > --- a/src/intel/vulkan/anv_formats.c > +++ b/src/intel/vulkan/anv_formats.c > @@ -179,8 +179,8 @@ static const struct anv_format anv_formats[] = { > fmt(VK_FORMAT_D24_UNORM_S8_UINT, ISL_FORMAT_R24_UNORM_X8_TYPELESS), > fmt(VK_FORMAT_D32_SFLOAT_S8_UINT, ISL_FORMAT_R32_FLOAT), > > - fmt(VK_FORMAT_BC1_RGB_UNORM_BLOCK, ISL_FORMAT_DXT1_RGB), > - fmt(VK_FORMAT_BC1_RGB_SRGB_BLOCK, ISL_FORMAT_DXT1_RGB_SRGB), > + swiz_fmt(VK_FORMAT_BC1_RGB_UNORM_BLOCK, ISL_FORMAT_BC1_UNORM, RGB1), > + swiz_fmt(VK_FORMAT_BC1_RGB_SRGB_BLOCK, ISL_FORMAT_BC1_UNORM_SRGB, > RGB1), > fmt(VK_FORMAT_BC1_RGBA_UNORM_BLOCK, ISL_FORMAT_BC1_UNORM), > fmt(VK_FORMAT_BC1_RGBA_SRGB_BLOCK, ISL_FORMAT_BC1_UNORM_SRGB), > fmt(VK_FORMAT_BC2_UNORM_BLOCK, ISL_FORMAT_BC2_UNORM), > -- > 2.12.2 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev