shaders: More cleaning.

This commit is contained in:
BearOso 2023-04-27 16:54:03 -05:00
parent ed695f3776
commit 92b7fb2e9f
2 changed files with 29 additions and 85 deletions

View File

@ -74,7 +74,10 @@ list(APPEND SOURCES src/gtk_display_driver_opengl.cpp
src/gtk_glx_context.cpp src/gtk_glx_context.cpp
../shaders/glsl.cpp ../shaders/glsl.cpp
../shaders/shader_helpers.cpp ../shaders/shader_helpers.cpp
../vulkan/slang_helpers.cpp
../vulkan/slang_helpers.hpp
../vulkan/slang_preset_ini.cpp ../vulkan/slang_preset_ini.cpp
../vulkan/slang_preset_ini.hpp
src/gtk_shader_parameters.cpp) src/gtk_shader_parameters.cpp)
if(USE_SLANG) if(USE_SLANG)
@ -108,9 +111,7 @@ if(USE_SLANG)
list(APPEND INCLUDES ../external/VulkanMemoryAllocator-Hpp/include) list(APPEND INCLUDES ../external/VulkanMemoryAllocator-Hpp/include)
list(APPEND INCLUDES ../external/stb) list(APPEND INCLUDES ../external/stb)
list(APPEND SOURCES ../external/stb/stb_image_implementation.cpp) list(APPEND SOURCES ../external/stb/stb_image_implementation.cpp)
list(APPEND SOURCES ../vulkan/slang_helpers.cpp list(APPEND SOURCES ../vulkan/slang_shader.cpp
../vulkan/slang_helpers.hpp
../vulkan/slang_shader.cpp
../vulkan/slang_shader.hpp ../vulkan/slang_shader.hpp
../vulkan/slang_preset.cpp ../vulkan/slang_preset.cpp
../vulkan/slang_preset.hpp ../vulkan/slang_preset.hpp

View File

@ -11,6 +11,7 @@
#include <map> #include <map>
#include "glsl.h" #include "glsl.h"
#include "shader_helpers.h" #include "shader_helpers.h"
#include "../vulkan/slang_helpers.hpp"
#include "shader_platform.h" #include "shader_platform.h"
@ -21,35 +22,6 @@ static const GLfloat mvp_ortho[16] = { 2.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f,
-1.0f, -1.0f, 0.0f, 1.0f }; -1.0f, -1.0f, 0.0f, 1.0f };
static std::vector<std::string> split_string(const std::string_view &str, unsigned char delim)
{
std::vector<std::string> tokens;
size_t pos = 0;
size_t index;
while (pos < str.length())
{
index = str.find(delim, pos);
if (index == std::string::npos)
{
if (pos < str.length())
{
tokens.push_back(std::string{str.substr(pos)});
}
break;
}
else if (index > pos)
{
tokens.push_back(std::string{str.substr(pos, index - pos)});
}
pos = index + 1;
}
return tokens;
}
static int scale_string_to_enum(std::string string) static int scale_string_to_enum(std::string string)
{ {
const struct { const char *string; int value; } map[] = const struct { const char *string; int value; } map[] =
@ -80,17 +52,17 @@ static const char *scale_enum_to_string(int val)
} }
} }
static int wrap_mode_string_to_enum(const char *string) static int wrap_mode_string_to_enum(std::string string)
{ {
if (!strcasecmp(string, "repeat")) if (string == "repeat")
{ {
return GL_REPEAT; return GL_REPEAT;
} }
else if (!strcasecmp(string, "clamp_to_edge")) else if (string == "clamp_to_edge")
{ {
return GL_CLAMP_TO_EDGE; return GL_CLAMP_TO_EDGE;
} }
else if (!strcasecmp(string, "clamp")) else if (string == "clamp")
{ {
return GL_CLAMP; return GL_CLAMP;
} }
@ -116,17 +88,8 @@ static const char *wrap_mode_enum_to_string(int val)
bool GLSLShader::load_shader_preset_file(const char *filename) bool GLSLShader::load_shader_preset_file(const char *filename)
{ {
char key[256];
int length = strlen(filename);
bool singlepass = false;
if (length > 6 && (!strcasecmp(&filename[length - 5], ".glsl") ||
!strcasecmp(&filename[length - 6], ".slang")))
singlepass = true;
this->using_slang = false; this->using_slang = false;
if (length > 7 && (!strcasecmp(&filename[length - 6], ".slang") || if (ends_with(filename, ".slang") || ends_with(filename, ".slangp"))
!strcasecmp(&filename[length - 7], ".slangp")))
{ {
#ifdef USE_SLANG #ifdef USE_SLANG
this->using_slang = true; this->using_slang = true;
@ -135,7 +98,7 @@ bool GLSLShader::load_shader_preset_file(const char *filename)
#endif #endif
} }
if (singlepass) if (ends_with(filename, ".glsl") || ends_with(filename, ".slang"))
{ {
GLSLPass pass; GLSLPass pass;
this->pass.push_back(GLSLPass()); this->pass.push_back(GLSLPass());
@ -153,10 +116,8 @@ bool GLSLShader::load_shader_preset_file(const char *filename)
return true; return true;
} }
else
{ ini.load_file(filename);
ini.load_file(filename);
}
int shader_count = ini.get_int("shaders", 0); int shader_count = ini.get_int("shaders", 0);
@ -169,20 +130,18 @@ bool GLSLShader::load_shader_preset_file(const char *filename)
{ {
GLSLPass pass; GLSLPass pass;
snprintf(key, 256, "filter_linear%u", i); std::string num = std::to_string(i);
std::string key = "filter_linear" + num;
pass.filter = ini.exists(key) ? (ini.get_bool(key, true) ? GL_LINEAR : GL_NEAREST) : GLSL_UNDEFINED; pass.filter = ini.exists(key) ? (ini.get_bool(key, true) ? GL_LINEAR : GL_NEAREST) : GLSL_UNDEFINED;
sprintf(key, "scale_type%u", i); std::string scaleType = ini.get_string("scale_type" + num, "");
std::string scaleType = ini.get_string(key, "");
if (scaleType == "") if (scaleType == "")
{ {
sprintf(key, "scale_type_x%u", i); std::string scaleTypeX = ini.get_string("scale_type_x" + num, "");
std::string scaleTypeX = ini.get_string(key, "");
pass.scale_type_x = scale_string_to_enum(scaleTypeX); pass.scale_type_x = scale_string_to_enum(scaleTypeX);
sprintf(key, "scale_type_y%u", i); std::string scaleTypeY = ini.get_string("scale_type_y" + num, "");
std::string scaleTypeY = ini.get_string(key, "");
pass.scale_type_y = scale_string_to_enum(scaleTypeY); pass.scale_type_y = scale_string_to_enum(scaleTypeY);
} }
else else
@ -192,41 +151,27 @@ bool GLSLShader::load_shader_preset_file(const char *filename)
pass.scale_type_y = scale_type; pass.scale_type_y = scale_type;
} }
sprintf(key, "scale%u", i); auto scaleFloat = ini.get_float("scale" + num, 1.0f);
auto scaleFloat = ini.get_float(key, 1.0f); pass.scale_x = ini.get_float("scale_x" + num, scaleFloat);
sprintf(key, "scale_x%u", i); pass.scale_y = ini.get_float("scale_y" + num, scaleFloat);
pass.scale_x = ini.get_float(key, scaleFloat);
sprintf(key, "scale_y%u", i);
pass.scale_y = ini.get_float(key, scaleFloat);
sprintf(key, "shader%u", i); strcpy(pass.filename, ini.get_string("shader" + num, "").c_str());
strcpy(pass.filename, ini.get_string(key, "").c_str());
sprintf(key, "wrap_mode%u", i); pass.wrap_mode = wrap_mode_string_to_enum(ini.get_string("wrap_mode" + num, ""));
pass.wrap_mode = wrap_mode_string_to_enum(ini.get_string (key ,"").c_str()); pass.mipmap_input = ini.get_bool("mipmap_input" + num, true);
pass.frame_count_mod = ini.get_int("frame_count_mod" + num, 1);
sprintf(key, "mipmap_input%u", i);
pass.mipmap_input = ini.get_bool(key, true);
sprintf(key, "frame_count_mod%u", i);
pass.frame_count_mod = ini.get_int(key, 0);
pass.fp = false; pass.fp = false;
if (gl_float_texture_available()) if (gl_float_texture_available())
{ {
sprintf(key, "float_framebuffer%u", i); pass.fp = ini.get_bool("float_framebuffer" + num, false);
pass.fp = ini.get_bool(key, false);
} }
pass.srgb = false; pass.srgb = false;
if (gl_srgb_available()) if (gl_srgb_available())
{ pass.srgb = ini.get_bool("srgb_framebuffer" + num, false);
sprintf(key, "srgb_framebuffer%u", i);
pass.srgb = ini.get_bool(key, false);
}
sprintf(key, "alias%u", i); strcpy(pass.alias, ini.get_string("alias" + num, "").c_str());
strcpy(pass.alias, ini.get_string(key, "").c_str());
this->pass.push_back(pass); this->pass.push_back(pass);
} }
@ -241,7 +186,7 @@ bool GLSLShader::load_shader_preset_file(const char *filename)
strcpy(lut.id, id.c_str()); strcpy(lut.id, id.c_str());
strcpy(lut.filename, ini.get_string(id, "").c_str()); strcpy(lut.filename, ini.get_string(id, "").c_str());
lut.wrap_mode = wrap_mode_string_to_enum(ini.get_string(id + "_wrap_mode", "").c_str()); lut.wrap_mode = wrap_mode_string_to_enum(ini.get_string(id + "_wrap_mode", ""));
lut.mipmap = ini.get_bool(id + "_mipmap", false); lut.mipmap = ini.get_bool(id + "_mipmap", false);
lut.filter = (ini.get_bool(id + "_linear", false)) ? GL_LINEAR : GL_NEAREST; lut.filter = (ini.get_bool(id + "_linear", false)) ? GL_LINEAR : GL_NEAREST;
@ -274,8 +219,6 @@ static std::string canonicalize(const std::string &noncanonical)
#ifdef USE_SLANG #ifdef USE_SLANG
static GLuint string_to_format(char *format) static GLuint string_to_format(char *format)
{ {
// const struct { const char *string; int value; } map[] =
// {
const std::map<const char *, int> map = const std::map<const char *, int> map =
{ {
{ "R8_UNORM", GL_R8 }, { "R8_UNORM", GL_R8 },