[Mesa-dev] [PATCH v3 1/2] anv/formats: Update the three-channel BC1 mappings
Nanley Chery
nanleychery at gmail.com
Thu May 18 20:43:53 UTC 2017
+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-stable at lists.freedesktop.org>
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org> (v1)
> Signed-off-by: Nanley Chery <nanley.g.chery at 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
>
More information about the mesa-dev
mailing list