summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2017-10-11 14:28:24 +0200
committerThierry Reding <treding@nvidia.com>2018-04-04 16:23:13 +0200
commit89c476bb67cbe9f6ebea9e7969ab0f3be6b06c79 (patch)
tree3404544a7ed4b4de0915dcba7213922dcf8ceca6
parent35f7b746238ab2c4eae13c22dc54c666192757d4 (diff)
gallium: Add support for dumping framebuffer modifiers
Adds a simple helper that can be used to dump the name of a framebuffer modifier for debug purposes. Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--src/gallium/auxiliary/Makefile.am1
-rw-r--r--src/gallium/auxiliary/Makefile.sources2
-rw-r--r--src/gallium/auxiliary/meson.build5
-rw-r--r--src/gallium/auxiliary/util/u_modifier.c70
-rw-r--r--src/gallium/auxiliary/util/u_modifier.h66
5 files changed, 143 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/Makefile.am b/src/gallium/auxiliary/Makefile.am
index 95a325f96b3..862aeb64b93 100644
--- a/src/gallium/auxiliary/Makefile.am
+++ b/src/gallium/auxiliary/Makefile.am
@@ -4,6 +4,7 @@ include $(top_srcdir)/src/gallium/Automake.inc
noinst_LTLIBRARIES = libgallium.la
AM_CFLAGS = \
+ -I$(top_srcdir)/include/drm-uapi \
-I$(top_srcdir)/src/loader \
-I$(top_builddir)/src/compiler/nir \
-I$(top_srcdir)/src/gallium/auxiliary/util \
diff --git a/src/gallium/auxiliary/Makefile.sources b/src/gallium/auxiliary/Makefile.sources
index a2dae04698c..ce0a98da405 100644
--- a/src/gallium/auxiliary/Makefile.sources
+++ b/src/gallium/auxiliary/Makefile.sources
@@ -268,6 +268,8 @@ C_SOURCES := \
util/u_memory.h \
util/u_mm.c \
util/u_mm.h \
+ util/u_modifier.c \
+ util/u_modifier.h \
util/u_network.c \
util/u_network.h \
util/u_pack_color.h \
diff --git a/src/gallium/auxiliary/meson.build b/src/gallium/auxiliary/meson.build
index 5908f9c4309..00d8e5148a9 100644
--- a/src/gallium/auxiliary/meson.build
+++ b/src/gallium/auxiliary/meson.build
@@ -288,6 +288,8 @@ files_libgallium = files(
'util/u_memory.h',
'util/u_mm.c',
'util/u_mm.h',
+ 'util/u_modifier.c',
+ 'util/u_modifier.h',
'util/u_network.c',
'util/u_network.h',
'util/u_pack_color.h',
@@ -497,7 +499,8 @@ libgallium = static_library(
'gallium',
[files_libgallium, u_indices_gen_c, u_unfilled_gen_c, u_format_table_c],
include_directories : [
- inc_loader, inc_gallium, inc_src, inc_include, include_directories('util')
+ inc_loader, inc_gallium, inc_src, inc_include, inc_drm_uapi,
+ include_directories('util')
],
c_args : [c_vis_args, c_msvc_compat_args],
cpp_args : [cpp_vis_args, cpp_msvc_compat_args],
diff --git a/src/gallium/auxiliary/util/u_modifier.c b/src/gallium/auxiliary/util/u_modifier.c
new file mode 100644
index 00000000000..2fd7f96d298
--- /dev/null
+++ b/src/gallium/auxiliary/util/u_modifier.c
@@ -0,0 +1,70 @@
+/**************************************************************************
+ *
+ * Copyright 2017 NVIDIA Corporation. All right reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#include <drm_fourcc.h>
+
+#include "util/u_modifier.h"
+
+#define UTIL_MODIFIER_DESCRIPTION(_modifier) \
+ { .modifier = DRM_FORMAT_MOD_ ## _modifier, .name = "DRM_FORMAT_MOD_" # _modifier }
+
+#define I915_MODIFIER_DESCRIPTION(_modifier) \
+ { .modifier = I915_FORMAT_MOD_ ## _modifier, .name = "I915_FORMAT_MOD_" # _modifier }
+
+const struct util_modifier_description util_modifier_description_table[] = {
+ UTIL_MODIFIER_DESCRIPTION(INVALID),
+ UTIL_MODIFIER_DESCRIPTION(LINEAR),
+ I915_MODIFIER_DESCRIPTION(X_TILED),
+ I915_MODIFIER_DESCRIPTION(Y_TILED),
+ I915_MODIFIER_DESCRIPTION(Yf_TILED),
+ I915_MODIFIER_DESCRIPTION(Y_TILED_CCS),
+ I915_MODIFIER_DESCRIPTION(Yf_TILED_CCS),
+ UTIL_MODIFIER_DESCRIPTION(SAMSUNG_64_32_TILE),
+ UTIL_MODIFIER_DESCRIPTION(VIVANTE_TILED),
+ UTIL_MODIFIER_DESCRIPTION(VIVANTE_SUPER_TILED),
+ UTIL_MODIFIER_DESCRIPTION(VIVANTE_SPLIT_TILED),
+ UTIL_MODIFIER_DESCRIPTION(VIVANTE_SPLIT_SUPER_TILED),
+ UTIL_MODIFIER_DESCRIPTION(NVIDIA_TEGRA_TILED),
+ UTIL_MODIFIER_DESCRIPTION(NVIDIA_16BX2_BLOCK_ONE_GOB),
+ UTIL_MODIFIER_DESCRIPTION(NVIDIA_16BX2_BLOCK_TWO_GOB),
+ UTIL_MODIFIER_DESCRIPTION(NVIDIA_16BX2_BLOCK_FOUR_GOB),
+ UTIL_MODIFIER_DESCRIPTION(NVIDIA_16BX2_BLOCK_EIGHT_GOB),
+ UTIL_MODIFIER_DESCRIPTION(NVIDIA_16BX2_BLOCK_SIXTEEN_GOB),
+ UTIL_MODIFIER_DESCRIPTION(NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB),
+ UTIL_MODIFIER_DESCRIPTION(BROADCOM_VC4_T_TILED),
+};
+
+const struct util_modifier_description *
+util_modifier_description(uint64_t modifier)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(util_modifier_description_table); i++)
+ if (util_modifier_description_table[i].modifier == modifier)
+ return &util_modifier_description_table[i];
+
+ return NULL;
+}
diff --git a/src/gallium/auxiliary/util/u_modifier.h b/src/gallium/auxiliary/util/u_modifier.h
new file mode 100644
index 00000000000..9882f61f07d
--- /dev/null
+++ b/src/gallium/auxiliary/util/u_modifier.h
@@ -0,0 +1,66 @@
+/**************************************************************************
+ *
+ * Copyright 2017 NVIDIA Corporation. All right reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#ifndef U_MODIFIERS_H
+#define U_MODIFIERS_H
+
+#include "util/u_debug.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct util_modifier_description
+{
+ uint64_t modifier;
+ const char *name;
+};
+
+extern const struct util_modifier_description
+util_modifier_description_table[];
+
+const struct util_modifier_description *
+util_modifier_description(uint64_t modifier);
+
+static inline const char *
+util_modifier_name(uint64_t modifier)
+{
+ const struct util_modifier_description *desc;
+
+ desc = util_modifier_description(modifier);
+ assert(desc);
+
+ if (!desc)
+ return "DRM_FORMAT_MOD_???";
+
+ return desc->name;
+}
+
+#ifdef __cplusplus
+} // extern "C" {
+#endif
+
+#endif /* !U_MODIFIERS_H */