diff --git a/gfx/drivers/gl_core.c b/gfx/drivers/gl_core.c index 1fda3569ca..da3d383c7b 100644 --- a/gfx/drivers/gl_core.c +++ b/gfx/drivers/gl_core.c @@ -957,8 +957,9 @@ static bool gl_core_init_default_filter_chain(gl_core_t *gl) return false; gl->filter_chain = gl_core_filter_chain_create_default( - gl->video_info.smooth ? - GL_CORE_FILTER_CHAIN_LINEAR : GL_CORE_FILTER_CHAIN_NEAREST); + gl->video_info.smooth + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST); if (!gl->filter_chain) { @@ -973,8 +974,9 @@ static bool gl_core_init_filter_chain_preset(gl_core_t *gl, const char *shader_p { gl->filter_chain = gl_core_filter_chain_create_from_preset( shader_path, - gl->video_info.smooth ? - GL_CORE_FILTER_CHAIN_LINEAR : GL_CORE_FILTER_CHAIN_NEAREST); + gl->video_info.smooth + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST); if (!gl->filter_chain) { diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index 32fa5239a8..da00ccef67 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -781,8 +781,9 @@ static bool vulkan_init_default_filter_chain(vk_t *vk) vk->filter_chain = vulkan_filter_chain_create_default( &info, - vk->video.smooth ? - VULKAN_FILTER_CHAIN_LINEAR : VULKAN_FILTER_CHAIN_NEAREST); + vk->video.smooth + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST); if (!vk->filter_chain) { @@ -814,8 +815,9 @@ static bool vulkan_init_filter_chain_preset(vk_t *vk, const char *shader_path) vk->filter_chain = vulkan_filter_chain_create_from_preset( &info, shader_path, - vk->video.smooth ? - VULKAN_FILTER_CHAIN_LINEAR : VULKAN_FILTER_CHAIN_NEAREST); + vk->video.smooth + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST); if (!vk->filter_chain) { diff --git a/gfx/drivers_shader/glslang_util.h b/gfx/drivers_shader/glslang_util.h index 90b94613f9..4c18cb3de8 100644 --- a/gfx/drivers_shader/glslang_util.h +++ b/gfx/drivers_shader/glslang_util.h @@ -18,10 +18,12 @@ #include #include +#include #include #include "slang_reflection.h" +#include "../video_shader_parse.h" typedef enum glslang_format { @@ -66,10 +68,54 @@ typedef enum glslang_format SLANG_FORMAT_R32G32B32A32_SFLOAT, SLANG_FORMAT_MAX -}glslang_format; +} glslang_format; + +typedef enum glslang_filter_chain_filter +{ + GLSLANG_FILTER_CHAIN_LINEAR = 0, + GLSLANG_FILTER_CHAIN_NEAREST = 1, + GLSLANG_FILTER_CHAIN_COUNT +} glslang_filter_chain_filter; + +typedef enum glslang_filter_chain_address +{ + GLSLANG_FILTER_CHAIN_ADDRESS_REPEAT = 0, + GLSLANG_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT = 1, + GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE = 2, + GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER = 3, + GLSLANG_FILTER_CHAIN_ADDRESS_MIRROR_CLAMP_TO_EDGE = 4, + GLSLANG_FILTER_CHAIN_ADDRESS_COUNT +} glslang_filter_chain_address; + +typedef enum glslang_filter_chain_scale +{ + GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL, + GLSLANG_FILTER_CHAIN_SCALE_SOURCE, + GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT, + GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE +} glslang_filter_chain_scale; RETRO_BEGIN_DECLS +static INLINE enum glslang_filter_chain_address rarch_wrap_to_address( + enum gfx_wrap_type type) +{ + switch (type) + { + case RARCH_WRAP_BORDER: + return GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER; + case RARCH_WRAP_REPEAT: + return GLSLANG_FILTER_CHAIN_ADDRESS_REPEAT; + case RARCH_WRAP_MIRRORED_REPEAT: + return GLSLANG_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT; + case RARCH_WRAP_EDGE: + default: + break; + } + + return GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; +} + const char *glslang_format_to_string(glslang_format fmt); enum glslang_format glslang_find_format(const char *fmt); diff --git a/gfx/drivers_shader/shader_gl_core.cpp b/gfx/drivers_shader/shader_gl_core.cpp index f8c3426f63..32b311c885 100644 --- a/gfx/drivers_shader/shader_gl_core.cpp +++ b/gfx/drivers_shader/shader_gl_core.cpp @@ -267,48 +267,30 @@ static const uint32_t opaque_frag[] = struct Texture { gl_core_filter_chain_texture texture; - gl_core_filter_chain_filter filter; - gl_core_filter_chain_filter mip_filter; - gl_core_filter_chain_address address; + glslang_filter_chain_filter filter; + glslang_filter_chain_filter mip_filter; + glslang_filter_chain_address address; }; -static gl_core_filter_chain_address wrap_to_address(gfx_wrap_type type) -{ - switch (type) - { - case RARCH_WRAP_BORDER: - return GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER; - case RARCH_WRAP_REPEAT: - return GL_CORE_FILTER_CHAIN_ADDRESS_REPEAT; - case RARCH_WRAP_MIRRORED_REPEAT: - return GL_CORE_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT; - case RARCH_WRAP_EDGE: - default: - break; - } - - return GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; -} - -static GLenum address_to_gl(gl_core_filter_chain_address type) +static GLenum address_to_gl(glslang_filter_chain_address type) { switch (type) { #ifdef HAVE_OPENGLES3 - case GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER: + case GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER: #if 0 RARCH_WARN("[GLCore]: No CLAMP_TO_BORDER in GLES3. Falling back to edge clamp.\n"); #endif return GL_CLAMP_TO_EDGE; #else - case GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER: + case GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER: return GL_CLAMP_TO_BORDER; #endif - case GL_CORE_FILTER_CHAIN_ADDRESS_REPEAT: + case GLSLANG_FILTER_CHAIN_ADDRESS_REPEAT: return GL_REPEAT; - case GL_CORE_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT: + case GLSLANG_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT: return GL_MIRRORED_REPEAT; - case GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE: + case GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE: default: break; } @@ -316,13 +298,13 @@ static GLenum address_to_gl(gl_core_filter_chain_address type) return GL_CLAMP_TO_EDGE; } -static GLenum convert_filter_to_mag_gl(gl_core_filter_chain_filter filter) +static GLenum convert_filter_to_mag_gl(glslang_filter_chain_filter filter) { switch (filter) { - case GL_CORE_FILTER_CHAIN_LINEAR: + case GLSLANG_FILTER_CHAIN_LINEAR: return GL_LINEAR; - case GL_CORE_FILTER_CHAIN_NEAREST: + case GLSLANG_FILTER_CHAIN_NEAREST: default: break; } @@ -330,13 +312,15 @@ static GLenum convert_filter_to_mag_gl(gl_core_filter_chain_filter filter) return GL_NEAREST; } -static GLenum convert_filter_to_min_gl(gl_core_filter_chain_filter filter, gl_core_filter_chain_filter mipfilter) +static GLenum convert_filter_to_min_gl(glslang_filter_chain_filter filter, glslang_filter_chain_filter mipfilter) { - if (filter == GL_CORE_FILTER_CHAIN_LINEAR && mipfilter == GL_CORE_FILTER_CHAIN_LINEAR) + if ( (filter == GLSLANG_FILTER_CHAIN_LINEAR) + && (mipfilter == GLSLANG_FILTER_CHAIN_LINEAR) + ) return GL_LINEAR_MIPMAP_LINEAR; - else if (filter == GL_CORE_FILTER_CHAIN_LINEAR) + else if (filter == GLSLANG_FILTER_CHAIN_LINEAR) return GL_LINEAR_MIPMAP_NEAREST; - else if (mipfilter == GL_CORE_FILTER_CHAIN_LINEAR) + else if (mipfilter == GLSLANG_FILTER_CHAIN_LINEAR) return GL_NEAREST_MIPMAP_LINEAR; return GL_NEAREST_MIPMAP_NEAREST; } @@ -394,7 +378,7 @@ public: unsigned width, unsigned height, bool linear, bool mipmap, - gl_core_filter_chain_address address); + glslang_filter_chain_address address); ~StaticTexture(); StaticTexture(StaticTexture&&) = delete; @@ -412,13 +396,13 @@ private: StaticTexture::StaticTexture(string id_, GLuint image_, unsigned width, unsigned height, bool linear, bool mipmap, - gl_core_filter_chain_address address) + glslang_filter_chain_address address) : id(std::move(id_)), image(image_) { GLenum gl_address = address_to_gl(address); - texture.filter = GL_CORE_FILTER_CHAIN_NEAREST; - texture.mip_filter = GL_CORE_FILTER_CHAIN_NEAREST; + texture.filter = GLSLANG_FILTER_CHAIN_NEAREST; + texture.mip_filter = GLSLANG_FILTER_CHAIN_NEAREST; texture.address = address; texture.texture.width = width; texture.texture.height = height; @@ -426,9 +410,9 @@ StaticTexture::StaticTexture(string id_, GLuint image_, texture.texture.image = image; if (linear) - texture.filter = GL_CORE_FILTER_CHAIN_LINEAR; + texture.filter = GLSLANG_FILTER_CHAIN_LINEAR; if (mipmap && linear) - texture.mip_filter = GL_CORE_FILTER_CHAIN_LINEAR; + texture.mip_filter = GLSLANG_FILTER_CHAIN_LINEAR; glBindTexture(GL_TEXTURE_2D, image); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gl_address); @@ -713,17 +697,17 @@ public: return pass_name; } - gl_core_filter_chain_filter get_source_filter() const + glslang_filter_chain_filter get_source_filter() const { return pass_info.source_filter; } - gl_core_filter_chain_filter get_mip_filter() const + glslang_filter_chain_filter get_mip_filter() const { return pass_info.mip_filter; } - gl_core_filter_chain_address get_address_mode() const + glslang_filter_chain_address get_address_mode() const { return pass_info.address; } @@ -1021,19 +1005,19 @@ Size2D Pass::get_output_size(const Size2D &original, const Size2D &source) const float width, height; switch (pass_info.scale_type_x) { - case GL_CORE_FILTER_CHAIN_SCALE_ORIGINAL: + case GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL: width = float(original.width) * pass_info.scale_x; break; - case GL_CORE_FILTER_CHAIN_SCALE_SOURCE: + case GLSLANG_FILTER_CHAIN_SCALE_SOURCE: width = float(source.width) * pass_info.scale_x; break; - case GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT: + case GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT: width = current_viewport.width * pass_info.scale_x; break; - case GL_CORE_FILTER_CHAIN_SCALE_ABSOLUTE: + case GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE: width = pass_info.scale_x; break; @@ -1043,19 +1027,19 @@ Size2D Pass::get_output_size(const Size2D &original, const Size2D &source) const switch (pass_info.scale_type_y) { - case GL_CORE_FILTER_CHAIN_SCALE_ORIGINAL: + case GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL: height = float(original.height) * pass_info.scale_y; break; - case GL_CORE_FILTER_CHAIN_SCALE_SOURCE: + case GLSLANG_FILTER_CHAIN_SCALE_SOURCE: height = float(source.height) * pass_info.scale_y; break; - case GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT: + case GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT: height = current_viewport.height * pass_info.scale_y; break; - case GL_CORE_FILTER_CHAIN_SCALE_ABSOLUTE: + case GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE: height = pass_info.scale_y; break; @@ -2099,7 +2083,7 @@ static unique_ptr gl_core_filter_chain_load_lut( tex, image.width, image.height, shader->filter != RARCH_FILTER_NEAREST, levels > 1, - gl_core_shader::wrap_to_address(shader->wrap))); + rarch_wrap_to_address(shader->wrap))); } static bool gl_core_filter_chain_load_luts( @@ -2123,7 +2107,7 @@ static bool gl_core_filter_chain_load_luts( } gl_core_filter_chain_t *gl_core_filter_chain_create_default( - gl_core_filter_chain_filter filter) + glslang_filter_chain_filter filter) { struct gl_core_filter_chain_pass_info pass_info; @@ -2131,14 +2115,14 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_default( if (!chain) return nullptr; - pass_info.scale_type_x = GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT; - pass_info.scale_type_y = GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; pass_info.scale_x = 1.0f; pass_info.scale_y = 1.0f; pass_info.rt_format = 0; pass_info.source_filter = filter; - pass_info.mip_filter = GL_CORE_FILTER_CHAIN_NEAREST; - pass_info.address = GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; + pass_info.mip_filter = GLSLANG_FILTER_CHAIN_NEAREST; + pass_info.address = GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; pass_info.max_levels = 0; chain->set_pass_info(0, pass_info); @@ -2157,7 +2141,7 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_default( } gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( - const char *path, gl_core_filter_chain_filter filter) + const char *path, glslang_filter_chain_filter filter) { unsigned i; config_file_t *conf = NULL; @@ -2193,14 +2177,14 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( const video_shader_pass *next_pass = i + 1 < shader->passes ? &shader->pass[i + 1] : nullptr; - pass_info.scale_type_x = GL_CORE_FILTER_CHAIN_SCALE_ORIGINAL; - pass_info.scale_type_y = GL_CORE_FILTER_CHAIN_SCALE_ORIGINAL; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL; pass_info.scale_x = 0.0f; pass_info.scale_y = 0.0f; pass_info.rt_format = 0; - pass_info.source_filter = GL_CORE_FILTER_CHAIN_LINEAR; - pass_info.mip_filter = GL_CORE_FILTER_CHAIN_LINEAR; - pass_info.address = GL_CORE_FILTER_CHAIN_ADDRESS_REPEAT; + pass_info.source_filter = GLSLANG_FILTER_CHAIN_LINEAR; + pass_info.mip_filter = GLSLANG_FILTER_CHAIN_LINEAR; + pass_info.address = GLSLANG_FILTER_CHAIN_ADDRESS_REPEAT; pass_info.max_levels = 0; if (!glslang_compile_shader(pass->source.path, &output)) @@ -2279,10 +2263,11 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( else { pass_info.source_filter = - pass->filter == RARCH_FILTER_LINEAR ? GL_CORE_FILTER_CHAIN_LINEAR : - GL_CORE_FILTER_CHAIN_NEAREST; + pass->filter == RARCH_FILTER_LINEAR + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST; } - pass_info.address = gl_core_shader::wrap_to_address(pass->wrap); + pass_info.address = rarch_wrap_to_address(pass->wrap); pass_info.max_levels = 1; /* TODO: Expose max_levels in slangp. @@ -2293,7 +2278,8 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( pass_info.max_levels = ~0u; pass_info.mip_filter = pass->filter != RARCH_FILTER_NEAREST && pass_info.max_levels > 1 - ? GL_CORE_FILTER_CHAIN_LINEAR : GL_CORE_FILTER_CHAIN_NEAREST; + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST; bool explicit_format = output.meta.rt_format != SLANG_FORMAT_UNKNOWN; @@ -2304,11 +2290,11 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( if (!pass->fbo.valid) { pass_info.scale_type_x = i + 1 == shader->passes - ? GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT - : GL_CORE_FILTER_CHAIN_SCALE_SOURCE; + ? GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT + : GLSLANG_FILTER_CHAIN_SCALE_SOURCE; pass_info.scale_type_y = i + 1 == shader->passes - ? GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT - : GL_CORE_FILTER_CHAIN_SCALE_SOURCE; + ? GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT + : GLSLANG_FILTER_CHAIN_SCALE_SOURCE; pass_info.scale_x = 1.0f; pass_info.scale_y = 1.0f; @@ -2344,17 +2330,17 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( { case RARCH_SCALE_INPUT: pass_info.scale_x = pass->fbo.scale_x; - pass_info.scale_type_x = GL_CORE_FILTER_CHAIN_SCALE_SOURCE; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_SOURCE; break; case RARCH_SCALE_ABSOLUTE: pass_info.scale_x = float(pass->fbo.abs_x); - pass_info.scale_type_x = GL_CORE_FILTER_CHAIN_SCALE_ABSOLUTE; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE; break; case RARCH_SCALE_VIEWPORT: pass_info.scale_x = pass->fbo.scale_x; - pass_info.scale_type_x = GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; break; } @@ -2362,17 +2348,17 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( { case RARCH_SCALE_INPUT: pass_info.scale_y = pass->fbo.scale_y; - pass_info.scale_type_y = GL_CORE_FILTER_CHAIN_SCALE_SOURCE; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_SOURCE; break; case RARCH_SCALE_ABSOLUTE: pass_info.scale_y = float(pass->fbo.abs_y); - pass_info.scale_type_y = GL_CORE_FILTER_CHAIN_SCALE_ABSOLUTE; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE; break; case RARCH_SCALE_VIEWPORT: pass_info.scale_y = pass->fbo.scale_y; - pass_info.scale_type_y = GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; break; } } @@ -2384,16 +2370,16 @@ gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( { struct gl_core_filter_chain_pass_info pass_info; - pass_info.scale_type_x = GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT; - pass_info.scale_type_y = GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; pass_info.scale_x = 1.0f; pass_info.scale_y = 1.0f; pass_info.rt_format = 0; pass_info.source_filter = filter; - pass_info.mip_filter = GL_CORE_FILTER_CHAIN_NEAREST; - pass_info.address = GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; + pass_info.mip_filter = GLSLANG_FILTER_CHAIN_NEAREST; + pass_info.address = GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; pass_info.max_levels = 0; diff --git a/gfx/drivers_shader/shader_gl_core.h b/gfx/drivers_shader/shader_gl_core.h index c26c697d2a..e330c656b1 100644 --- a/gfx/drivers_shader/shader_gl_core.h +++ b/gfx/drivers_shader/shader_gl_core.h @@ -23,27 +23,12 @@ #include #include +#include "glslang_util.h" + RETRO_BEGIN_DECLS typedef struct gl_core_filter_chain gl_core_filter_chain_t; -enum gl_core_filter_chain_filter -{ - GL_CORE_FILTER_CHAIN_LINEAR = 0, - GL_CORE_FILTER_CHAIN_NEAREST = 1, - GL_CORE_FILTER_CHAIN_COUNT -}; - -enum gl_core_filter_chain_address -{ - GL_CORE_FILTER_CHAIN_ADDRESS_REPEAT = 0, - GL_CORE_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT = 1, - GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE = 2, - GL_CORE_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER = 3, - GL_CORE_FILTER_CHAIN_ADDRESS_MIRROR_CLAMP_TO_EDGE = 4, - GL_CORE_FILTER_CHAIN_ADDRESS_COUNT -}; - struct gl_core_filter_chain_texture { GLuint image; @@ -62,85 +47,28 @@ struct gl_core_viewport GLsizei height; }; -enum gl_core_filter_chain_scale -{ - GL_CORE_FILTER_CHAIN_SCALE_ORIGINAL, - GL_CORE_FILTER_CHAIN_SCALE_SOURCE, - GL_CORE_FILTER_CHAIN_SCALE_VIEWPORT, - GL_CORE_FILTER_CHAIN_SCALE_ABSOLUTE -}; - struct gl_core_filter_chain_pass_info { /* For the last pass, make sure VIEWPORT scale * with scale factors of 1 are used. */ - enum gl_core_filter_chain_scale scale_type_x; - enum gl_core_filter_chain_scale scale_type_y; + enum glslang_filter_chain_scale scale_type_x; + enum glslang_filter_chain_scale scale_type_y; float scale_x; float scale_y; - /* Ignored for the last pass, swapchain info will be used instead. */ + /* Ignored for the last pass, swapchain info + * will be used instead. */ GLenum rt_format; /* The filter to use for source in this pass. */ - enum gl_core_filter_chain_filter source_filter; - enum gl_core_filter_chain_filter mip_filter; - enum gl_core_filter_chain_address address; + enum glslang_filter_chain_filter source_filter; + enum glslang_filter_chain_filter mip_filter; + enum glslang_filter_chain_address address; /* Maximum number of mip-levels to use. */ unsigned max_levels; }; -gl_core_filter_chain_t *gl_core_filter_chain_new(void); -void gl_core_filter_chain_free(gl_core_filter_chain_t *chain); - -void gl_core_filter_chain_set_shader(gl_core_filter_chain_t *chain, - unsigned pass, - GLenum shader_type, - const uint32_t *spirv, - size_t spirv_words); - -void gl_core_filter_chain_set_pass_info(gl_core_filter_chain_t *chain, - unsigned pass, - const struct gl_core_filter_chain_pass_info *info); - -bool gl_core_filter_chain_init(gl_core_filter_chain_t *chain); - -void gl_core_filter_chain_set_input_texture( - gl_core_filter_chain_t *chain, - const struct gl_core_filter_chain_texture *texture); - -void gl_core_filter_chain_set_frame_count(gl_core_filter_chain_t *chain, - uint64_t count); - -void gl_core_filter_chain_set_frame_count_period(gl_core_filter_chain_t *chain, - unsigned pass, - unsigned period); - -void gl_core_filter_chain_set_frame_direction(gl_core_filter_chain_t *chain, - int32_t direction); - -void gl_core_filter_chain_set_pass_name(gl_core_filter_chain_t *chain, - unsigned pass, - const char *name); - -void gl_core_filter_chain_build_offscreen_passes(gl_core_filter_chain_t *chain, - const struct gl_core_viewport *vp); -void gl_core_filter_chain_build_viewport_pass(gl_core_filter_chain_t *chain, - const struct gl_core_viewport *vp, - const float *mvp); - -gl_core_filter_chain_t *gl_core_filter_chain_create_default( - enum gl_core_filter_chain_filter filter); - -gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( - const char *path, enum gl_core_filter_chain_filter filter); - -struct video_shader *gl_core_filter_chain_get_preset( - gl_core_filter_chain_t *chain); - -void gl_core_filter_chain_end_frame(gl_core_filter_chain_t *chain); - struct gl_core_buffer_locations { GLint flat_ubo_vertex; @@ -151,9 +79,75 @@ struct gl_core_buffer_locations GLuint buffer_index_ubo_fragment; }; -GLuint gl_core_cross_compile_program(const uint32_t *vertex, size_t vertex_size, - const uint32_t *fragment, size_t fragment_size, - struct gl_core_buffer_locations *loc, bool flatten); +gl_core_filter_chain_t *gl_core_filter_chain_new(void); + +void gl_core_filter_chain_free( + gl_core_filter_chain_t *chain); + +void gl_core_filter_chain_set_shader( + gl_core_filter_chain_t *chain, + unsigned pass, + GLenum shader_type, + const uint32_t *spirv, + size_t spirv_words); + +void gl_core_filter_chain_set_pass_info( + gl_core_filter_chain_t *chain, + unsigned pass, + const struct gl_core_filter_chain_pass_info *info); + +bool gl_core_filter_chain_init(gl_core_filter_chain_t *chain); + +void gl_core_filter_chain_set_input_texture( + gl_core_filter_chain_t *chain, + const struct gl_core_filter_chain_texture *texture); + +void gl_core_filter_chain_set_frame_count( + gl_core_filter_chain_t *chain, + uint64_t count); + +void gl_core_filter_chain_set_frame_count_period( + gl_core_filter_chain_t *chain, + unsigned pass, + unsigned period); + +void gl_core_filter_chain_set_frame_direction( + gl_core_filter_chain_t *chain, + int32_t direction); + +void gl_core_filter_chain_set_pass_name( + gl_core_filter_chain_t *chain, + unsigned pass, + const char *name); + +void gl_core_filter_chain_build_offscreen_passes( + gl_core_filter_chain_t *chain, + const struct gl_core_viewport *vp); + +void gl_core_filter_chain_build_viewport_pass( + gl_core_filter_chain_t *chain, + const struct gl_core_viewport *vp, + const float *mvp); + +gl_core_filter_chain_t *gl_core_filter_chain_create_default( + enum glslang_filter_chain_filter filter); + +gl_core_filter_chain_t *gl_core_filter_chain_create_from_preset( + const char *path, + enum glslang_filter_chain_filter filter); + +struct video_shader *gl_core_filter_chain_get_preset( + gl_core_filter_chain_t *chain); + +void gl_core_filter_chain_end_frame(gl_core_filter_chain_t *chain); + +GLuint gl_core_cross_compile_program( + const uint32_t *vertex, + size_t vertex_size, + const uint32_t *fragment, + size_t fragment_size, + struct gl_core_buffer_locations *loc, + bool flatten); RETRO_END_DECLS diff --git a/gfx/drivers_shader/shader_vulkan.cpp b/gfx/drivers_shader/shader_vulkan.cpp index 60fb2a7538..a13a94555a 100644 --- a/gfx/drivers_shader/shader_vulkan.cpp +++ b/gfx/drivers_shader/shader_vulkan.cpp @@ -48,9 +48,9 @@ static const uint32_t opaque_frag[] = struct Texture { vulkan_filter_chain_texture texture; - vulkan_filter_chain_filter filter; - vulkan_filter_chain_filter mip_filter; - vulkan_filter_chain_address address; + glslang_filter_chain_filter filter; + glslang_filter_chain_filter mip_filter; + glslang_filter_chain_address address; }; class DeferredDisposer @@ -104,7 +104,7 @@ class StaticTexture unsigned width, unsigned height, bool linear, bool mipmap, - vulkan_filter_chain_address address); + glslang_filter_chain_address address); ~StaticTexture(); StaticTexture(StaticTexture&&) = delete; @@ -184,7 +184,7 @@ struct CommonResources size_t ubo_offset = 0; size_t ubo_alignment = 1; - VkSampler samplers[VULKAN_FILTER_CHAIN_COUNT][VULKAN_FILTER_CHAIN_COUNT][VULKAN_FILTER_CHAIN_ADDRESS_COUNT]; + VkSampler samplers[GLSLANG_FILTER_CHAIN_COUNT][GLSLANG_FILTER_CHAIN_COUNT][GLSLANG_FILTER_CHAIN_ADDRESS_COUNT]; vector original_history; vector fb_feedback; @@ -246,15 +246,15 @@ class Pass void set_frame_direction(int32_t dir) { frame_direction = dir; } void set_name(const char *name) { pass_name = name; } const string &get_name() const { return pass_name; } - vulkan_filter_chain_filter get_source_filter() const { + glslang_filter_chain_filter get_source_filter() const { return pass_info.source_filter; } - vulkan_filter_chain_filter get_mip_filter() const + glslang_filter_chain_filter get_mip_filter() const { return pass_info.mip_filter; } - vulkan_filter_chain_address get_address_mode() const + glslang_filter_chain_address get_address_mode() const { return pass_info.address; } @@ -685,7 +685,7 @@ static unique_ptr vulkan_filter_chain_load_lut( tex, view, memory, move(buffer), image.width, image.height, shader->filter != RARCH_FILTER_NEAREST, image_info.mipLevels > 1, - vk_wrap_to_address(shader->wrap))); + rarch_wrap_to_address(shader->wrap))); error: if (image.pixels) @@ -1344,7 +1344,7 @@ StaticTexture::StaticTexture(string id, unsigned width, unsigned height, bool linear, bool mipmap, - vulkan_filter_chain_address address) + glslang_filter_chain_address address) : device(device), image(image), view(view), @@ -1352,8 +1352,8 @@ StaticTexture::StaticTexture(string id, buffer(move(buffer)), id(move(id)) { - texture.filter = VULKAN_FILTER_CHAIN_NEAREST; - texture.mip_filter = VULKAN_FILTER_CHAIN_NEAREST; + texture.filter = GLSLANG_FILTER_CHAIN_NEAREST; + texture.mip_filter = GLSLANG_FILTER_CHAIN_NEAREST; texture.address = address; texture.texture.image = image; texture.texture.view = view; @@ -1362,9 +1362,9 @@ StaticTexture::StaticTexture(string id, texture.texture.height = height; if (linear) - texture.filter = VULKAN_FILTER_CHAIN_LINEAR; + texture.filter = GLSLANG_FILTER_CHAIN_LINEAR; if (mipmap && linear) - texture.mip_filter = VULKAN_FILTER_CHAIN_LINEAR; + texture.mip_filter = GLSLANG_FILTER_CHAIN_LINEAR; } StaticTexture::~StaticTexture() @@ -1467,19 +1467,19 @@ Size2D Pass::get_output_size(const Size2D &original, float width, height; switch (pass_info.scale_type_x) { - case VULKAN_FILTER_CHAIN_SCALE_ORIGINAL: + case GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL: width = float(original.width) * pass_info.scale_x; break; - case VULKAN_FILTER_CHAIN_SCALE_SOURCE: + case GLSLANG_FILTER_CHAIN_SCALE_SOURCE: width = float(source.width) * pass_info.scale_x; break; - case VULKAN_FILTER_CHAIN_SCALE_VIEWPORT: + case GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT: width = current_viewport.width * pass_info.scale_x; break; - case VULKAN_FILTER_CHAIN_SCALE_ABSOLUTE: + case GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE: width = pass_info.scale_x; break; @@ -1489,19 +1489,19 @@ Size2D Pass::get_output_size(const Size2D &original, switch (pass_info.scale_type_y) { - case VULKAN_FILTER_CHAIN_SCALE_ORIGINAL: + case GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL: height = float(original.height) * pass_info.scale_y; break; - case VULKAN_FILTER_CHAIN_SCALE_SOURCE: + case GLSLANG_FILTER_CHAIN_SCALE_SOURCE: height = float(source.height) * pass_info.scale_y; break; - case VULKAN_FILTER_CHAIN_SCALE_VIEWPORT: + case GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT: height = current_viewport.height * pass_info.scale_y; break; - case VULKAN_FILTER_CHAIN_SCALE_ABSOLUTE: + case GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE: height = pass_info.scale_y; break; @@ -1824,18 +1824,18 @@ CommonResources::CommonResources(VkDevice device, info.unnormalizedCoordinates = false; info.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; - for (i = 0; i < VULKAN_FILTER_CHAIN_COUNT; i++) + for (i = 0; i < GLSLANG_FILTER_CHAIN_COUNT; i++) { unsigned j; - switch (static_cast(i)) + switch (static_cast(i)) { - case VULKAN_FILTER_CHAIN_LINEAR: + case GLSLANG_FILTER_CHAIN_LINEAR: info.magFilter = VK_FILTER_LINEAR; info.minFilter = VK_FILTER_LINEAR; break; - case VULKAN_FILTER_CHAIN_NEAREST: + case GLSLANG_FILTER_CHAIN_NEAREST: info.magFilter = VK_FILTER_NEAREST; info.minFilter = VK_FILTER_NEAREST; break; @@ -1844,17 +1844,17 @@ CommonResources::CommonResources(VkDevice device, break; } - for (j = 0; j < VULKAN_FILTER_CHAIN_COUNT; j++) + for (j = 0; j < GLSLANG_FILTER_CHAIN_COUNT; j++) { unsigned k; - switch (static_cast(j)) + switch (static_cast(j)) { - case VULKAN_FILTER_CHAIN_LINEAR: + case GLSLANG_FILTER_CHAIN_LINEAR: info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; break; - case VULKAN_FILTER_CHAIN_NEAREST: + case GLSLANG_FILTER_CHAIN_NEAREST: info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; break; @@ -1862,29 +1862,29 @@ CommonResources::CommonResources(VkDevice device, break; } - for (k = 0; k < VULKAN_FILTER_CHAIN_ADDRESS_COUNT; k++) + for (k = 0; k < GLSLANG_FILTER_CHAIN_ADDRESS_COUNT; k++) { VkSamplerAddressMode mode = VK_SAMPLER_ADDRESS_MODE_MAX_ENUM; - switch (static_cast(k)) + switch (static_cast(k)) { - case VULKAN_FILTER_CHAIN_ADDRESS_REPEAT: + case GLSLANG_FILTER_CHAIN_ADDRESS_REPEAT: mode = VK_SAMPLER_ADDRESS_MODE_REPEAT; break; - case VULKAN_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT: + case GLSLANG_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT: mode = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; break; - case VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE: + case GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE: mode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; break; - case VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER: + case GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER: mode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; break; - case VULKAN_FILTER_CHAIN_ADDRESS_MIRROR_CLAMP_TO_EDGE: + case GLSLANG_FILTER_CHAIN_ADDRESS_MIRROR_CLAMP_TO_EDGE: mode = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; break; @@ -2512,7 +2512,7 @@ vulkan_filter_chain_t *vulkan_filter_chain_new( vulkan_filter_chain_t *vulkan_filter_chain_create_default( const struct vulkan_filter_chain_create_info *info, - vulkan_filter_chain_filter filter) + glslang_filter_chain_filter filter) { struct vulkan_filter_chain_pass_info pass_info; auto tmpinfo = *info; @@ -2523,14 +2523,14 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_default( if (!chain) return nullptr; - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; pass_info.scale_x = 1.0f; pass_info.scale_y = 1.0f; pass_info.rt_format = tmpinfo.swapchain.format; pass_info.source_filter = filter; - pass_info.mip_filter = VULKAN_FILTER_CHAIN_NEAREST; - pass_info.address = VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; + pass_info.mip_filter = GLSLANG_FILTER_CHAIN_NEAREST; + pass_info.address = GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; pass_info.max_levels = 0; chain->set_pass_info(0, pass_info); @@ -2550,7 +2550,7 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_default( vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( const struct vulkan_filter_chain_create_info *info, - const char *path, vulkan_filter_chain_filter filter) + const char *path, glslang_filter_chain_filter filter) { unsigned i; config_file_t *conf = NULL; @@ -2588,14 +2588,14 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( const video_shader_pass *next_pass = i + 1 < shader->passes ? &shader->pass[i + 1] : nullptr; - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_ORIGINAL; - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_ORIGINAL; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_ORIGINAL; pass_info.scale_x = 0.0f; pass_info.scale_y = 0.0f; pass_info.rt_format = VK_FORMAT_UNDEFINED; - pass_info.source_filter = VULKAN_FILTER_CHAIN_LINEAR; - pass_info.mip_filter = VULKAN_FILTER_CHAIN_LINEAR; - pass_info.address = VULKAN_FILTER_CHAIN_ADDRESS_REPEAT; + pass_info.source_filter = GLSLANG_FILTER_CHAIN_LINEAR; + pass_info.mip_filter = GLSLANG_FILTER_CHAIN_LINEAR; + pass_info.address = GLSLANG_FILTER_CHAIN_ADDRESS_REPEAT; pass_info.max_levels = 0; if (!glslang_compile_shader(pass->source.path, &output)) @@ -2674,10 +2674,11 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( else { pass_info.source_filter = - pass->filter == RARCH_FILTER_LINEAR ? VULKAN_FILTER_CHAIN_LINEAR : - VULKAN_FILTER_CHAIN_NEAREST; + pass->filter == RARCH_FILTER_LINEAR + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST; } - pass_info.address = vk_wrap_to_address(pass->wrap); + pass_info.address = rarch_wrap_to_address(pass->wrap); pass_info.max_levels = 1; /* TODO: Expose max_levels in slangp. @@ -2688,7 +2689,8 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( pass_info.max_levels = ~0u; pass_info.mip_filter = pass->filter != RARCH_FILTER_NEAREST && pass_info.max_levels > 1 - ? VULKAN_FILTER_CHAIN_LINEAR : VULKAN_FILTER_CHAIN_NEAREST; + ? GLSLANG_FILTER_CHAIN_LINEAR + : GLSLANG_FILTER_CHAIN_NEAREST; bool explicit_format = output.meta.rt_format != SLANG_FORMAT_UNKNOWN; @@ -2698,15 +2700,15 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( if (!pass->fbo.valid) { - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_SOURCE; - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_SOURCE; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_SOURCE; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_SOURCE; pass_info.scale_x = 1.0f; pass_info.scale_y = 1.0f; if (i + 1 == shader->passes) { - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; pass_info.rt_format = tmpinfo.swapchain.format; if (explicit_format) @@ -2739,17 +2741,17 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( { case RARCH_SCALE_INPUT: pass_info.scale_x = pass->fbo.scale_x; - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_SOURCE; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_SOURCE; break; case RARCH_SCALE_ABSOLUTE: pass_info.scale_x = float(pass->fbo.abs_x); - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_ABSOLUTE; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE; break; case RARCH_SCALE_VIEWPORT: pass_info.scale_x = pass->fbo.scale_x; - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; break; } @@ -2757,17 +2759,17 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( { case RARCH_SCALE_INPUT: pass_info.scale_y = pass->fbo.scale_y; - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_SOURCE; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_SOURCE; break; case RARCH_SCALE_ABSOLUTE: pass_info.scale_y = float(pass->fbo.abs_y); - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_ABSOLUTE; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_ABSOLUTE; break; case RARCH_SCALE_VIEWPORT: pass_info.scale_y = pass->fbo.scale_y; - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; break; } } @@ -2779,16 +2781,16 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( { struct vulkan_filter_chain_pass_info pass_info; - pass_info.scale_type_x = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; - pass_info.scale_type_y = VULKAN_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_x = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; + pass_info.scale_type_y = GLSLANG_FILTER_CHAIN_SCALE_VIEWPORT; pass_info.scale_x = 1.0f; pass_info.scale_y = 1.0f; pass_info.rt_format = tmpinfo.swapchain.format; pass_info.source_filter = filter; - pass_info.mip_filter = VULKAN_FILTER_CHAIN_NEAREST; - pass_info.address = VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; + pass_info.mip_filter = GLSLANG_FILTER_CHAIN_NEAREST; + pass_info.address = GLSLANG_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; pass_info.max_levels = 0; diff --git a/gfx/drivers_shader/shader_vulkan.h b/gfx/drivers_shader/shader_vulkan.h index bcd1a029d7..2b0ad7d902 100644 --- a/gfx/drivers_shader/shader_vulkan.h +++ b/gfx/drivers_shader/shader_vulkan.h @@ -23,29 +23,14 @@ #include #include +#include "glslang_util.h" + #include "../common/vulkan_common.h" RETRO_BEGIN_DECLS typedef struct vulkan_filter_chain vulkan_filter_chain_t; -enum vulkan_filter_chain_filter -{ - VULKAN_FILTER_CHAIN_LINEAR = 0, - VULKAN_FILTER_CHAIN_NEAREST = 1, - VULKAN_FILTER_CHAIN_COUNT -}; - -enum vulkan_filter_chain_address -{ - VULKAN_FILTER_CHAIN_ADDRESS_REPEAT = 0, - VULKAN_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT = 1, - VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE = 2, - VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER = 3, - VULKAN_FILTER_CHAIN_ADDRESS_MIRROR_CLAMP_TO_EDGE = 4, - VULKAN_FILTER_CHAIN_ADDRESS_COUNT -}; - struct vulkan_filter_chain_texture { VkImage image; @@ -56,20 +41,12 @@ struct vulkan_filter_chain_texture VkFormat format; }; -enum vulkan_filter_chain_scale -{ - VULKAN_FILTER_CHAIN_SCALE_ORIGINAL, - VULKAN_FILTER_CHAIN_SCALE_SOURCE, - VULKAN_FILTER_CHAIN_SCALE_VIEWPORT, - VULKAN_FILTER_CHAIN_SCALE_ABSOLUTE -}; - struct vulkan_filter_chain_pass_info { /* For the last pass, make sure VIEWPORT scale * with scale factors of 1 are used. */ - enum vulkan_filter_chain_scale scale_type_x; - enum vulkan_filter_chain_scale scale_type_y; + enum glslang_filter_chain_scale scale_type_x; + enum glslang_filter_chain_scale scale_type_y; float scale_x; float scale_y; @@ -77,9 +54,9 @@ struct vulkan_filter_chain_pass_info VkFormat rt_format; /* The filter to use for source in this pass. */ - enum vulkan_filter_chain_filter source_filter; - enum vulkan_filter_chain_filter mip_filter; - enum vulkan_filter_chain_address address; + enum glslang_filter_chain_filter source_filter; + enum glslang_filter_chain_filter mip_filter; + enum glslang_filter_chain_address address; /* Maximum number of mip-levels to use. */ unsigned max_levels; @@ -111,25 +88,6 @@ struct vulkan_filter_chain_create_info struct vulkan_filter_chain_swapchain_info swapchain; }; -static INLINE enum vulkan_filter_chain_address vk_wrap_to_address(enum gfx_wrap_type type) -{ - switch (type) - { - case RARCH_WRAP_BORDER: - return VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_BORDER; - case RARCH_WRAP_REPEAT: - return VULKAN_FILTER_CHAIN_ADDRESS_REPEAT; - case RARCH_WRAP_MIRRORED_REPEAT: - return VULKAN_FILTER_CHAIN_ADDRESS_MIRRORED_REPEAT; - case RARCH_WRAP_EDGE: - default: - break; - } - - return VULKAN_FILTER_CHAIN_ADDRESS_CLAMP_TO_EDGE; -} - - vulkan_filter_chain_t *vulkan_filter_chain_new( const struct vulkan_filter_chain_create_info *info); void vulkan_filter_chain_free(vulkan_filter_chain_t *chain); @@ -178,11 +136,11 @@ void vulkan_filter_chain_end_frame(vulkan_filter_chain_t *chain, vulkan_filter_chain_t *vulkan_filter_chain_create_default( const struct vulkan_filter_chain_create_info *info, - enum vulkan_filter_chain_filter filter); + enum glslang_filter_chain_filter filter); vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( const struct vulkan_filter_chain_create_info *info, - const char *path, enum vulkan_filter_chain_filter filter); + const char *path, enum glslang_filter_chain_filter filter); struct video_shader *vulkan_filter_chain_get_preset( vulkan_filter_chain_t *chain);