From 497b95fdf641eb5e52de1a6a51d251ee2b3bdb2d Mon Sep 17 00:00:00 2001 From: Nicolai Hähnle Date: Wed, 17 May 2017 17:44:34 +0200 Subject: tgsi,st/mesa: move varying slot to semantic mapping into a helper for VS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We will use this helper in radeonsi's NIR path. Reviewed-by: Samuel Pitoiset Reviewed-by: Marek Olšák --- src/gallium/auxiliary/Makefile.sources | 2 + src/gallium/auxiliary/tgsi/tgsi_from_mesa.c | 150 ++++++++++++++++++++++++++++ src/gallium/auxiliary/tgsi/tgsi_from_mesa.h | 43 ++++++++ 3 files changed, 195 insertions(+) create mode 100644 src/gallium/auxiliary/tgsi/tgsi_from_mesa.c create mode 100644 src/gallium/auxiliary/tgsi/tgsi_from_mesa.h (limited to 'src/gallium') diff --git a/src/gallium/auxiliary/Makefile.sources b/src/gallium/auxiliary/Makefile.sources index 99ab0c00bb5..9ae8e6c8ca5 100644 --- a/src/gallium/auxiliary/Makefile.sources +++ b/src/gallium/auxiliary/Makefile.sources @@ -147,6 +147,8 @@ C_SOURCES := \ tgsi/tgsi_exec.h \ tgsi/tgsi_emulate.c \ tgsi/tgsi_emulate.h \ + tgsi/tgsi_from_mesa.c \ + tgsi/tgsi_from_mesa.h \ tgsi/tgsi_info.c \ tgsi/tgsi_info.h \ tgsi/tgsi_iterate.c \ diff --git a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c new file mode 100644 index 00000000000..44fae1c28e6 --- /dev/null +++ b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c @@ -0,0 +1,150 @@ +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * 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 + * on 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 + * THE AUTHOR(S) AND/OR THEIR 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 "tgsi/tgsi_from_mesa.h" + +#include "pipe/p_compiler.h" + +/** + * Determine the semantic index that is used when the given varying is mapped + * to TGSI_SEMANTIC_GENERIC. + */ +unsigned +tgsi_get_generic_gl_varying_index(gl_varying_slot attr, + bool needs_texcoord_semantic) +{ + if (attr >= VARYING_SLOT_VAR0) { + if (needs_texcoord_semantic) + return attr - VARYING_SLOT_VAR0; + else + return 9 + (attr - VARYING_SLOT_VAR0); + } + if (attr == VARYING_SLOT_PNTC) { + assert(!needs_texcoord_semantic); + return 8; + } + if (attr >= VARYING_SLOT_TEX0 && attr <= VARYING_SLOT_TEX7) { + assert(!needs_texcoord_semantic); + return attr - VARYING_SLOT_TEX0; + } + + assert(0); + return 0; +} + +/** + * Determine the semantic name and index used for the given varying. + */ +void +tgsi_get_gl_varying_semantic(gl_varying_slot attr, + bool needs_texcoord_semantic, + unsigned *semantic_name, + unsigned *semantic_index) +{ + switch (attr) { + case VARYING_SLOT_POS: + *semantic_name = TGSI_SEMANTIC_POSITION; + *semantic_index = 0; + break; + case VARYING_SLOT_COL0: + *semantic_name = TGSI_SEMANTIC_COLOR; + *semantic_index = 0; + break; + case VARYING_SLOT_COL1: + *semantic_name = TGSI_SEMANTIC_COLOR; + *semantic_index = 1; + break; + case VARYING_SLOT_BFC0: + *semantic_name = TGSI_SEMANTIC_BCOLOR; + *semantic_index = 0; + break; + case VARYING_SLOT_BFC1: + *semantic_name = TGSI_SEMANTIC_BCOLOR; + *semantic_index = 1; + break; + case VARYING_SLOT_FOGC: + *semantic_name = TGSI_SEMANTIC_FOG; + *semantic_index = 0; + break; + case VARYING_SLOT_PSIZ: + *semantic_name = TGSI_SEMANTIC_PSIZE; + *semantic_index = 0; + break; + case VARYING_SLOT_CLIP_DIST0: + *semantic_name = TGSI_SEMANTIC_CLIPDIST; + *semantic_index = 0; + break; + case VARYING_SLOT_CLIP_DIST1: + *semantic_name = TGSI_SEMANTIC_CLIPDIST; + *semantic_index = 1; + break; + case VARYING_SLOT_CULL_DIST0: + case VARYING_SLOT_CULL_DIST1: + /* these should have been lowered by GLSL */ + assert(0); + break; + case VARYING_SLOT_EDGE: + *semantic_name = TGSI_SEMANTIC_EDGEFLAG; + *semantic_index = 0; + break; + case VARYING_SLOT_CLIP_VERTEX: + *semantic_name = TGSI_SEMANTIC_CLIPVERTEX; + *semantic_index = 0; + break; + case VARYING_SLOT_LAYER: + *semantic_name = TGSI_SEMANTIC_LAYER; + *semantic_index = 0; + break; + case VARYING_SLOT_VIEWPORT: + *semantic_name = TGSI_SEMANTIC_VIEWPORT_INDEX; + *semantic_index = 0; + break; + case VARYING_SLOT_PNTC: + *semantic_name = TGSI_SEMANTIC_PCOORD; + *semantic_index = 0; + break; + + case VARYING_SLOT_TEX0: + case VARYING_SLOT_TEX1: + case VARYING_SLOT_TEX2: + case VARYING_SLOT_TEX3: + case VARYING_SLOT_TEX4: + case VARYING_SLOT_TEX5: + case VARYING_SLOT_TEX6: + case VARYING_SLOT_TEX7: + if (needs_texcoord_semantic) { + *semantic_name = TGSI_SEMANTIC_TEXCOORD; + *semantic_index = attr - VARYING_SLOT_TEX0; + break; + } + /* fall through */ + case VARYING_SLOT_VAR0: + default: + assert(attr >= VARYING_SLOT_VAR0 || + (attr >= VARYING_SLOT_TEX0 && attr <= VARYING_SLOT_TEX7)); + *semantic_name = TGSI_SEMANTIC_GENERIC; + *semantic_index = + tgsi_get_generic_gl_varying_index(attr, needs_texcoord_semantic); + break; + } +} diff --git a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h new file mode 100644 index 00000000000..4c708f4e59f --- /dev/null +++ b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h @@ -0,0 +1,43 @@ +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * 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 + * on 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 + * THE AUTHOR(S) AND/OR THEIR 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 TGSI_FROM_MESA_H +#define TGSI_FROM_MESA_H + +#include + +#include "pipe/p_shader_tokens.h" + +#include "compiler/shader_enums.h" + +void +tgsi_get_gl_varying_semantic(gl_varying_slot attr, + bool needs_texcoord_semantic, + unsigned *semantic_name, + unsigned *semantic_index); + +unsigned +tgsi_get_generic_gl_varying_index(gl_varying_slot attr, + bool needs_texcoord_semantic); + +#endif /* TGSI_FROM_MESA_H */ -- cgit v1.2.3