summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTopi Pohjolainen <[email protected]>2016-04-22 09:44:13 +0300
committerTopi Pohjolainen <[email protected]>2016-04-23 07:29:15 +0300
commitc4ec0121a8558e291c4d6a23a953f0fc34560249 (patch)
treea7a2d958cb084594127d27ee9e26b3379eca3cd3 /src
parent19948f1bf621d66a02b0be7c6042416bea923ea7 (diff)
i965/blorp: Fix clear code for ignoring colormask for XRGB formats on Gen9+
This is equivalent of 73b01e2711ff45a1f313d5372d6c8fa4fe55d4d2 for blorp. v2 (Ken): No need to call _mesa_format_has_color_component() now that the number of components is gotten from _mesa_base_format_component_count(). Signed-off-by: Topi Pohjolainen <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/i965/brw_blorp_clear.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
index 51f915d2854..0a023e26531 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
@@ -25,6 +25,7 @@
#include "main/blend.h"
#include "main/fbobject.h"
#include "main/renderbuffer.h"
+#include "main/glformats.h"
#include "util/ralloc.h"
@@ -135,6 +136,29 @@ brw_blorp_const_color_program::~brw_blorp_const_color_program()
ralloc_free(mem_ctx);
}
+static bool
+set_write_disables(const struct intel_renderbuffer *irb,
+ const GLubyte *color_mask, bool *color_write_disable)
+{
+ /* Format information in the renderbuffer represents the requirements
+ * given by the client. There are cases where the backing miptree uses,
+ * for example, RGBA to represent RGBX. Since the client is only expecting
+ * RGB we can treat alpha as not used and write whatever we like into it.
+ */
+ const GLenum base_format = irb->Base.Base._BaseFormat;
+ const int components = _mesa_base_format_component_count(base_format);
+ bool disables = false;
+
+ assert(components > 0);
+
+ for (int i = 0; i < components; i++) {
+ color_write_disable[i] = !color_mask[i];
+ disables = disables || !color_mask[i];
+ }
+
+ return disables;
+}
+
brw_blorp_clear_params::brw_blorp_clear_params(struct brw_context *brw,
struct gl_framebuffer *fb,
struct gl_renderbuffer *rb,
@@ -185,13 +209,8 @@ brw_blorp_clear_params::brw_blorp_clear_params(struct brw_context *brw,
/* Constant color writes ignore everyting in blend and color calculator
* state. This is not documented.
*/
- for (int i = 0; i < 4; i++) {
- if (_mesa_format_has_color_component(irb->mt->format, i) &&
- !color_mask[i]) {
- color_write_disable[i] = true;
- wm_prog_key.use_simd16_replicated_data = false;
- }
- }
+ if (set_write_disables(irb, color_mask, color_write_disable))
+ wm_prog_key.use_simd16_replicated_data = false;
if (irb->mt->fast_clear_state != INTEL_FAST_CLEAR_STATE_NO_MCS &&
!partial_clear && wm_prog_key.use_simd16_replicated_data &&