[virglrenderer-devel] [PATCH 5/6] vrend: Use red/green with swizzle for luminance/alpha formats

Alexandros Frantzis alexandros.frantzis at collabora.com
Wed Apr 11 13:39:14 UTC 2018


Use GL_RG based formats with a swizzle to implement virgl
luminance/alpha formats. Since GL_RG is color renderable this patch
allows more operations to be performed on virgl luminance/alpha formats.

Fixes:
dEQP-GLES2.functional.texture.mipmap.2d.generate.la88_fastest
dEQP-GLES2.functional.texture.mipmap.2d.generate.la88_nicest
dEQP-GLES2.functional.texture.mipmap.cube.generate.la88_fastest
dEQP-GLES2.functional.texture.mipmap.cube.generate.la88_nicest

Signed-off-by: Alexandros Frantzis <alexandros.frantzis at collabora.com>
---
 src/vrend_formats.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/vrend_formats.c b/src/vrend_formats.c
index bcb4bbf..724551a 100644
--- a/src/vrend_formats.c
+++ b/src/vrend_formats.c
@@ -30,6 +30,7 @@
 #define SWIZZLE_INVALID 0xff
 #define NO_SWIZZLE { SWIZZLE_INVALID, SWIZZLE_INVALID, SWIZZLE_INVALID, SWIZZLE_INVALID }
 #define RRR1_SWIZZLE { PIPE_SWIZZLE_RED, PIPE_SWIZZLE_RED, PIPE_SWIZZLE_RED, PIPE_SWIZZLE_ONE }
+#define RRRG_SWIZZLE { PIPE_SWIZZLE_RED, PIPE_SWIZZLE_RED, PIPE_SWIZZLE_RED, PIPE_SWIZZLE_GREEN }
 
 /* fill the format table */
 static struct vrend_format_table base_rgba_formats[] =
