summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorGert Wollny <[email protected]>2019-05-27 16:32:40 +0200
committerGert Wollny <[email protected]>2019-06-20 08:50:38 +0200
commit59757dbad68ae51c63bff61277ffdd24a7e85839 (patch)
treef28d768e6cbc765310903f776dec23347ce573f1 /src/gallium
parentb79366344929c6e477c64a63f246c6db0766a71c (diff)
virgl: Add tweak to apply a swizzle when drawing/blitting to a emulated BGRA texture
With Qemu this final swizzle is not needed, but with vtest it is, i.e. it depends on how a program using virglrenderer uses the surface that is rendered to, hence a tweak is added. v2: Update description and fix spelling (Emil) v3: Send tweak as binary value instead of using strings (Gurchetan) Reviewed-by: Gurchetan Singh <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/virgl/virgl_context.c3
-rw-r--r--src/gallium/drivers/virgl/virgl_driinfo.h.in1
-rw-r--r--src/gallium/drivers/virgl/virgl_protocol.h1
-rw-r--r--src/gallium/drivers/virgl/virgl_screen.c3
-rw-r--r--src/gallium/drivers/virgl/virgl_screen.h1
5 files changed, 9 insertions, 0 deletions
diff --git a/src/gallium/drivers/virgl/virgl_context.c b/src/gallium/drivers/virgl/virgl_context.c
index 3ce131a1e06..5f643788664 100644
--- a/src/gallium/drivers/virgl/virgl_context.c
+++ b/src/gallium/drivers/virgl/virgl_context.c
@@ -1406,6 +1406,9 @@ static void virgl_send_tweaks(struct virgl_context *vctx, struct virgl_screen *r
{
if (rs->tweak_gles_emulate_bgra)
virgl_encode_tweak(vctx, virgl_tweak_gles_brga_emulate, 1);
+
+ if (rs->tweak_gles_apply_bgra_dest_swizzle)
+ virgl_encode_tweak(vctx, virgl_tweak_gles_brga_apply_dest_swizzle, 1);
}
struct pipe_context *virgl_context_create(struct pipe_screen *pscreen,
diff --git a/src/gallium/drivers/virgl/virgl_driinfo.h.in b/src/gallium/drivers/virgl/virgl_driinfo.h.in
index 66d547d4712..d6162b3f39a 100644
--- a/src/gallium/drivers/virgl/virgl_driinfo.h.in
+++ b/src/gallium/drivers/virgl/virgl_driinfo.h.in
@@ -8,5 +8,6 @@
// 5. Implement the tweak in virglrenderer
DRI_CONF_SECTION_MISCELLANEOUS
DRI_CONF_GLES_EMULATE_BGRA("false")
+ DRI_CONF_GLES_APPLY_BGRA_DEST_SWIZZLE("false")
DRI_CONF_SECTION_END
diff --git a/src/gallium/drivers/virgl/virgl_protocol.h b/src/gallium/drivers/virgl/virgl_protocol.h
index 71d1703cada..73795a8a7cd 100644
--- a/src/gallium/drivers/virgl/virgl_protocol.h
+++ b/src/gallium/drivers/virgl/virgl_protocol.h
@@ -593,6 +593,7 @@ enum virgl_context_cmd {
enum vrend_tweak_type {
virgl_tweak_gles_brga_emulate,
+ virgl_tweak_gles_brga_apply_dest_swizzle,
virgl_tweak_undefined
};
diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c
index 54bde6f1237..e96a10ffbc7 100644
--- a/src/gallium/drivers/virgl/virgl_screen.c
+++ b/src/gallium/drivers/virgl/virgl_screen.c
@@ -855,6 +855,7 @@ virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *c
struct virgl_screen *screen = CALLOC_STRUCT(virgl_screen);
const char *VIRGL_GLES_EMULATE_BGRA = "gles_emulate_bgra";
+ const char *VIRGL_GLES_APPLY_BGRA_DEST_SWIZZLE = "gles_apply_bgra_dest_swizzle";
if (!screen)
return NULL;
@@ -863,6 +864,8 @@ virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *c
if (config && config->options) {
screen->tweak_gles_emulate_bgra =
driQueryOptionb(config->options, VIRGL_GLES_EMULATE_BGRA);
+ screen->tweak_gles_apply_bgra_dest_swizzle =
+ driQueryOptionb(config->options, VIRGL_GLES_APPLY_BGRA_DEST_SWIZZLE);
}
screen->vws = vws;
screen->base.get_name = virgl_get_name;
diff --git a/src/gallium/drivers/virgl/virgl_screen.h b/src/gallium/drivers/virgl/virgl_screen.h
index 62001421936..89b06a25e35 100644
--- a/src/gallium/drivers/virgl/virgl_screen.h
+++ b/src/gallium/drivers/virgl/virgl_screen.h
@@ -47,6 +47,7 @@ struct virgl_screen {
uint32_t sub_ctx_id;
bool tweak_gles_emulate_bgra;
+ bool tweak_gles_apply_bgra_dest_swizzle;
};