From: Chad Versace Date: Thu, 12 Nov 2015 18:46:12 +0000 (-0800) Subject: isl: Generate isl_format_layout.c X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bfb022a23552becfaa04509a93bbcf280657c5ee;p=mesa.git isl: Generate isl_format_layout.c Generate an array of struct isl_format_layout, using isl_format_layout.csv as input. Each entry follows the patten: [ISL_FORMAT_R32G32B32A32_FLOAT] = { ISL_FORMAT_R32G32B32A32_FLOAT, .bs = 16, .bpb = 128, .bw = 1, .bh = 1, .bd = 1, .channels = { .r = { ISL_SFLOAT, 32 }, .g = { ISL_SFLOAT, 32 }, .b = { ISL_SFLOAT, 32 }, .a = { ISL_SFLOAT, 32 }, .l = {}, .i = {}, .p = {}, }, .colorspace = ISL_COLORSPACE_LINEAR, .txc = ISL_TXC_NONE, }, --- diff --git a/src/vulkan/.gitignore b/src/vulkan/.gitignore index 6b9074d9f03..316d24a9b02 100644 --- a/src/vulkan/.gitignore +++ b/src/vulkan/.gitignore @@ -4,4 +4,5 @@ /anv_entrypoints.h /wayland-drm-protocol.c /wayland-drm-client-protocol.h -/anv_icd.json \ No newline at end of file +/anv_icd.json +/isl_format_layout.c diff --git a/src/vulkan/Makefile.am b/src/vulkan/Makefile.am index 4a05657df71..9f8c5e34063 100644 --- a/src/vulkan/Makefile.am +++ b/src/vulkan/Makefile.am @@ -83,11 +83,13 @@ VULKAN_SOURCES = \ gen8_pipeline.c \ gen7_state.c \ gen7_cmd_buffer.c \ - gen7_pipeline.c + gen7_pipeline.c \ + isl_format_layout.c BUILT_SOURCES = \ anv_entrypoints.h \ - anv_entrypoints.c + anv_entrypoints.c \ + isl_format_layout.c if HAVE_EGL_PLATFORM_WAYLAND BUILT_SOURCES += \ @@ -117,6 +119,11 @@ anv_entrypoints.h : anv_entrypoints_gen.py $(vulkan_include_HEADERS) anv_entrypoints.c : anv_entrypoints_gen.py $(vulkan_include_HEADERS) $(AM_V_GEN)cat $(vulkan_include_HEADERS) | $(PYTHON2) $< code > $@ +isl_format_layout.c: isl_format_layout_gen.bash \ + isl_format_layout.csv + $(AM_V_GEN)$(srcdir)/isl_format_layout_gen.bash \ + <$(srcdir)/isl_format_layout.csv >$@ + CLEANFILES = $(BUILT_SOURCES) libvulkan_la_LIBADD = $(WAYLAND_LIBS) -lxcb -lxcb-dri3 \ diff --git a/src/vulkan/isl.h b/src/vulkan/isl.h index eed4db41f10..b170c215b35 100644 --- a/src/vulkan/isl.h +++ b/src/vulkan/isl.h @@ -28,6 +28,8 @@ #pragma once +#include + #ifdef __cplusplus extern "C" { #endif @@ -265,6 +267,74 @@ enum isl_format { ISL_FORMAT_UNSUPPORTED = UINT16_MAX, }; +enum isl_base_type { + ISL_VOID, + ISL_RAW, + ISL_UNORM, + ISL_SNORM, + ISL_UFLOAT, + ISL_SFLOAT, + ISL_UFIXED, + ISL_SFIXED, + ISL_UINT, + ISL_SINT, + ISL_USCALED, + ISL_SSCALED, +}; + +enum isl_colorspace { + ISL_COLORSPACE_NONE = 0, + ISL_COLORSPACE_LINEAR, + ISL_COLORSPACE_SRGB, + ISL_COLORSPACE_YUV, +}; + +/** + * Texture compression mode + */ +enum isl_txc { + ISL_TXC_NONE = 0, + ISL_TXC_DXT1, + ISL_TXC_DXT3, + ISL_TXC_DXT5, + ISL_TXC_FXT1, + ISL_TXC_RGTC1, + ISL_TXC_RGTC2, + ISL_TXC_BPTC, + ISL_TXC_ETC1, + ISL_TXC_ETC2, +}; + +struct isl_channel_layout { + enum isl_base_type type; + uint8_t bits; /**< Size in bits */ +}; + +struct isl_format_layout { + enum isl_format format; + + uint16_t bpb; /**< Bits per block */ + uint8_t bs; /**< Block size, in bytes, rounded towards 0 */ + uint8_t bw; /**< Block width, in pixels */ + uint8_t bh; /**< Block height, in pixels */ + uint8_t bd; /**< Block depth, in pixels */ + + struct { + struct isl_channel_layout r; /**< Red channel */ + struct isl_channel_layout g; /**< Green channel */ + struct isl_channel_layout b; /**< Blue channel */ + struct isl_channel_layout a; /**< Alpha channel */ + struct isl_channel_layout l; /**< Luminance channel */ + struct isl_channel_layout i; /**< Intensity channel */ + struct isl_channel_layout p; /**< Palette channel */ + } channels; + + enum isl_colorspace colorspace; + enum isl_txc txc; +}; + +extern const struct isl_format_layout isl_format_layouts[]; + #ifdef __cplusplus } #endif diff --git a/src/vulkan/isl_format_layout_gen.bash b/src/vulkan/isl_format_layout_gen.bash new file mode 100755 index 00000000000..2511f299a7e --- /dev/null +++ b/src/vulkan/isl_format_layout_gen.bash @@ -0,0 +1,128 @@ +#!/usr/bin/env bash +# +# Copyright 2015 Intel Corporation +# +# 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, sublicense, +# 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 NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS 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. + +set -eu +set -o pipefail + +cat <<'EOF' +/* + * Copyright 2015 Intel Corporation + * + * 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, sublicense, + * 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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS 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 "isl.h" + +const struct isl_format_layout +isl_format_layouts[] = { +EOF + +sed -r ' +# Delete comment lines and empty lines +/^[[:space:]]*#/d +/^[[:space:]]*$/d + +# Delete spaces +s/[[:space:]]//g + +# Translate formats +s/^([A-Za-z0-9_]+),*/ISL_FORMAT_\1,/ + +# Translate data type of channels +s/\/ISL_COLORSPACE_\1/ +s/\// + +# Translate texture compression +s/\<(dxt|fxt|rgtc|bptc|etc)([0-9]*)\>/ISL_TXC_\1\2/ +' | +tr 'a-z' 'A-Z' | # Convert to uppersace +while IFS=, read -r format bpb bw bh bd \ + red green blue alpha \ + luminance intensity palette \ + colorspace txc +do + : ${colorspace:=ISL_COLORSPACE_NONE} + : ${txc:=ISL_TXC_NONE} + + cat <