summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/intel/isl/isl.h2
-rw-r--r--src/intel/isl/isl_format.c24
2 files changed, 26 insertions, 0 deletions
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h
index 19673f899d9..4caf0e8324c 100644
--- a/src/intel/isl/isl.h
+++ b/src/intel/isl/isl.h
@@ -1016,6 +1016,8 @@ isl_format_has_int_channel(enum isl_format fmt)
unsigned isl_format_get_num_channels(enum isl_format fmt);
+uint32_t isl_format_get_depth_format(enum isl_format fmt, bool has_stencil);
+
static inline bool
isl_format_is_compressed(enum isl_format fmt)
{
diff --git a/src/intel/isl/isl_format.c b/src/intel/isl/isl_format.c
index e0b91bb05c0..ef1324c370a 100644
--- a/src/intel/isl/isl_format.c
+++ b/src/intel/isl/isl_format.c
@@ -476,6 +476,30 @@ isl_format_get_num_channels(enum isl_format fmt)
(fmtl->channels.i.bits > 0);
}
+uint32_t
+isl_format_get_depth_format(enum isl_format fmt, bool has_stencil)
+{
+ switch (fmt) {
+ default:
+ unreachable("bad isl depth format");
+ case ISL_FORMAT_R32_FLOAT_X8X24_TYPELESS:
+ assert(has_stencil);
+ return 0; /* D32_FLOAT_S8X24_UINT */
+ case ISL_FORMAT_R32_FLOAT:
+ assert(!has_stencil);
+ return 1; /* D32_FLOAT */
+ case ISL_FORMAT_R24_UNORM_X8_TYPELESS:
+ if (has_stencil) {
+ return 2; /* D24_UNORM_S8_UINT */
+ } else {
+ return 3; /* D24_UNORM_X8_UINT */
+ }
+ case ISL_FORMAT_R16_UNORM:
+ assert(!has_stencil);
+ return 5; /* D16_UNORM */
+ }
+}
+
enum isl_format
isl_format_rgb_to_rgba(enum isl_format rgb)
{