summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Bumiller <christoph.bumiller@speed.at>2014-05-17 01:20:14 +0200
committerMarek Olšák <marek.olsak@amd.com>2014-06-02 12:49:03 +0200
commit04eb8b85ea2eb5865d4f42e9e98c7400cd8344f5 (patch)
tree5adca9d5799ba13846da54826e2bf57ad76e0b35
parent04de3234ee9358adaa03c053ab24ef61038cc934 (diff)
r600g: check for PIPE_BIND_BLENDABLE in is_format_supported
v2: added !util_format_is_depth_or_stencil(format) Signed-off-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r--src/gallium/drivers/r600/evergreen_state.c9
-rw-r--r--src/gallium/drivers/r600/r600_state.c9
2 files changed, 18 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
index 7b1a44b635c..5824fe0418a 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -227,6 +227,11 @@ static bool r600_is_zs_format_supported(enum pipe_format format)
return r600_translate_dbformat(format) != ~0U;
}
+static inline bool r600_is_blending_supported(enum pipe_format format)
+{
+ return !(util_format_is_pure_integer(format) || util_format_is_depth_or_stencil(format));
+}
+
boolean evergreen_is_format_supported(struct pipe_screen *screen,
enum pipe_format format,
enum pipe_texture_target target,
@@ -295,6 +300,10 @@ boolean evergreen_is_format_supported(struct pipe_screen *screen,
if (usage & PIPE_BIND_TRANSFER_WRITE)
retval |= PIPE_BIND_TRANSFER_WRITE;
+ if ((usage & PIPE_BIND_BLENDABLE) &&
+ r600_is_blending_supported(format))
+ retval |= PIPE_BIND_BLENDABLE;
+
return retval == usage;
}
diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
index a0ba1318e2c..31d7bd04519 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -157,6 +157,11 @@ static bool r600_is_zs_format_supported(enum pipe_format format)
return r600_translate_dbformat(format) != ~0U;
}
+static inline bool r600_is_blending_supported(enum pipe_format format)
+{
+ return !(util_format_is_pure_integer(format) || util_format_is_depth_or_stencil(format));
+}
+
boolean r600_is_format_supported(struct pipe_screen *screen,
enum pipe_format format,
enum pipe_texture_target target,
@@ -235,6 +240,10 @@ boolean r600_is_format_supported(struct pipe_screen *screen,
if (usage & PIPE_BIND_TRANSFER_WRITE)
retval |= PIPE_BIND_TRANSFER_WRITE;
+ if ((usage & PIPE_BIND_BLENDABLE) &&
+ r600_is_blending_supported(format))
+ retval |= PIPE_BIND_BLENDABLE;
+
return retval == usage;
}