diff options
author | Kenneth Graunke <[email protected]> | 2017-10-11 00:18:38 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-10-12 17:22:42 -0700 |
commit | 32fcced7b479cb7acf43305481cc23a0b04b051c (patch) | |
tree | 3eaa7dbe006d14d9c6541c562c99974673805043 /src/mesa | |
parent | a576c148cd77b3abf44cd673c36bc737dfbedc10 (diff) |
meta: Unset the textures_used_by_txf bitfield.
Drivers that use Meta are happily using blitting data using texelFetch
and GL_SKIP_DECODE_EXT, but the GL_EXT_texture_sRGB spec unfortunately
makes GL_SKIP_DECODE_EXT not necessarily work with texelFetch.
As a hack, just unset the texture_used_by_txf bitfield so we can
continue with the old desired behavior.
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/common/meta.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 73143842485..bae04bea516 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -87,6 +87,7 @@ #include "main/glformats.h" #include "util/bitscan.h" #include "util/ralloc.h" +#include "compiler/nir/nir.h" /** Return offset in bytes of the field within a vertex struct */ #define OFFSET(FIELD) ((void *) offsetof(struct vertex, FIELD)) @@ -195,6 +196,18 @@ _mesa_meta_compile_and_link_program(struct gl_context *ctx, _mesa_meta_link_program_with_debug(ctx, sh_prog); + struct gl_program *fp = + sh_prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program; + + /* texelFetch() can break GL_SKIP_DECODE_EXT, but many meta passes want + * to use both together; pretend that we're not using texelFetch to hack + * around this bad interaction. This is a bit fragile as it may break + * if you re-run the pass that gathers this info, but we probably won't... + */ + fp->info.textures_used_by_txf = 0; + if (fp->nir) + fp->nir->info.textures_used_by_txf = 0; + _mesa_meta_use_program(ctx, sh_prog); *out_sh_prog = sh_prog; |