diff --git a/Makefile.common b/Makefile.common index f85d226679..1b09409b67 100644 --- a/Makefile.common +++ b/Makefile.common @@ -223,7 +223,6 @@ OBJ += frontend/frontend.o \ tasks/task_powerstate.o \ $(LIBRETRO_COMM_DIR)/gfx/scaler/scaler.o \ gfx/drivers_shader/shader_null.o \ - gfx/video_shader_driver.o \ gfx/video_shader_parse.o \ $(LIBRETRO_COMM_DIR)/gfx/scaler/pixconv.o \ $(LIBRETRO_COMM_DIR)/gfx/scaler/scaler_int.o \ diff --git a/gfx/drivers/d3d.h b/gfx/drivers/d3d.h index 919477fa72..2822ad12ff 100644 --- a/gfx/drivers/d3d.h +++ b/gfx/drivers/d3d.h @@ -46,10 +46,6 @@ #include "../../driver.h" -#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) -#include "../video_shader_driver.h" -#endif - #include "../font_driver.h" #include "../video_driver.h" #include "../common/d3d_common.h" diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 6447f139be..3b48bffc0e 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -75,8 +75,6 @@ #include "../common/win32_common.h" #endif -#include "../video_shader_driver.h" - #ifndef GL_SYNC_GPU_COMMANDS_COMPLETE #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #endif diff --git a/gfx/drivers_font/gl_raster_font.c b/gfx/drivers_font/gl_raster_font.c index f69e8c2652..33ddd2641c 100644 --- a/gfx/drivers_font/gl_raster_font.c +++ b/gfx/drivers_font/gl_raster_font.c @@ -22,7 +22,6 @@ #include "../common/gl_common.h" #include "../font_driver.h" -#include "../video_shader_driver.h" #include "../video_driver.h" /* TODO: Move viewport side effects to the caller: it's a source of bugs. */ diff --git a/gfx/drivers_renderchain/gl_legacy_renderchain.c b/gfx/drivers_renderchain/gl_legacy_renderchain.c index 6a0068723d..452abdca90 100644 --- a/gfx/drivers_renderchain/gl_legacy_renderchain.c +++ b/gfx/drivers_renderchain/gl_legacy_renderchain.c @@ -50,7 +50,7 @@ #include "../common/win32_common.h" #endif -#include "../video_shader_driver.h" +#include "../video_driver.h" #define set_texture_coords(coords, xamt, yamt) \ coords[2] = xamt; \ diff --git a/gfx/drivers_renderchain/xdk_renderchain.cpp b/gfx/drivers_renderchain/xdk_renderchain.cpp index 4cfa4de7a8..f3c22e1ba3 100644 --- a/gfx/drivers_renderchain/xdk_renderchain.cpp +++ b/gfx/drivers_renderchain/xdk_renderchain.cpp @@ -21,7 +21,7 @@ #include "../drivers/d3d.h" #include "../common/d3d_common.h" -#include "../video_shader_driver.h" +#include "../video_driver.h" #include "../../configuration.h" #include "../../verbosity.h" diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 3112114bc8..754e08b4e2 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -46,7 +46,7 @@ #include "../include/Cg/cg.h" -#include "../video_shader_driver.h" +#include "../video_driver.h" #include "../video_shader_parse.h" #include "../../core.h" #include "../../managers/state_manager.h" diff --git a/gfx/drivers_shader/shader_glsl.h b/gfx/drivers_shader/shader_glsl.h index 9b04095cd7..7f77693a59 100644 --- a/gfx/drivers_shader/shader_glsl.h +++ b/gfx/drivers_shader/shader_glsl.h @@ -19,7 +19,7 @@ #define __RARCH_GLSL_H #include -#include "../video_shader_driver.h" +#include "../video_driver.h" void gl_glsl_set_get_proc_address(gfx_ctx_proc_t (*proc)(const char*)); diff --git a/gfx/drivers_shader/shader_hlsl.h b/gfx/drivers_shader/shader_hlsl.h index a18e6d75ac..2fe39ee7c2 100644 --- a/gfx/drivers_shader/shader_hlsl.h +++ b/gfx/drivers_shader/shader_hlsl.h @@ -17,9 +17,10 @@ #ifndef __RARCH_HLSL_H #define __RARCH_HLSL_H -#include "../video_shader_driver.h" #include +#include "../video_driver.h" + void hlsl_set_proj_matrix(void *data, XMMATRIX rotation_value); #define RARCH_HLSL_MAX_SHADERS 16 diff --git a/gfx/drivers_shader/shader_null.c b/gfx/drivers_shader/shader_null.c index 3592fe6080..8a2ce6c77f 100644 --- a/gfx/drivers_shader/shader_null.c +++ b/gfx/drivers_shader/shader_null.c @@ -27,7 +27,7 @@ #include "../../config.h" #endif -#include "../video_shader_driver.h" +#include "../video_driver.h" typedef struct null_shader_data { diff --git a/gfx/drivers_shader/shader_vulkan.cpp b/gfx/drivers_shader/shader_vulkan.cpp index bac766cab5..605f786302 100644 --- a/gfx/drivers_shader/shader_vulkan.cpp +++ b/gfx/drivers_shader/shader_vulkan.cpp @@ -30,7 +30,7 @@ #include "slang_reflection.hpp" -#include "../video_shader_driver.h" +#include "../video_driver.h" #include "../../verbosity.h" #include "../../msg_hash.h" diff --git a/gfx/drivers_shader/slang_preprocess.h b/gfx/drivers_shader/slang_preprocess.h index 37fd2ec91b..e889f31947 100644 --- a/gfx/drivers_shader/slang_preprocess.h +++ b/gfx/drivers_shader/slang_preprocess.h @@ -18,7 +18,7 @@ #include #include -#include "../video_shader_driver.h" +#include "../video_driver.h" RETRO_BEGIN_DECLS diff --git a/gfx/video_driver.c b/gfx/video_driver.c index e1693e8b56..46b4593038 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -43,6 +43,10 @@ #include "../menu/menu_setting.h" #endif +#ifdef HAVE_OPENGL +#include "common/gl_common.h" +#endif + #include "video_thread_wrapper.h" #include "video_driver.h" @@ -201,6 +205,9 @@ gfx_ctx_driver_t current_video_context; void *video_context_data = NULL; +shader_backend_t *current_shader = NULL; +void *shader_data = NULL; + struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END] = { { "4:3", 1.3333f }, { "16:9", 1.7778f }, @@ -365,6 +372,20 @@ static const gfx_ctx_driver_t *gfx_ctx_drivers[] = { NULL }; +static const shader_backend_t *shader_ctx_drivers[] = { +#ifdef HAVE_GLSL + &gl_glsl_backend, +#endif +#ifdef HAVE_CG + &gl_cg_backend, +#endif +#ifdef HAVE_HLSL + &hlsl_backend, +#endif + &shader_null_backend, + NULL +}; + /* Stub functions */ static void update_window_title_null(void *data, video_frame_info_t *video_info) @@ -2984,3 +3005,288 @@ bool video_driver_cached_frame_has_valid_framebuffer(void) return (frame_cache_data == RETRO_HW_FRAME_BUFFER_VALID); return false; } + +static const shader_backend_t *video_shader_set_backend(enum rarch_shader_type type) +{ + switch (type) + { + case RARCH_SHADER_CG: + { +#ifdef HAVE_CG + gfx_ctx_flags_t flags; + flags.flags = 0; + video_context_driver_get_flags(&flags); + + if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT)) + { + RARCH_ERR("[Shader driver]: Cg cannot be used with core GL context. Trying to fall back to GLSL...\n"); + return video_shader_set_backend(RARCH_SHADER_GLSL); + } + + RARCH_LOG("[Shader driver]: Using Cg shader backend.\n"); + return &gl_cg_backend; +#else + break; +#endif + } + case RARCH_SHADER_GLSL: +#ifdef HAVE_GLSL + RARCH_LOG("[Shader driver]: Using GLSL shader backend.\n"); + return &gl_glsl_backend; +#else + break; +#endif + case RARCH_SHADER_NONE: + default: + break; + } + + return NULL; +} + +bool video_shader_driver_get_prev_textures(video_shader_ctx_texture_t *texture) +{ + if (!texture) + { + if (texture) + texture->id = 0; + return false; + } + texture->id = current_shader->get_prev_textures(shader_data); + + return true; +} + +bool video_shader_driver_get_ident(video_shader_ctx_ident_t *ident) +{ + if (!ident) + return false; + ident->ident = current_shader->ident; + return true; +} + +bool video_shader_driver_get_current_shader(video_shader_ctx_t *shader) +{ + void *video_driver = video_driver_get_ptr(true); + const video_poke_interface_t *video_poke = video_driver_get_poke(); + + shader->data = NULL; + if (!video_poke || !video_driver || !video_poke->get_current_shader) + return false; + shader->data = video_poke->get_current_shader(video_driver); + return true; +} + +bool video_shader_driver_direct_get_current_shader(video_shader_ctx_t *shader) +{ + shader->data = current_shader->get_current_shader(shader_data); + + return true; +} + +bool video_shader_driver_deinit(void) +{ + if (!current_shader) + return false; + + if (current_shader->deinit) + current_shader->deinit(shader_data); + + shader_data = NULL; + current_shader = NULL; + return true; +} + +static enum gfx_wrap_type video_shader_driver_wrap_type_null( + void *data, unsigned index) +{ + return RARCH_WRAP_BORDER; +} + +static bool video_shader_driver_set_mvp_null(void *data, + void *shader_data, const math_matrix_4x4 *mat) +{ +#ifdef HAVE_OPENGL +#ifndef NO_GL_FF_MATRIX + if (string_is_equal_fast(video_driver_get_ident(), "gl", 2)) + gl_ff_matrix(mat); +#endif +#endif + return false; +} + +static bool video_shader_driver_set_coords_null(void *handle_data, + void *shader_data, const struct video_coords *coords) +{ +#ifdef HAVE_OPENGL +#ifndef NO_GL_FF_VERTEX + if (string_is_equal_fast(video_driver_get_ident(), "gl", 2)) + gl_ff_vertex(coords); +#endif +#endif + return false; +} + +static void video_shader_driver_use_null(void *data, + void *shader_data, unsigned idx, bool set_active) +{ + (void)data; + (void)idx; + (void)set_active; +} + +static struct video_shader *video_shader_driver_get_current_shader_null(void *data) +{ + return NULL; +} + + +static void video_shader_driver_set_params_null(void *data, void *shader_data, + unsigned width, unsigned height, + unsigned tex_width, unsigned tex_height, + unsigned out_width, unsigned out_height, + unsigned frame_count, + const void *info, + const void *prev_info, + const void *feedback_info, + const void *fbo_info, unsigned fbo_info_cnt) +{ +} + +static void video_shader_driver_scale_null(void *data, + unsigned idx, struct gfx_fbo_scale *scale) +{ + (void)idx; + (void)scale; +} + +static bool video_shader_driver_mipmap_input_null(void *data, unsigned idx) +{ + (void)idx; + return false; +} + +static bool video_shader_driver_filter_type_null(void *data, unsigned idx, bool *smooth) +{ + (void)idx; + (void)smooth; + return false; +} + +static unsigned video_shader_driver_num_null(void *data) +{ + return 0; +} + +static bool video_shader_driver_get_feedback_pass_null(void *data, unsigned *idx) +{ + (void)idx; + return false; +} + +static void video_shader_driver_reset_to_defaults(void) +{ + if (!current_shader->wrap_type) + current_shader->wrap_type = video_shader_driver_wrap_type_null; + if (!current_shader->set_mvp) + current_shader->set_mvp = video_shader_driver_set_mvp_null; + if (!current_shader->set_coords) + current_shader->set_coords = video_shader_driver_set_coords_null; + if (!current_shader->use) + current_shader->use = video_shader_driver_use_null; + if (!current_shader->set_params) + current_shader->set_params = video_shader_driver_set_params_null; + if (!current_shader->shader_scale) + current_shader->shader_scale = video_shader_driver_scale_null; + if (!current_shader->mipmap_input) + current_shader->mipmap_input = video_shader_driver_mipmap_input_null; + if (!current_shader->filter_type) + current_shader->filter_type = video_shader_driver_filter_type_null; + if (!current_shader->num_shaders) + current_shader->num_shaders = video_shader_driver_num_null; + if (!current_shader->get_current_shader) + current_shader->get_current_shader= video_shader_driver_get_current_shader_null; + if (!current_shader->get_feedback_pass) + current_shader->get_feedback_pass = video_shader_driver_get_feedback_pass_null; +} + +/* Finds first suitable shader context driver. */ +bool video_shader_driver_init_first(void) +{ + current_shader = (shader_backend_t*)shader_ctx_drivers[0]; + video_shader_driver_reset_to_defaults(); + return true; +} + +bool video_shader_driver_init(video_shader_ctx_init_t *init) +{ + void *tmp = NULL; + + if (!init->shader || !init->shader->init) + { + init->shader = video_shader_set_backend(init->shader_type); + + if (!init->shader) + return false; + } + + tmp = init->shader->init(init->data, init->path); + + if (!tmp) + return false; + + shader_data = tmp; + current_shader = (shader_backend_t*)init->shader; + video_shader_driver_reset_to_defaults(); + + return true; +} + +bool video_shader_driver_get_feedback_pass(unsigned *data) +{ + return current_shader->get_feedback_pass(shader_data, data); +} + +bool video_shader_driver_mipmap_input(unsigned *index) +{ + return current_shader->mipmap_input(shader_data, *index); +} + +bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler) +{ + if (!scaler || !scaler->scale) + return false; + + scaler->scale->valid = false; + + current_shader->shader_scale(shader_data, scaler->idx, scaler->scale); + return true; +} + +bool video_shader_driver_info(video_shader_ctx_info_t *shader_info) +{ + if (!shader_info) + return false; + + shader_info->num = current_shader->num_shaders(shader_data); + + return true; +} + +bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter) +{ + return (filter) ? current_shader->filter_type(shader_data, + filter->index, filter->smooth) : false; +} + +bool video_shader_driver_compile_program(struct shader_program_info *program_info) +{ + return (program_info) ? current_shader->compile_program(program_info->data, + program_info->idx, NULL, program_info) : false; +} + +bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap) +{ + wrap->type = current_shader->wrap_type(shader_data, wrap->idx); + return true; +} diff --git a/gfx/video_driver.h b/gfx/video_driver.h index c14954dfdb..bb3378f079 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -23,6 +23,7 @@ #include #include +#include #ifdef HAVE_CONFIG_H #include "../config.h" @@ -33,11 +34,38 @@ #endif #include "video_defines.h" +#include "video_coord_array.h" #include "video_filter.h" #include "video_shader_parse.h" #include "../input/input_driver.h" +#if defined(HAVE_CG) || defined(HAVE_HLSL) || defined(HAVE_GLSL) || defined(HAVE_SLANG) +#ifndef HAVE_SHADER_MANAGER +#define HAVE_SHADER_MANAGER +#endif + +#include "video_shader_parse.h" + +#define VIDEO_SHADER_STOCK_BLEND (GFX_MAX_SHADERS - 1) +#define VIDEO_SHADER_MENU (GFX_MAX_SHADERS - 2) +#define VIDEO_SHADER_MENU_2 (GFX_MAX_SHADERS - 3) +#define VIDEO_SHADER_MENU_3 (GFX_MAX_SHADERS - 4) +#define VIDEO_SHADER_MENU_4 (GFX_MAX_SHADERS - 5) +#define VIDEO_SHADER_MENU_5 (GFX_MAX_SHADERS - 6) + +#endif + +#if defined(_XBOX360) +#define DEFAULT_SHADER_TYPE RARCH_SHADER_HLSL +#elif defined(__PSL1GHT__) || defined(HAVE_OPENGLES2) || defined(HAVE_GLSL) +#define DEFAULT_SHADER_TYPE RARCH_SHADER_GLSL +#elif defined(__CELLOS_LV2__) || defined(HAVE_CG) +#define DEFAULT_SHADER_TYPE RARCH_SHADER_CG +#else +#define DEFAULT_SHADER_TYPE RARCH_SHADER_NONE +#endif + RETRO_BEGIN_DECLS #ifndef MAX_EGLIMAGE_TEXTURES @@ -72,6 +100,223 @@ enum display_flags GFX_CTX_FLAGS_CUSTOMIZABLE_SWAPCHAIN_IMAGES }; +enum shader_uniform_type +{ + UNIFORM_1F = 0, + UNIFORM_2F, + UNIFORM_3F, + UNIFORM_4F, + UNIFORM_1FV, + UNIFORM_2FV, + UNIFORM_3FV, + UNIFORM_4FV, + UNIFORM_1I +}; + +enum shader_program_type +{ + SHADER_PROGRAM_VERTEX = 0, + SHADER_PROGRAM_FRAGMENT, + SHADER_PROGRAM_COMBINED +}; + +struct shader_program_info +{ + void *data; + const char *vertex; + const char *fragment; + const char *combined; + unsigned idx; + bool is_file; +}; + +struct uniform_info +{ + unsigned type; /* shader uniform type */ + bool enabled; + + int32_t location; + int32_t count; + + struct + { + enum shader_program_type type; + const char *ident; + uint32_t idx; + bool add_prefix; + bool enable; + } lookup; + + struct + { + struct + { + intptr_t v0; + intptr_t v1; + intptr_t v2; + intptr_t v3; + } integer; + + intptr_t *integerv; + + struct + { + uintptr_t v0; + uintptr_t v1; + uintptr_t v2; + uintptr_t v3; + } unsigned_integer; + + uintptr_t *unsigned_integerv; + + struct + { + float v0; + float v1; + float v2; + float v3; + } f; + + float *floatv; + } result; +}; + + + + +typedef struct shader_backend +{ + void *(*init)(void *data, const char *path); + void (*deinit)(void *data); + + /* Set shader parameters. */ + void (*set_params)(void *data, void *shader_data, + unsigned width, unsigned height, + unsigned tex_width, unsigned tex_height, + unsigned out_width, unsigned out_height, + unsigned frame_counter, + const void *info, + const void *prev_info, + const void *feedback_info, + const void *fbo_info, unsigned fbo_info_cnt); + + void (*set_uniform_parameter)(void *data, struct uniform_info *param, + void *uniform_data); + + /* Compile a shader program. */ + bool (*compile_program)(void *data, unsigned idx, + void *program_data, struct shader_program_info *program_info); + + /* Use a shader program specified by variable 'index'. */ + void (*use)(void *data, void *shader_data, unsigned index, bool set_active); + + /* Returns the number of currently loaded shaders. */ + unsigned (*num_shaders)(void *data); + + bool (*filter_type)(void *data, unsigned index, bool *smooth); + enum gfx_wrap_type (*wrap_type)(void *data, unsigned index); + void (*shader_scale)(void *data, + unsigned index, struct gfx_fbo_scale *scale); + bool (*set_coords)(void *handle_data, + void *shader_data, const struct video_coords *coords); + bool (*set_coords_fallback)(void *handle_data, + void *shader_data, const struct video_coords *coords); + bool (*set_mvp)(void *data, void *shader_data, + const math_matrix_4x4 *mat); + unsigned (*get_prev_textures)(void *data); + bool (*get_feedback_pass)(void *data, unsigned *pass); + bool (*mipmap_input)(void *data, unsigned index); + + struct video_shader *(*get_current_shader)(void *data); + + enum rarch_shader_type type; + + /* Human readable string. */ + const char *ident; +} shader_backend_t; + +typedef struct video_shader_ctx_init +{ + enum rarch_shader_type shader_type; + const shader_backend_t *shader; + struct + { + bool core_context_enabled; + } gl; + void *data; + const char *path; +} video_shader_ctx_init_t; + +typedef struct video_shader_ctx_params +{ + void *data; + unsigned width; + unsigned height; + unsigned tex_width; + unsigned tex_height; + unsigned out_width; + unsigned out_height; + unsigned frame_counter; + const void *info; + const void *prev_info; + const void *feedback_info; + const void *fbo_info; + unsigned fbo_info_cnt; +} video_shader_ctx_params_t; + +typedef struct video_shader_ctx_coords +{ + void *handle_data; + const void *data; +} video_shader_ctx_coords_t; + +typedef struct video_shader_ctx_scale +{ + unsigned idx; + struct gfx_fbo_scale *scale; +} video_shader_ctx_scale_t; + +typedef struct video_shader_ctx_info +{ + bool set_active; + unsigned num; + unsigned idx; + void *data; +} video_shader_ctx_info_t; + +typedef struct video_shader_ctx_mvp +{ + void *data; + const math_matrix_4x4 *matrix; +} video_shader_ctx_mvp_t; + +typedef struct video_shader_ctx_filter +{ + unsigned index; + bool *smooth; +} video_shader_ctx_filter_t; + +typedef struct video_shader_ctx_wrap +{ + unsigned idx; + enum gfx_wrap_type type; +} video_shader_ctx_wrap_t; + +typedef struct video_shader_ctx +{ + struct video_shader *data; +} video_shader_ctx_t; + +typedef struct video_shader_ctx_ident +{ + const char *ident; +} video_shader_ctx_ident_t; + +typedef struct video_shader_ctx_texture +{ + unsigned id; +} video_shader_ctx_texture_t; + typedef void (*gfx_ctx_proc_t)(void); typedef struct video_frame_info video_frame_info_t; @@ -948,6 +1193,60 @@ extern gfx_ctx_driver_t current_video_context; extern void *video_context_data; +bool video_shader_driver_get_prev_textures(video_shader_ctx_texture_t *texture); + +bool video_shader_driver_get_ident(video_shader_ctx_ident_t *ident); + +bool video_shader_driver_get_current_shader(video_shader_ctx_t *shader); + +bool video_shader_driver_direct_get_current_shader(video_shader_ctx_t *shader); + +bool video_shader_driver_deinit(void); + +#define video_shader_driver_set_parameter(param) \ + if (current_shader && current_shader->set_uniform_parameter) \ + current_shader->set_uniform_parameter(shader_data, ¶m, NULL) + +#define video_shader_driver_set_parameters(params) \ + current_shader->set_params(params.data, shader_data, params.width, params.height, params.tex_width, params.tex_height, params.out_width, params.out_height, params.frame_counter, params.info, params.prev_info, params.feedback_info, params.fbo_info, params.fbo_info_cnt) + +bool video_shader_driver_init_first(void); + +bool video_shader_driver_init(video_shader_ctx_init_t *init); + +bool video_shader_driver_get_feedback_pass(unsigned *data); + +bool video_shader_driver_mipmap_input(unsigned *index); + +#define video_shader_driver_set_coords(coords) \ + if (!current_shader->set_coords(coords.handle_data, shader_data, (const struct video_coords*)coords.data) && current_shader->set_coords_fallback) \ + current_shader->set_coords_fallback(coords.handle_data, shader_data, (const struct video_coords*)coords.data) + +bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler); + +bool video_shader_driver_info(video_shader_ctx_info_t *shader_info); + +#define video_shader_driver_set_mvp(mvp) \ + if (mvp.matrix) \ + current_shader->set_mvp(mvp.data, shader_data, mvp.matrix) \ + +bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter); + +bool video_shader_driver_compile_program(struct shader_program_info *program_info); + +#define video_shader_driver_use(shader_info) \ + current_shader->use(shader_info.data, shader_data, shader_info.idx, shader_info.set_active) + +bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap); + +extern shader_backend_t *current_shader; +extern void *shader_data; + +extern const shader_backend_t gl_glsl_backend; +extern const shader_backend_t hlsl_backend; +extern const shader_backend_t gl_cg_backend; +extern const shader_backend_t shader_null_backend; + RETRO_END_DECLS #endif diff --git a/gfx/video_shader_driver.c b/gfx/video_shader_driver.c deleted file mode 100644 index 47db72ea51..0000000000 --- a/gfx/video_shader_driver.c +++ /dev/null @@ -1,331 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2011-2017 - Daniel De Matteis - * - * 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 - -#include -#include - -#ifdef HAVE_CONFIG_H -#include "../config.h" -#endif - -#ifdef HAVE_OPENGL -#include "common/gl_common.h" -#endif - -#include "video_shader_driver.h" -#include "../verbosity.h" - -static const shader_backend_t *shader_ctx_drivers[] = { -#ifdef HAVE_GLSL - &gl_glsl_backend, -#endif -#ifdef HAVE_CG - &gl_cg_backend, -#endif -#ifdef HAVE_HLSL - &hlsl_backend, -#endif - &shader_null_backend, - NULL -}; - -shader_backend_t *current_shader = NULL; -void *shader_data = NULL; - -static const shader_backend_t *video_shader_set_backend(enum rarch_shader_type type) -{ - switch (type) - { - case RARCH_SHADER_CG: - { -#ifdef HAVE_CG - gfx_ctx_flags_t flags; - video_context_driver_get_flags(&flags); - - if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT)) - { - RARCH_ERR("[Shader driver]: Cg cannot be used with core GL context. Trying to fall back to GLSL...\n"); - return video_shader_set_backend(RARCH_SHADER_GLSL); - } - - RARCH_LOG("[Shader driver]: Using Cg shader backend.\n"); - return &gl_cg_backend; -#else - break; -#endif - } - case RARCH_SHADER_GLSL: -#ifdef HAVE_GLSL - RARCH_LOG("[Shader driver]: Using GLSL shader backend.\n"); - return &gl_glsl_backend; -#else - break; -#endif - case RARCH_SHADER_NONE: - default: - break; - } - - return NULL; -} - -bool video_shader_driver_get_prev_textures(video_shader_ctx_texture_t *texture) -{ - if (!texture) - { - if (texture) - texture->id = 0; - return false; - } - texture->id = current_shader->get_prev_textures(shader_data); - - return true; -} - -bool video_shader_driver_get_ident(video_shader_ctx_ident_t *ident) -{ - if (!ident) - return false; - ident->ident = current_shader->ident; - return true; -} - -bool video_shader_driver_get_current_shader(video_shader_ctx_t *shader) -{ - void *video_driver = video_driver_get_ptr(true); - const video_poke_interface_t *video_poke = video_driver_get_poke(); - - shader->data = NULL; - if (!video_poke || !video_driver || !video_poke->get_current_shader) - return false; - shader->data = video_poke->get_current_shader(video_driver); - return true; -} - -bool video_shader_driver_direct_get_current_shader(video_shader_ctx_t *shader) -{ - shader->data = current_shader->get_current_shader(shader_data); - - return true; -} - -bool video_shader_driver_deinit(void) -{ - if (!current_shader) - return false; - - if (current_shader->deinit) - current_shader->deinit(shader_data); - - shader_data = NULL; - current_shader = NULL; - return true; -} - -static enum gfx_wrap_type video_shader_driver_wrap_type_null( - void *data, unsigned index) -{ - return RARCH_WRAP_BORDER; -} - -static bool video_shader_driver_set_mvp_null(void *data, - void *shader_data, const math_matrix_4x4 *mat) -{ -#ifdef HAVE_OPENGL -#ifndef NO_GL_FF_MATRIX - if (string_is_equal_fast(video_driver_get_ident(), "gl", 2)) - gl_ff_matrix(mat); -#endif -#endif - return false; -} - -static bool video_shader_driver_set_coords_null(void *handle_data, - void *shader_data, const struct video_coords *coords) -{ -#ifdef HAVE_OPENGL -#ifndef NO_GL_FF_VERTEX - if (string_is_equal_fast(video_driver_get_ident(), "gl", 2)) - gl_ff_vertex(coords); -#endif -#endif - return false; -} - -static void video_shader_driver_use_null(void *data, - void *shader_data, unsigned idx, bool set_active) -{ - (void)data; - (void)idx; - (void)set_active; -} - -static struct video_shader *video_shader_driver_get_current_shader_null(void *data) -{ - return NULL; -} - - -static void video_shader_driver_set_params_null(void *data, void *shader_data, - unsigned width, unsigned height, - unsigned tex_width, unsigned tex_height, - unsigned out_width, unsigned out_height, - unsigned frame_count, - const void *info, - const void *prev_info, - const void *feedback_info, - const void *fbo_info, unsigned fbo_info_cnt) -{ -} - -static void video_shader_driver_scale_null(void *data, - unsigned idx, struct gfx_fbo_scale *scale) -{ - (void)idx; - (void)scale; -} - -static bool video_shader_driver_mipmap_input_null(void *data, unsigned idx) -{ - (void)idx; - return false; -} - -static bool video_shader_driver_filter_type_null(void *data, unsigned idx, bool *smooth) -{ - (void)idx; - (void)smooth; - return false; -} - -static unsigned video_shader_driver_num_null(void *data) -{ - return 0; -} - -static bool video_shader_driver_get_feedback_pass_null(void *data, unsigned *idx) -{ - (void)idx; - return false; -} - -static void video_shader_driver_reset_to_defaults(void) -{ - if (!current_shader->wrap_type) - current_shader->wrap_type = video_shader_driver_wrap_type_null; - if (!current_shader->set_mvp) - current_shader->set_mvp = video_shader_driver_set_mvp_null; - if (!current_shader->set_coords) - current_shader->set_coords = video_shader_driver_set_coords_null; - if (!current_shader->use) - current_shader->use = video_shader_driver_use_null; - if (!current_shader->set_params) - current_shader->set_params = video_shader_driver_set_params_null; - if (!current_shader->shader_scale) - current_shader->shader_scale = video_shader_driver_scale_null; - if (!current_shader->mipmap_input) - current_shader->mipmap_input = video_shader_driver_mipmap_input_null; - if (!current_shader->filter_type) - current_shader->filter_type = video_shader_driver_filter_type_null; - if (!current_shader->num_shaders) - current_shader->num_shaders = video_shader_driver_num_null; - if (!current_shader->get_current_shader) - current_shader->get_current_shader= video_shader_driver_get_current_shader_null; - if (!current_shader->get_feedback_pass) - current_shader->get_feedback_pass = video_shader_driver_get_feedback_pass_null; -} - -/* Finds first suitable shader context driver. */ -bool video_shader_driver_init_first(void) -{ - current_shader = (shader_backend_t*)shader_ctx_drivers[0]; - video_shader_driver_reset_to_defaults(); - return true; -} - -bool video_shader_driver_init(video_shader_ctx_init_t *init) -{ - void *tmp = NULL; - - if (!init->shader || !init->shader->init) - { - init->shader = video_shader_set_backend(init->shader_type); - - if (!init->shader) - return false; - } - - tmp = init->shader->init(init->data, init->path); - - if (!tmp) - return false; - - shader_data = tmp; - current_shader = (shader_backend_t*)init->shader; - video_shader_driver_reset_to_defaults(); - - return true; -} - -bool video_shader_driver_get_feedback_pass(unsigned *data) -{ - return current_shader->get_feedback_pass(shader_data, data); -} - -bool video_shader_driver_mipmap_input(unsigned *index) -{ - return current_shader->mipmap_input(shader_data, *index); -} - -bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler) -{ - if (!scaler || !scaler->scale) - return false; - - scaler->scale->valid = false; - - current_shader->shader_scale(shader_data, scaler->idx, scaler->scale); - return true; -} - -bool video_shader_driver_info(video_shader_ctx_info_t *shader_info) -{ - if (!shader_info) - return false; - - shader_info->num = current_shader->num_shaders(shader_data); - - return true; -} - -bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter) -{ - return (filter) ? current_shader->filter_type(shader_data, - filter->index, filter->smooth) : false; -} - -bool video_shader_driver_compile_program(struct shader_program_info *program_info) -{ - return (program_info) ? current_shader->compile_program(program_info->data, - program_info->idx, NULL, program_info) : false; -} - -bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap) -{ - wrap->type = current_shader->wrap_type(shader_data, wrap->idx); - return true; -} diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h deleted file mode 100644 index 5a319cd6a5..0000000000 --- a/gfx/video_shader_driver.h +++ /dev/null @@ -1,330 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2011-2017 - Daniel De Matteis - * - * 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 VIDEO_SHADER_DRIVER_H__ -#define VIDEO_SHADER_DRIVER_H__ - -#include -#include - -#include - -#include "video_coord_array.h" - -#ifdef HAVE_CONFIG_H -#include "../config.h" -#endif - -#if defined(HAVE_CG) || defined(HAVE_HLSL) || defined(HAVE_GLSL) || defined(HAVE_SLANG) -#ifndef HAVE_SHADER_MANAGER -#define HAVE_SHADER_MANAGER -#endif - -#include "video_shader_parse.h" - -#define VIDEO_SHADER_STOCK_BLEND (GFX_MAX_SHADERS - 1) -#define VIDEO_SHADER_MENU (GFX_MAX_SHADERS - 2) -#define VIDEO_SHADER_MENU_2 (GFX_MAX_SHADERS - 3) -#define VIDEO_SHADER_MENU_3 (GFX_MAX_SHADERS - 4) -#define VIDEO_SHADER_MENU_4 (GFX_MAX_SHADERS - 5) -#define VIDEO_SHADER_MENU_5 (GFX_MAX_SHADERS - 6) - -#endif - -#if defined(_XBOX360) -#define DEFAULT_SHADER_TYPE RARCH_SHADER_HLSL -#elif defined(__PSL1GHT__) || defined(HAVE_OPENGLES2) || defined(HAVE_GLSL) -#define DEFAULT_SHADER_TYPE RARCH_SHADER_GLSL -#elif defined(__CELLOS_LV2__) || defined(HAVE_CG) -#define DEFAULT_SHADER_TYPE RARCH_SHADER_CG -#else -#define DEFAULT_SHADER_TYPE RARCH_SHADER_NONE -#endif - -#include "video_driver.h" - -RETRO_BEGIN_DECLS - -enum shader_uniform_type -{ - UNIFORM_1F = 0, - UNIFORM_2F, - UNIFORM_3F, - UNIFORM_4F, - UNIFORM_1FV, - UNIFORM_2FV, - UNIFORM_3FV, - UNIFORM_4FV, - UNIFORM_1I -}; - -enum shader_program_type -{ - SHADER_PROGRAM_VERTEX = 0, - SHADER_PROGRAM_FRAGMENT, - SHADER_PROGRAM_COMBINED -}; - -struct shader_program_info -{ - void *data; - const char *vertex; - const char *fragment; - const char *combined; - unsigned idx; - bool is_file; -}; - -struct uniform_info -{ - unsigned type; /* shader uniform type */ - bool enabled; - - int32_t location; - int32_t count; - - struct - { - enum shader_program_type type; - const char *ident; - uint32_t idx; - bool add_prefix; - bool enable; - } lookup; - - struct - { - struct - { - intptr_t v0; - intptr_t v1; - intptr_t v2; - intptr_t v3; - } integer; - - intptr_t *integerv; - - struct - { - uintptr_t v0; - uintptr_t v1; - uintptr_t v2; - uintptr_t v3; - } unsigned_integer; - - uintptr_t *unsigned_integerv; - - struct - { - float v0; - float v1; - float v2; - float v3; - } f; - - float *floatv; - } result; -}; - -typedef struct shader_backend -{ - void *(*init)(void *data, const char *path); - void (*deinit)(void *data); - - /* Set shader parameters. */ - void (*set_params)(void *data, void *shader_data, - unsigned width, unsigned height, - unsigned tex_width, unsigned tex_height, - unsigned out_width, unsigned out_height, - unsigned frame_counter, - const void *info, - const void *prev_info, - const void *feedback_info, - const void *fbo_info, unsigned fbo_info_cnt); - - void (*set_uniform_parameter)(void *data, struct uniform_info *param, - void *uniform_data); - - /* Compile a shader program. */ - bool (*compile_program)(void *data, unsigned idx, - void *program_data, struct shader_program_info *program_info); - - /* Use a shader program specified by variable 'index'. */ - void (*use)(void *data, void *shader_data, unsigned index, bool set_active); - - /* Returns the number of currently loaded shaders. */ - unsigned (*num_shaders)(void *data); - - bool (*filter_type)(void *data, unsigned index, bool *smooth); - enum gfx_wrap_type (*wrap_type)(void *data, unsigned index); - void (*shader_scale)(void *data, - unsigned index, struct gfx_fbo_scale *scale); - bool (*set_coords)(void *handle_data, - void *shader_data, const struct video_coords *coords); - bool (*set_coords_fallback)(void *handle_data, - void *shader_data, const struct video_coords *coords); - bool (*set_mvp)(void *data, void *shader_data, - const math_matrix_4x4 *mat); - unsigned (*get_prev_textures)(void *data); - bool (*get_feedback_pass)(void *data, unsigned *pass); - bool (*mipmap_input)(void *data, unsigned index); - - struct video_shader *(*get_current_shader)(void *data); - - enum rarch_shader_type type; - - /* Human readable string. */ - const char *ident; -} shader_backend_t; - -typedef struct video_shader_ctx_init -{ - enum rarch_shader_type shader_type; - const shader_backend_t *shader; - struct - { - bool core_context_enabled; - } gl; - void *data; - const char *path; -} video_shader_ctx_init_t; - -typedef struct video_shader_ctx_params -{ - void *data; - unsigned width; - unsigned height; - unsigned tex_width; - unsigned tex_height; - unsigned out_width; - unsigned out_height; - unsigned frame_counter; - const void *info; - const void *prev_info; - const void *feedback_info; - const void *fbo_info; - unsigned fbo_info_cnt; -} video_shader_ctx_params_t; - -typedef struct video_shader_ctx_coords -{ - void *handle_data; - const void *data; -} video_shader_ctx_coords_t; - -typedef struct video_shader_ctx_scale -{ - unsigned idx; - struct gfx_fbo_scale *scale; -} video_shader_ctx_scale_t; - -typedef struct video_shader_ctx_info -{ - bool set_active; - unsigned num; - unsigned idx; - void *data; -} video_shader_ctx_info_t; - -typedef struct video_shader_ctx_mvp -{ - void *data; - const math_matrix_4x4 *matrix; -} video_shader_ctx_mvp_t; - -typedef struct video_shader_ctx_filter -{ - unsigned index; - bool *smooth; -} video_shader_ctx_filter_t; - -typedef struct video_shader_ctx_wrap -{ - unsigned idx; - enum gfx_wrap_type type; -} video_shader_ctx_wrap_t; - -typedef struct video_shader_ctx -{ - struct video_shader *data; -} video_shader_ctx_t; - -typedef struct video_shader_ctx_ident -{ - const char *ident; -} video_shader_ctx_ident_t; - -typedef struct video_shader_ctx_texture -{ - unsigned id; -} video_shader_ctx_texture_t; - -bool video_shader_driver_get_prev_textures(video_shader_ctx_texture_t *texture); - -bool video_shader_driver_get_ident(video_shader_ctx_ident_t *ident); - -bool video_shader_driver_get_current_shader(video_shader_ctx_t *shader); - -bool video_shader_driver_direct_get_current_shader(video_shader_ctx_t *shader); - -bool video_shader_driver_deinit(void); - -#define video_shader_driver_set_parameter(param) \ - if (current_shader && current_shader->set_uniform_parameter) \ - current_shader->set_uniform_parameter(shader_data, ¶m, NULL) - -#define video_shader_driver_set_parameters(params) \ - current_shader->set_params(params.data, shader_data, params.width, params.height, params.tex_width, params.tex_height, params.out_width, params.out_height, params.frame_counter, params.info, params.prev_info, params.feedback_info, params.fbo_info, params.fbo_info_cnt) - -bool video_shader_driver_init_first(void); - -bool video_shader_driver_init(video_shader_ctx_init_t *init); - -bool video_shader_driver_get_feedback_pass(unsigned *data); - -bool video_shader_driver_mipmap_input(unsigned *index); - -#define video_shader_driver_set_coords(coords) \ - if (!current_shader->set_coords(coords.handle_data, shader_data, (const struct video_coords*)coords.data) && current_shader->set_coords_fallback) \ - current_shader->set_coords_fallback(coords.handle_data, shader_data, (const struct video_coords*)coords.data) - -bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler); - -bool video_shader_driver_info(video_shader_ctx_info_t *shader_info); - -#define video_shader_driver_set_mvp(mvp) \ - if (mvp.matrix) \ - current_shader->set_mvp(mvp.data, shader_data, mvp.matrix) \ - -bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter); - -bool video_shader_driver_compile_program(struct shader_program_info *program_info); - -#define video_shader_driver_use(shader_info) \ - current_shader->use(shader_info.data, shader_data, shader_info.idx, shader_info.set_active) - -bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap); - -extern shader_backend_t *current_shader; -extern void *shader_data; - -extern const shader_backend_t gl_glsl_backend; -extern const shader_backend_t hlsl_backend; -extern const shader_backend_t gl_cg_backend; -extern const shader_backend_t shader_null_backend; - -RETRO_END_DECLS - -#endif diff --git a/gfx/video_thread_wrapper.c b/gfx/video_thread_wrapper.c index 2edb665e47..fc905d16c1 100644 --- a/gfx/video_thread_wrapper.c +++ b/gfx/video_thread_wrapper.c @@ -25,7 +25,6 @@ #include "video_thread_wrapper.h" #include "font_driver.h" -#include "video_shader_driver.h" #include "../retroarch.h" #include "../verbosity.h" diff --git a/griffin/griffin.c b/griffin/griffin.c index 94438ce0cc..2aec848dd7 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -224,10 +224,8 @@ VIDEO CONTEXT VIDEO SHADERS ============================================================ */ -#ifdef HAVE_SHADERS #include "../gfx/video_shader_driver.c" #include "../gfx/video_shader_parse.c" - #include "../gfx/drivers_shader/shader_null.c" #ifdef HAVE_CG @@ -244,8 +242,6 @@ VIDEO SHADERS #include "../gfx/drivers_shader/shader_glsl.c" #endif -#endif - /*============================================================ VIDEO IMAGE ============================================================ */ diff --git a/menu/cbs/menu_cbs_start.c b/menu/cbs/menu_cbs_start.c index 1cddd253a0..8bf62dc570 100644 --- a/menu/cbs/menu_cbs_start.c +++ b/menu/cbs/menu_cbs_start.c @@ -36,7 +36,7 @@ #include "../../retroarch.h" #include "../../performance_counters.h" -#include "../../gfx/video_shader_driver.h" +#include "../../gfx/video_driver.h" #include "../../input/input_config.h" #include "../../input/input_remapping.h" diff --git a/menu/drivers/nuklear/nk_common.c b/menu/drivers/nuklear/nk_common.c index e0c6360223..d922743a14 100644 --- a/menu/drivers/nuklear/nk_common.c +++ b/menu/drivers/nuklear/nk_common.c @@ -30,7 +30,7 @@ #include "nk_common.h" #include "../../menu_display.h" -#include "../../../gfx/video_shader_driver.h" +#include "../../../gfx/video_driver.h" #ifdef HAVE_GLSL #include "../../../gfx/drivers/gl_shaders/pipeline_nuklear.glsl.vert.h" diff --git a/menu/drivers_display/menu_display_ctr.c b/menu/drivers_display/menu_display_ctr.c index 427ee610c6..bbaca7a280 100644 --- a/menu/drivers_display/menu_display_ctr.c +++ b/menu/drivers_display/menu_display_ctr.c @@ -24,7 +24,6 @@ #include "../../retroarch.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_driver.h" -#include "../../gfx/video_shader_driver.h" #include "../../gfx/common/ctr_common.h" #include "../../gfx/drivers/ctr_gu.h" #include "../../ctr/gpu_old.h" diff --git a/menu/drivers_display/menu_display_gl.c b/menu/drivers_display/menu_display_gl.c index 9b591b02a1..2d09dce968 100644 --- a/menu/drivers_display/menu_display_gl.c +++ b/menu/drivers_display/menu_display_gl.c @@ -22,7 +22,6 @@ #include "../../retroarch.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_driver.h" -#include "../../gfx/video_shader_driver.h" #include "../../gfx/common/gl_common.h" #include "../menu_display.h" diff --git a/menu/drivers_display/menu_display_vita2d.c b/menu/drivers_display/menu_display_vita2d.c index 4ef6fcab5b..aad05a106b 100644 --- a/menu/drivers_display/menu_display_vita2d.c +++ b/menu/drivers_display/menu_display_vita2d.c @@ -26,7 +26,6 @@ #include "../../retroarch.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_driver.h" -#include "../../gfx/video_shader_driver.h" #include "../../gfx/common/vita2d_common.h" #include "../../defines/psp_defines.h" diff --git a/menu/drivers_display/menu_display_vulkan.c b/menu/drivers_display/menu_display_vulkan.c index 3612e5e9c3..5b7dc02663 100644 --- a/menu/drivers_display/menu_display_vulkan.c +++ b/menu/drivers_display/menu_display_vulkan.c @@ -25,7 +25,6 @@ #include "../../gfx/font_driver.h" #include "../../gfx/video_driver.h" #include "../../gfx/common/vulkan_common.h" -#include "../../gfx/video_shader_driver.h" /* Will do Y-flip later, but try to make it similar to GL. */ static const float vk_vertexes[] = { diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 79c8f3d67e..c9570ac6cc 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -68,7 +68,7 @@ #include "../core.h" #include "../frontend/frontend_driver.h" #include "../ui/ui_companion_driver.h" -#include "../gfx/video_shader_driver.h" +#include "../gfx/video_driver.h" #include "../config.features.h" #include "../version_git.h" #include "../input/input_config.h" diff --git a/menu/menu_driver.h b/menu/menu_driver.h index b220947a95..9e0f10c13a 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -31,7 +31,7 @@ #include "menu_input.h" #include "menu_entries.h" -#include "../gfx/video_shader_driver.h" +#include "../gfx/video_driver.h" RETRO_BEGIN_DECLS diff --git a/menu/menu_shader.h b/menu/menu_shader.h index 1c14e69b49..76f1f5ad84 100644 --- a/menu/menu_shader.h +++ b/menu/menu_shader.h @@ -19,7 +19,7 @@ #include -#include "../gfx/video_shader_driver.h" +#include "../gfx/video_driver.h" RETRO_BEGIN_DECLS diff --git a/ui/drivers/ui_win32.c b/ui/drivers/ui_win32.c index 4fc3ac32fe..e5943ec2b2 100644 --- a/ui/drivers/ui_win32.c +++ b/ui/drivers/ui_win32.c @@ -51,7 +51,6 @@ #include "../../paths.h" #include "../../retroarch.h" #include "../../gfx/video_driver.h" -#include "../../gfx/video_shader_driver.h" #include "../../tasks/tasks_internal.h" #include "../../gfx/common/gl_common.h"