From 89c476bb67cbe9f6ebea9e7969ab0f3be6b06c79 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Wed, 11 Oct 2017 14:28:24 +0200 Subject: 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 --- src/gallium/auxiliary/Makefile.am | 1 + src/gallium/auxiliary/Makefile.sources | 2 + src/gallium/auxiliary/meson.build | 5 ++- src/gallium/auxiliary/util/u_modifier.c | 70 +++++++++++++++++++++++++++++++++ src/gallium/auxiliary/util/u_modifier.h | 66 +++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/gallium/auxiliary/util/u_modifier.c create mode 100644 src/gallium/auxiliary/util/u_modifier.h 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 + +#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 */ -- cgit v1.2.3