diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/virgl/virgl_context.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/virgl/virgl_protocol.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/virgl/virgl_screen.c | 7 | ||||
-rw-r--r-- | src/util/00-mesa-defaults.conf | 28 | ||||
-rw-r--r-- | src/util/xmlpool/t_options.h | 7 |
5 files changed, 44 insertions, 1 deletions
diff --git a/src/gallium/drivers/virgl/virgl_context.c b/src/gallium/drivers/virgl/virgl_context.c index cd653b70ce9..3ce131a1e06 100644 --- a/src/gallium/drivers/virgl/virgl_context.c +++ b/src/gallium/drivers/virgl/virgl_context.c @@ -1404,6 +1404,8 @@ static void virgl_get_sample_position(struct pipe_context *ctx, static void virgl_send_tweaks(struct virgl_context *vctx, struct virgl_screen *rs) { + if (rs->tweak_gles_emulate_bgra) + virgl_encode_tweak(vctx, virgl_tweak_gles_brga_emulate, 1); } struct pipe_context *virgl_context_create(struct pipe_screen *pscreen, diff --git a/src/gallium/drivers/virgl/virgl_protocol.h b/src/gallium/drivers/virgl/virgl_protocol.h index c3ad598601d..71d1703cada 100644 --- a/src/gallium/drivers/virgl/virgl_protocol.h +++ b/src/gallium/drivers/virgl/virgl_protocol.h @@ -592,6 +592,7 @@ enum virgl_context_cmd { #define VIRGL_SET_TWEAKS_VALUE 2 enum vrend_tweak_type { + virgl_tweak_gles_brga_emulate, virgl_tweak_undefined }; diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index 31de32f9289..54bde6f1237 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -27,6 +27,7 @@ #include "util/u_video.h" #include "util/u_math.h" #include "util/os_time.h" +#include "util/xmlconfig.h" #include "pipe/p_defines.h" #include "pipe/p_screen.h" @@ -36,6 +37,7 @@ #include "virgl_resource.h" #include "virgl_public.h" #include "virgl_context.h" +#include "virgl_protocol.h" int virgl_debug = 0; static const struct debug_named_value debug_options[] = { @@ -852,11 +854,16 @@ 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"; if (!screen) return NULL; virgl_debug = debug_get_option_virgl_debug(); + if (config && config->options) { + screen->tweak_gles_emulate_bgra = + driQueryOptionb(config->options, VIRGL_GLES_EMULATE_BGRA); + } screen->vws = vws; screen->base.get_name = virgl_get_name; screen->base.get_vendor = virgl_get_vendor; diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf index e36190f61c8..ae29d8837d5 100644 --- a/src/util/00-mesa-defaults.conf +++ b/src/util/00-mesa-defaults.conf @@ -490,4 +490,30 @@ TODO: document the other workarounds. <option name="radeonsi_prim_restart_tri_strips_only" value="true"/> </application> </device> - </driconf> + <device driver="virtio_gpu"> + <!-- Some Valve games do a final blit to a BRGA_sRGB surface. On a GLES + host this format is not supported and the blit will go to BGRA_UNORM + resulting in an unintended linearization and the final output being + too dark. --> + <application name="Half Life 2" executable="hl2_linux"> + <option name="gles_emulate_bgra" value="true" /> + </application> + <application name="Portal" executable="hl2_linux"> + <option name="gles_emulate_bgra" value="true" /> + </application> + <application name="Left 4 Dead 2" executable="hl2_linux"> + <option name="gles_emulate_bgra" value="true" /> + </application> + <application name="Dota 2" executable="dota2"> + <option name="gles_emulate_bgra" value="true" /> + </application> + <!-- The Raven Remastered expects a BGRA_sRGB surface and a BGRA_sRGB + surface that is capable to do texture views, since on GLES the BGRA + format provided by EXT_texture_BGRA8888 has no sRGB counterpart and + is not in the list of suppoerted TextureView formats we need to + emulate this --> + <application name="The Raven Remastered" executable="Raven"> + <option name="gles_emulate_bgra" value="true" /> + </application> + </device> +</driconf> diff --git a/src/util/xmlpool/t_options.h b/src/util/xmlpool/t_options.h index 4396ba79f79..e43692c8ef9 100644 --- a/src/util/xmlpool/t_options.h +++ b/src/util/xmlpool/t_options.h @@ -361,5 +361,12 @@ DRI_CONF_OPT_END #define DRI_CONF_V3D_NONMSAA_TEXTURE_SIZE_LIMIT(def) \ DRI_CONF_OPT_BEGIN_B(v3d_nonmsaa_texture_size_limit, def) \ DRI_CONF_DESC(en,"Report the non-MSAA-only texture size limit") \ +/** + * \brief virgl specific configuration options + */ + +#define DRI_CONF_GLES_EMULATE_BGRA(def) \ +DRI_CONF_OPT_BEGIN_B(gles_emulate_bgra, def) \ + DRI_CONF_DESC(en,gettext("On GLES emulate BGRA formats by using a swizzled RGBA format")) \ DRI_CONF_OPT_END |