@@ -73,10 +74,10 @@ static struct vrend_format_table base_depth_formats[] =
 static struct vrend_format_table base_la_formats[] = {
   { VIRGL_FORMAT_A8_UNORM, GL_ALPHA8, GL_ALPHA, GL_UNSIGNED_BYTE, NO_SWIZZLE },
   { VIRGL_FORMAT_L8_UNORM, GL_R8, GL_RED, GL_UNSIGNED_BYTE, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L8A8_UNORM, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NO_SWIZZLE },
+  { VIRGL_FORMAT_L8A8_UNORM, GL_RG8, GL_RG, GL_UNSIGNED_BYTE, RRRG_SWIZZLE },
   { VIRGL_FORMAT_A16_UNORM, GL_ALPHA16, GL_ALPHA, GL_UNSIGNED_SHORT, NO_SWIZZLE },
   { VIRGL_FORMAT_L16_UNORM, GL_R16, GL_RED, GL_UNSIGNED_SHORT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L16A16_UNORM, GL_LUMINANCE16_ALPHA16, GL_LUMINANCE_ALPHA, GL_UNSIGNED_SHORT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L16A16_UNORM, GL_RG16, GL_RG, GL_UNSIGNED_SHORT, RRRG_SWIZZLE },
 };
 
 static struct vrend_format_table rg_base_formats[] = {
@@ -114,11 +115,11 @@ static struct vrend_format_table float_base_formats[] = {
 static struct vrend_format_table float_la_formats[] = {
   { VIRGL_FORMAT_A16_FLOAT, GL_ALPHA16F_ARB, GL_ALPHA, GL_HALF_FLOAT, NO_SWIZZLE },
   { VIRGL_FORMAT_L16_FLOAT, GL_R16F, GL_RED, GL_HALF_FLOAT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L16A16_FLOAT, GL_LUMINANCE_ALPHA16F_ARB, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L16A16_FLOAT, GL_RG16F, GL_RG, GL_HALF_FLOAT, RRRG_SWIZZLE },
 
   { VIRGL_FORMAT_A32_FLOAT, GL_ALPHA32F_ARB, GL_ALPHA, GL_FLOAT, NO_SWIZZLE },
   { VIRGL_FORMAT_L32_FLOAT, GL_R32F, GL_RED, GL_FLOAT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L32A32_FLOAT, GL_LUMINANCE_ALPHA32F_ARB, GL_LUMINANCE_ALPHA, GL_FLOAT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L32A32_FLOAT, GL_RG32F, GL_RG, GL_FLOAT, RRRG_SWIZZLE },
 };
 
 static struct vrend_format_table integer_rg_formats[] = {
@@ -154,26 +155,26 @@ static struct vrend_format_table float_3comp_formats[] = {
 static struct vrend_format_table integer_la_formats[] = {
   { VIRGL_FORMAT_A8_UINT, GL_ALPHA8UI_EXT, GL_ALPHA_INTEGER, GL_UNSIGNED_BYTE, NO_SWIZZLE },
   { VIRGL_FORMAT_L8_UINT, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L8A8_UINT, GL_LUMINANCE_ALPHA8UI_EXT, GL_LUMINANCE_ALPHA_INTEGER_EXT, GL_UNSIGNED_BYTE, NO_SWIZZLE },
+  { VIRGL_FORMAT_L8A8_UINT, GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE, RRRG_SWIZZLE },
   { VIRGL_FORMAT_A8_SINT, GL_ALPHA8I_EXT, GL_ALPHA_INTEGER, GL_BYTE, NO_SWIZZLE },
   { VIRGL_FORMAT_L8_SINT, GL_R8I, GL_RED_INTEGER, GL_BYTE, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L8A8_SINT, GL_LUMINANCE_ALPHA8I_EXT, GL_LUMINANCE_ALPHA_INTEGER_EXT, GL_BYTE, NO_SWIZZLE },
+  { VIRGL_FORMAT_L8A8_SINT, GL_RG8I, GL_RG_INTEGER, GL_BYTE, RRRG_SWIZZLE },
 
   { VIRGL_FORMAT_A16_UINT, GL_ALPHA16UI_EXT, GL_ALPHA_INTEGER, GL_UNSIGNED_SHORT, NO_SWIZZLE },
   { VIRGL_FORMAT_L16_UINT, GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L16A16_UINT, GL_LUMINANCE_ALPHA16UI_EXT, GL_LUMINANCE_ALPHA_INTEGER_EXT, GL_UNSIGNED_SHORT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L16A16_UINT, GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT, RRRG_SWIZZLE },
 
   { VIRGL_FORMAT_A16_SINT, GL_ALPHA16I_EXT, GL_ALPHA_INTEGER, GL_SHORT, NO_SWIZZLE },
   { VIRGL_FORMAT_L16_SINT, GL_R16I, GL_RED_INTEGER, GL_SHORT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L16A16_SINT, GL_LUMINANCE_ALPHA16I_EXT, GL_LUMINANCE_ALPHA_INTEGER_EXT, GL_SHORT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L16A16_SINT, GL_RG16I, GL_RG_INTEGER, GL_SHORT, RRRG_SWIZZLE },
 
   { VIRGL_FORMAT_A32_UINT, GL_ALPHA32UI_EXT, GL_ALPHA_INTEGER, GL_UNSIGNED_INT, NO_SWIZZLE },
   { VIRGL_FORMAT_L32_UINT, GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L32A32_UINT, GL_LUMINANCE_ALPHA32UI_EXT, GL_LUMINANCE_ALPHA_INTEGER_EXT, GL_UNSIGNED_INT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L32A32_UINT, GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_INT, RRRG_SWIZZLE },
 
   { VIRGL_FORMAT_A32_SINT, GL_ALPHA32I_EXT, GL_ALPHA_INTEGER, GL_INT, NO_SWIZZLE },
   { VIRGL_FORMAT_L32_SINT, GL_R32I, GL_RED_INTEGER, GL_INT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L32A32_SINT, GL_LUMINANCE_ALPHA32I_EXT, GL_LUMINANCE_ALPHA_INTEGER_EXT, GL_INT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L32A32_SINT, GL_RG32I, GL_RG_INTEGER, GL_INT, RRRG_SWIZZLE },
 
 
 };
@@ -195,10 +196,10 @@ static struct vrend_format_table snorm_formats[] = {
 static struct vrend_format_table snorm_la_formats[] = {
   { VIRGL_FORMAT_A8_SNORM, GL_ALPHA8_SNORM, GL_ALPHA, GL_BYTE, NO_SWIZZLE },
   { VIRGL_FORMAT_L8_SNORM, GL_R8_SNORM, GL_RED, GL_BYTE, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L8A8_SNORM, GL_LUMINANCE8_ALPHA8_SNORM, GL_LUMINANCE_ALPHA, GL_BYTE, NO_SWIZZLE },
+  { VIRGL_FORMAT_L8A8_SNORM, GL_RG8_SNORM, GL_RG, GL_BYTE, RRRG_SWIZZLE },
   { VIRGL_FORMAT_A16_SNORM, GL_ALPHA16_SNORM, GL_ALPHA, GL_SHORT, NO_SWIZZLE },
   { VIRGL_FORMAT_L16_SNORM, GL_R16_SNORM, GL_RED, GL_SHORT, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L16A16_SNORM, GL_LUMINANCE16_ALPHA16_SNORM, GL_LUMINANCE_ALPHA, GL_SHORT, NO_SWIZZLE },
+  { VIRGL_FORMAT_L16A16_SNORM, GL_RG16_SNORM, GL_RG, GL_SHORT, RRRG_SWIZZLE },
 };
 
 static struct vrend_format_table dxtn_formats[] = {
@@ -230,7 +231,7 @@ static struct vrend_format_table srgb_formats[] = {
   { VIRGL_FORMAT_R8G8B8X8_SRGB, GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, NO_SWIZZLE },
 
   { VIRGL_FORMAT_L8_SRGB, GL_SR8_EXT, GL_RED, GL_UNSIGNED_BYTE, RRR1_SWIZZLE },
-  { VIRGL_FORMAT_L8A8_SRGB, GL_SLUMINANCE8_ALPHA8_EXT, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NO_SWIZZLE },
+  { VIRGL_FORMAT_L8A8_SRGB, GL_SRG8_EXT, GL_RG, GL_UNSIGNED_BYTE, RRRG_SWIZZLE },
 };
 
 static struct vrend_format_table bit10_formats[] = {
-- 
2.15.1



More information about the virglrenderer-devel mailing list