Mesa (master): iris: Enable the dual_color_blend_by_location driconf option.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Apr 22 16:38:07 UTC 2019
Module: Mesa
Branch: master
Commit: 36478b9f772e474a52af33f9545c8a681ae12690
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=36478b9f772e474a52af33f9545c8a681ae12690
Author: Kenneth Graunke <kenneth at whitecape.org>
Date: Thu Apr 18 22:29:27 2019 -0700
iris: Enable the dual_color_blend_by_location driconf option.
This fixes rendering in Unigine Valley 1.0 and Heaven 4.0.
---
src/gallium/drivers/iris/driinfo_iris.h | 4 ++++
src/gallium/drivers/iris/iris_screen.c | 4 ++++
src/gallium/drivers/iris/iris_screen.h | 6 ++++++
src/gallium/drivers/iris/iris_state.c | 10 ++++++++++
4 files changed, 24 insertions(+)
diff --git a/src/gallium/drivers/iris/driinfo_iris.h b/src/gallium/drivers/iris/driinfo_iris.h
index 0d513bc0468..edfdde44028 100644
--- a/src/gallium/drivers/iris/driinfo_iris.h
+++ b/src/gallium/drivers/iris/driinfo_iris.h
@@ -1 +1,5 @@
// iris specific driconf options
+
+DRI_CONF_SECTION_DEBUG
+ DRI_CONF_DUAL_COLOR_BLEND_BY_LOCATION("false")
+DRI_CONF_SECTION_END
diff --git a/src/gallium/drivers/iris/iris_screen.c b/src/gallium/drivers/iris/iris_screen.c
index 3e1cabafb70..38cdbc1507d 100644
--- a/src/gallium/drivers/iris/iris_screen.c
+++ b/src/gallium/drivers/iris/iris_screen.c
@@ -43,6 +43,7 @@
#include "util/u_transfer_helper.h"
#include "util/u_upload_mgr.h"
#include "util/ralloc.h"
+#include "util/xmlconfig.h"
#include "drm-uapi/i915_drm.h"
#include "iris_context.h"
#include "iris_defines.h"
@@ -584,6 +585,9 @@ iris_screen_create(int fd, const struct pipe_screen_config *config)
brw_process_intel_debug_variable();
+ screen->driconf.dual_color_blend_by_location =
+ driQueryOptionb(config->options, "dual_color_blend_by_location");
+
screen->precompile = env_var_as_boolean("shader_precompile", true);
isl_device_init(&screen->isl_dev, &screen->devinfo, false);
diff --git a/src/gallium/drivers/iris/iris_screen.h b/src/gallium/drivers/iris/iris_screen.h
index 8a75374429f..a8f33dc3236 100644
--- a/src/gallium/drivers/iris/iris_screen.h
+++ b/src/gallium/drivers/iris/iris_screen.h
@@ -60,6 +60,12 @@ struct iris_screen {
/** Precompile shaders at link time? (Can be disabled for debugging.) */
bool precompile;
+ /** driconf options and application workarounds */
+ struct {
+ /** Dual color blend by location instead of index (for broken apps) */
+ bool dual_color_blend_by_location;
+ } driconf;
+
unsigned subslice_total;
struct gen_device_info devinfo;
diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c
index 2c85ba3778a..12059fbcd3d 100644
--- a/src/gallium/drivers/iris/iris_state.c
+++ b/src/gallium/drivers/iris/iris_state.c
@@ -88,6 +88,7 @@
#include "pipe/p_state.h"
#include "pipe/p_context.h"
#include "pipe/p_screen.h"
+#include "util/u_dual_blend.h"
#include "util/u_inlines.h"
#include "util/u_format.h"
#include "util/u_framebuffer.h"
@@ -860,6 +861,9 @@ struct iris_blend_state {
/** Bitfield of whether color writes are enabled for RT[i] */
uint8_t color_write_enables;
+
+ /** Does RT[0] use dual color blending? */
+ bool dual_color_blending;
};
static enum pipe_blendfactor
@@ -972,6 +976,7 @@ iris_create_blend_state(struct pipe_context *ctx,
/* bl.AlphaTestEnable and bs.AlphaTestFunction are filled in later. */
}
+ cso->dual_color_blending = util_blend_state_is_dual(state, 0);
return cso;
}
@@ -3348,6 +3353,7 @@ static void
iris_populate_fs_key(const struct iris_context *ice,
struct brw_wm_prog_key *key)
{
+ struct iris_screen *screen = (void *) ice->ctx.screen;
const struct pipe_framebuffer_state *fb = &ice->state.framebuffer;
const struct iris_depth_stencil_alpha_state *zsa = ice->state.cso_zsa;
const struct iris_rasterizer_state *rast = ice->state.cso_rast;
@@ -3369,6 +3375,10 @@ iris_populate_fs_key(const struct iris_context *ice,
key->coherent_fb_fetch = true;
+ key->force_dual_color_blend =
+ screen->driconf.dual_color_blend_by_location &&
+ (blend->blend_enables & 1) && blend->dual_color_blending;
+
/* TODO: support key->force_dual_color_blend for Unigine */
/* TODO: Respect glHint for key->high_quality_derivatives */
}
More information about the mesa-commit
mailing list