diff --git a/Makefile.common b/Makefile.common index 523675a8e9..787c4371c5 100644 --- a/Makefile.common +++ b/Makefile.common @@ -1487,7 +1487,6 @@ endif ifeq ($(HAVE_SLANG),1) DEFINES += -DHAVE_SLANG OBJ += gfx/drivers_shader/slang_process.o - OBJ += gfx/drivers_shader/slang_preprocess.o OBJ += gfx/drivers_shader/glslang_util.o OBJ += gfx/drivers_shader/glslang_util_cxx.o OBJ += gfx/drivers_shader/slang_reflection.o diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 5bab78a2ea..0c7789003f 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -45,7 +45,7 @@ #include "../../performance_counters.h" #include "../../menu/menu_driver.h" #include "../video_shader_parse.h" -#include "../drivers_shader/slang_preprocess.h" +#include "../drivers_shader/slang_process.h" #include "../../managers/state_manager.h" #include "../common/d3d_common.h" diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 7d8cbc3c10..0eaeb6c729 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -40,7 +40,7 @@ #include "gfx/common/gx2_common.h" #include "gfx/video_shader_parse.h" -#include "gfx/drivers_shader/slang_preprocess.h" +#include "gfx/drivers_shader/slang_process.h" #include "system/memory.h" #include "wiiu_dbg.h" diff --git a/gfx/drivers_shader/slang_preprocess.cpp b/gfx/drivers_shader/slang_preprocess.cpp deleted file mode 100644 index 30b1e4976d..0000000000 --- a/gfx/drivers_shader/slang_preprocess.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2017 - Hans-Kristian Arntzen - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include "slang_preprocess.h" -#include "glslang_util.h" -#include -#include -#include - -#include -#include - -#include "../../verbosity.h" - -using namespace std; - -bool slang_preprocess_parse_parameters(glslang_meta& meta, - struct video_shader *shader) -{ - unsigned i; - unsigned old_num_parameters = shader->num_parameters; - - /* Assumes num_parameters is - * initialized to something sane. */ - for (i = 0; i < meta.parameters.size(); i++) - { - bool mismatch_dup = false; - bool dup = false; - auto itr = find_if(shader->parameters, - shader->parameters + shader->num_parameters, - [&](const video_shader_parameter &parsed_param) - { - return meta.parameters[i].id == parsed_param.id; - }); - - if (itr != shader->parameters + shader->num_parameters) - { - dup = true; - /* Allow duplicate #pragma parameter, but only - * if they are exactly the same. */ - if ( meta.parameters[i].desc != itr->desc || - meta.parameters[i].initial != itr->initial || - meta.parameters[i].minimum != itr->minimum || - meta.parameters[i].maximum != itr->maximum || - meta.parameters[i].step != itr->step) - { - RARCH_ERR("[slang]: Duplicate parameters" - " found for \"%s\", but arguments do not match.\n", - itr->id); - mismatch_dup = true; - } - } - - if (dup && !mismatch_dup) - continue; - - if (mismatch_dup || shader->num_parameters == GFX_MAX_PARAMETERS) - { - shader->num_parameters = old_num_parameters; - return false; - } - - struct video_shader_parameter *p = (struct video_shader_parameter*) - &shader->parameters[shader->num_parameters++]; - - if (!p) - continue; - - strlcpy(p->id, meta.parameters[i].id.c_str(), sizeof(p->id)); - strlcpy(p->desc, meta.parameters[i].desc.c_str(), sizeof(p->desc)); - p->initial = meta.parameters[i].initial; - p->minimum = meta.parameters[i].minimum; - p->maximum = meta.parameters[i].maximum; - p->step = meta.parameters[i].step; - p->current = meta.parameters[i].initial; - } - - return true; -} - -bool slang_preprocess_parse_parameters(const char *shader_path, - struct video_shader *shader) -{ - glslang_meta meta; - bool ret = false; - struct string_list *lines = string_list_new(); - - if (!lines) - goto end; - - if (!glslang_read_shader_file(shader_path, lines, true)) - goto end; - meta = glslang_meta{}; - if (!glslang_parse_meta(lines, &meta)) - goto end; - - ret = slang_preprocess_parse_parameters(meta, shader); - -end: - - if (lines) - string_list_free(lines); - - return ret; -} diff --git a/gfx/drivers_shader/slang_preprocess.h b/gfx/drivers_shader/slang_preprocess.h deleted file mode 100644 index bda938d00a..0000000000 --- a/gfx/drivers_shader/slang_preprocess.h +++ /dev/null @@ -1,43 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2017 - Hans-Kristian Arntzen - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#ifndef SLANG_PREPROCESS_H -#define SLANG_PREPROCESS_H - -#include -#include - -#include "../../retroarch.h" -#include "glslang_util.h" - -RETRO_BEGIN_DECLS - -/* Utility function to implement the same parameter reflection - * which happens in the slang backend. - * This does preprocess over the input file to handle #includes and so on. */ -bool slang_preprocess_parse_parameters(const char *shader_path, - struct video_shader *shader); - -RETRO_END_DECLS - -#ifdef __cplusplus - -#include "glslang_util_cxx.h" - -bool slang_preprocess_parse_parameters(glslang_meta& meta, - struct video_shader *shader); -#endif - -#endif diff --git a/gfx/drivers_shader/slang_process.cpp b/gfx/drivers_shader/slang_process.cpp index d4c40360ad..b629a8d2d1 100644 --- a/gfx/drivers_shader/slang_process.cpp +++ b/gfx/drivers_shader/slang_process.cpp @@ -24,7 +24,6 @@ #include #include "glslang_util.h" -#include "slang_preprocess.h" #include "slang_reflection.h" #include "slang_reflection.hpp" #include "slang_process.h" @@ -359,6 +358,96 @@ static bool slang_process_reflection( return true; } +bool slang_preprocess_parse_parameters(glslang_meta& meta, + struct video_shader *shader) +{ + unsigned i; + unsigned old_num_parameters = shader->num_parameters; + + /* Assumes num_parameters is + * initialized to something sane. */ + for (i = 0; i < meta.parameters.size(); i++) + { + bool mismatch_dup = false; + bool dup = false; + auto itr = find_if(shader->parameters, + shader->parameters + shader->num_parameters, + [&](const video_shader_parameter &parsed_param) + { + return meta.parameters[i].id == parsed_param.id; + }); + + if (itr != shader->parameters + shader->num_parameters) + { + dup = true; + /* Allow duplicate #pragma parameter, but only + * if they are exactly the same. */ + if ( meta.parameters[i].desc != itr->desc || + meta.parameters[i].initial != itr->initial || + meta.parameters[i].minimum != itr->minimum || + meta.parameters[i].maximum != itr->maximum || + meta.parameters[i].step != itr->step) + { + RARCH_ERR("[slang]: Duplicate parameters" + " found for \"%s\", but arguments do not match.\n", + itr->id); + mismatch_dup = true; + } + } + + if (dup && !mismatch_dup) + continue; + + if (mismatch_dup || shader->num_parameters == GFX_MAX_PARAMETERS) + { + shader->num_parameters = old_num_parameters; + return false; + } + + struct video_shader_parameter *p = (struct video_shader_parameter*) + &shader->parameters[shader->num_parameters++]; + + if (!p) + continue; + + strlcpy(p->id, meta.parameters[i].id.c_str(), sizeof(p->id)); + strlcpy(p->desc, meta.parameters[i].desc.c_str(), sizeof(p->desc)); + p->initial = meta.parameters[i].initial; + p->minimum = meta.parameters[i].minimum; + p->maximum = meta.parameters[i].maximum; + p->step = meta.parameters[i].step; + p->current = meta.parameters[i].initial; + } + + return true; +} + +bool slang_preprocess_parse_parameters(const char *shader_path, + struct video_shader *shader) +{ + glslang_meta meta; + bool ret = false; + struct string_list *lines = string_list_new(); + + if (!lines) + goto end; + + if (!glslang_read_shader_file(shader_path, lines, true)) + goto end; + meta = glslang_meta{}; + if (!glslang_parse_meta(lines, &meta)) + goto end; + + ret = slang_preprocess_parse_parameters(meta, shader); + +end: + + if (lines) + string_list_free(lines); + + return ret; +} + bool slang_process( video_shader* shader_info, unsigned pass_number, diff --git a/gfx/drivers_shader/slang_process.h b/gfx/drivers_shader/slang_process.h index 09ce97a8e3..8f00cf9d9e 100644 --- a/gfx/drivers_shader/slang_process.h +++ b/gfx/drivers_shader/slang_process.h @@ -21,6 +21,7 @@ #include #include "../video_shader_parse.h" +#include "../../retroarch.h" #include "slang_reflection.h" #include "glslang_util.h" @@ -84,6 +85,12 @@ typedef struct RETRO_BEGIN_DECLS +/* Utility function to implement the same parameter reflection + * which happens in the slang backend. + * This does preprocess over the input file to handle #includes and so on. */ +bool slang_preprocess_parse_parameters(const char *shader_path, + struct video_shader *shader); + bool slang_process( struct video_shader* shader_info, unsigned pass_number, @@ -94,4 +101,12 @@ bool slang_process( RETRO_END_DECLS +#ifdef __cplusplus + +#include "glslang_util_cxx.h" + +bool slang_preprocess_parse_parameters(glslang_meta& meta, + struct video_shader *shader); +#endif + #endif diff --git a/gfx/video_shader_parse.c b/gfx/video_shader_parse.c index aaf67e6df5..fc47456b3a 100644 --- a/gfx/video_shader_parse.c +++ b/gfx/video_shader_parse.c @@ -40,7 +40,7 @@ #include "video_shader_parse.h" #if defined(HAVE_SLANG) && defined(HAVE_SPIRV_CROSS) -#include "drivers_shader/slang_preprocess.h" +#include "drivers_shader/slang_process.h" #endif static path_change_data_t *file_change_data = NULL; diff --git a/griffin/griffin_cpp.cpp b/griffin/griffin_cpp.cpp index 4570b9e1b1..ecc3b93c30 100644 --- a/griffin/griffin_cpp.cpp +++ b/griffin/griffin_cpp.cpp @@ -116,7 +116,6 @@ VIDEO DRIVER #include "../deps/SPIRV-Cross/spirv_cross_parsed_ir.cpp" #ifdef HAVE_SLANG #include "../gfx/drivers_shader/glslang_util_cxx.cpp" -#include "../gfx/drivers_shader/slang_preprocess.cpp" #include "../gfx/drivers_shader/slang_process.cpp" #include "../gfx/drivers_shader/slang_reflection.cpp" #endif diff --git a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj index 31a369a75f..19ea468533 100644 --- a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj @@ -408,7 +408,6 @@ 05A8C78820DB72F100FF7857 /* gl_raster_font.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gl_raster_font.c; sourceTree = ""; }; 05A8C78920DB72F100FF7857 /* vulkan_raster_font.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vulkan_raster_font.c; sourceTree = ""; }; 05A8C78D20DB72F100FF7857 /* video_filter.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = video_filter.c; sourceTree = ""; }; - 05A8C78F20DB72F100FF7857 /* slang_preprocess.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = slang_preprocess.cpp; sourceTree = ""; }; 05A8C79020DB72F100FF7857 /* glslang_util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = glslang_util.h; sourceTree = ""; }; 05A8C79120DB72F100FF7857 /* shader_glsl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = shader_glsl.c; sourceTree = ""; }; 05A8C79220DB72F100FF7857 /* slang_process.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = slang_process.h; sourceTree = ""; }; @@ -419,7 +418,6 @@ 05A8C79720DB72F100FF7857 /* shader_glsl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = shader_glsl.h; sourceTree = ""; }; 05A8C79820DB72F100FF7857 /* shader_null.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = shader_null.c; sourceTree = ""; }; 05A8C79920DB72F100FF7857 /* glslang_util.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = glslang_util.cpp; sourceTree = ""; }; - 05A8C79A20DB72F100FF7857 /* slang_preprocess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = slang_preprocess.h; sourceTree = ""; }; 05A8C79B20DB72F100FF7857 /* shader_gl_cg.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = shader_gl_cg.c; sourceTree = ""; }; 05A8C79C20DB72F100FF7857 /* shader_vulkan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = shader_vulkan.h; sourceTree = ""; }; 05A8C79D20DB72F100FF7857 /* video_crt_switch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_crt_switch.h; sourceTree = ""; }; @@ -1195,8 +1193,6 @@ 05A8C79820DB72F100FF7857 /* shader_null.c */, 05A8C79520DB72F100FF7857 /* shader_vulkan.cpp */, 05A8C79C20DB72F100FF7857 /* shader_vulkan.h */, - 05A8C78F20DB72F100FF7857 /* slang_preprocess.cpp */, - 05A8C79A20DB72F100FF7857 /* slang_preprocess.h */, 05A8C79420DB72F100FF7857 /* slang_process.cpp */, 05A8C79220DB72F100FF7857 /* slang_process.h */, 05A8C79620DB72F100FF7857 /* slang_reflection.cpp */,