mirror of
https://github.com/libretro/RetroArch
synced 2025-03-02 19:13:34 +00:00
(GL) Move GL-only shader code to gl.c
This commit is contained in:
parent
7fedabee4b
commit
5102eff399
@ -235,7 +235,6 @@ OBJ += frontend/frontend.o \
|
||||
tasks/task_screenshot.o \
|
||||
tasks/task_powerstate.o \
|
||||
$(LIBRETRO_COMM_DIR)/gfx/scaler/scaler.o \
|
||||
gfx/drivers_shader/shader_null.o \
|
||||
gfx/video_shader_parse.o \
|
||||
$(LIBRETRO_COMM_DIR)/gfx/scaler/pixconv.o \
|
||||
$(LIBRETRO_COMM_DIR)/gfx/scaler/scaler_int.o \
|
||||
|
@ -82,6 +82,16 @@
|
||||
coords[5] = yamt; \
|
||||
coords[7] = yamt
|
||||
|
||||
static const shader_backend_t *shader_ctx_drivers[] = {
|
||||
#ifdef HAVE_GLSL
|
||||
&gl_glsl_backend,
|
||||
#endif
|
||||
#ifdef HAVE_CG
|
||||
&gl_cg_backend,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct video_ortho default_ortho = {0, 1, 0, 1, -1, 1};
|
||||
|
||||
/* Used for the last pass when rendering to the back buffer. */
|
||||
@ -230,6 +240,37 @@ void cocoagl_bind_game_view_fbo(void);
|
||||
#define gl2_renderchain_bind_backbuffer() gl2_bind_fb(0)
|
||||
#endif
|
||||
|
||||
static bool gl_shader_info(gl_t *gl,
|
||||
video_shader_ctx_info_t *shader_info)
|
||||
{
|
||||
if (!shader_info)
|
||||
return false;
|
||||
|
||||
shader_info->num = gl->shader->num_shaders(gl->shader_data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool gl_shader_scale(gl_t *gl,
|
||||
video_shader_ctx_scale_t *scaler)
|
||||
{
|
||||
if (!scaler || !scaler->scale)
|
||||
return false;
|
||||
|
||||
scaler->scale->valid = false;
|
||||
|
||||
gl->shader->shader_scale(gl->shader_data,
|
||||
scaler->idx, scaler->scale);
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *gl_shader_get_ident(gl_t *gl)
|
||||
{
|
||||
if (!gl || !gl->shader)
|
||||
return "N/A";
|
||||
return gl->shader->ident;
|
||||
}
|
||||
|
||||
static void gl2_renderchain_convert_geometry(
|
||||
struct video_fbo_rect *fbo_rect,
|
||||
struct gfx_fbo_scale *fbo_scale,
|
||||
@ -1091,7 +1132,7 @@ static void gl2_renderchain_init(
|
||||
video_shader_ctx_info_t shader_info;
|
||||
struct gfx_fbo_scale scale, scale_last;
|
||||
|
||||
if (!video_shader_driver_info(&shader_info))
|
||||
if (!gl_shader_info(gl, &shader_info))
|
||||
return;
|
||||
|
||||
if (!gl || shader_info.num == 0)
|
||||
@ -1102,12 +1143,12 @@ static void gl2_renderchain_init(
|
||||
scaler.idx = 1;
|
||||
scaler.scale = &scale;
|
||||
|
||||
video_shader_driver_scale(&scaler);
|
||||
gl_shader_scale(gl, &scaler);
|
||||
|
||||
scaler.idx = shader_info.num;
|
||||
scaler.scale = &scale_last;
|
||||
|
||||
video_shader_driver_scale(&scaler);
|
||||
gl_shader_scale(gl, &scaler);
|
||||
|
||||
/* we always want FBO to be at least initialized on startup for consoles */
|
||||
if (shader_info.num == 1 && !scale.valid)
|
||||
@ -1138,7 +1179,7 @@ static void gl2_renderchain_init(
|
||||
scaler.idx = i + 1;
|
||||
scaler.scale = &chain->fbo_scale[i];
|
||||
|
||||
video_shader_driver_scale(&scaler);
|
||||
gl_shader_scale(gl, &scaler);
|
||||
|
||||
if (!chain->fbo_scale[i].valid)
|
||||
{
|
||||
@ -3231,7 +3272,6 @@ static void *gl_init(const video_info_t *video,
|
||||
gfx_ctx_input_t inp;
|
||||
unsigned full_x, full_y;
|
||||
video_shader_ctx_info_t shader_info;
|
||||
video_shader_ctx_ident_t ident_info;
|
||||
settings_t *settings = config_get_ptr();
|
||||
int interval = 0;
|
||||
unsigned mip_level = 0;
|
||||
@ -3404,15 +3444,17 @@ static void *gl_init(const video_info_t *video,
|
||||
|
||||
gl->white_color_ptr = white_color;
|
||||
|
||||
if (!video_shader_driver_init_first())
|
||||
gl->shader = (shader_backend_t*)shader_ctx_drivers[0];
|
||||
|
||||
if (!video_shader_driver_init_first(gl->shader))
|
||||
{
|
||||
RARCH_ERR("[GL:]: Shader driver initialization failed.\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
video_shader_driver_get_ident(&ident_info);
|
||||
gl_shader_get_ident(gl);
|
||||
|
||||
RARCH_LOG("[GL]: Default shader backend found: %s.\n", ident_info.ident);
|
||||
RARCH_LOG("[GL]: Default shader backend found: %s.\n", gl_shader_get_ident(gl));
|
||||
|
||||
if (!gl_shader_init(gl, ctx_driver, hwr))
|
||||
{
|
||||
@ -3426,7 +3468,7 @@ static void *gl_init(const video_info_t *video,
|
||||
gl->textures = MAX(minimum + 1, gl->textures);
|
||||
}
|
||||
|
||||
if (!video_shader_driver_info(&shader_info))
|
||||
if (!gl_shader_info(gl, &shader_info))
|
||||
{
|
||||
RARCH_ERR("[GL]: Shader driver info check failed.\n");
|
||||
goto error;
|
||||
|
@ -1,99 +0,0 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <compat/strl.h>
|
||||
#include <compat/posix_string.h>
|
||||
#include <boolean.h>
|
||||
#include <gfx/math/matrix_4x4.h>
|
||||
#include <string/stdstring.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "../../config.h"
|
||||
#endif
|
||||
|
||||
#include "../video_driver.h"
|
||||
|
||||
typedef struct null_shader_data
|
||||
{
|
||||
void *empty;
|
||||
} null_shader_data_t;
|
||||
|
||||
static void shader_null_deinit(void *data)
|
||||
{
|
||||
null_shader_data_t *null_shader = (null_shader_data_t*)data;
|
||||
if (!null_shader)
|
||||
return;
|
||||
|
||||
free(null_shader);
|
||||
}
|
||||
|
||||
static void *shader_null_init(void *data, const char *path)
|
||||
{
|
||||
null_shader_data_t *null_shader = (null_shader_data_t*)
|
||||
calloc(1, sizeof(*null_shader));
|
||||
|
||||
if (!null_shader)
|
||||
return NULL;
|
||||
|
||||
return null_shader;
|
||||
}
|
||||
|
||||
static void shader_null_set_uniform_parameter(
|
||||
void *data,
|
||||
struct uniform_info *param,
|
||||
void *uniform_data)
|
||||
{
|
||||
}
|
||||
|
||||
static unsigned shader_null_get_prev_textures(void *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool shader_null_compile_program(
|
||||
void *data,
|
||||
unsigned idx,
|
||||
void *program_data,
|
||||
struct shader_program_info *program_info)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
const shader_backend_t shader_null_backend = {
|
||||
shader_null_init,
|
||||
NULL,
|
||||
shader_null_deinit,
|
||||
NULL,
|
||||
shader_null_set_uniform_parameter,
|
||||
shader_null_compile_program,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
shader_null_get_prev_textures,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
RARCH_SHADER_NONE,
|
||||
"nullshader"
|
||||
};
|
@ -425,16 +425,6 @@ 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
|
||||
&shader_null_backend,
|
||||
NULL
|
||||
};
|
||||
|
||||
bool video_driver_started_fullscreen(void)
|
||||
{
|
||||
@ -3458,14 +3448,6 @@ static const shader_backend_t *video_shader_set_backend(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool video_shader_driver_get_ident(video_shader_ctx_ident_t *ident)
|
||||
{
|
||||
if (!ident || !current_shader)
|
||||
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);
|
||||
@ -3529,9 +3511,12 @@ static void video_shader_driver_reset_to_defaults(void)
|
||||
}
|
||||
|
||||
/* Finds first suitable shader context driver. */
|
||||
bool video_shader_driver_init_first(void)
|
||||
bool video_shader_driver_init_first(const void *data)
|
||||
{
|
||||
current_shader = (shader_backend_t*)shader_ctx_drivers[0];
|
||||
shader_backend_t *ptr = (shader_backend_t*)data;
|
||||
if (!ptr)
|
||||
return false;
|
||||
current_shader = ptr;
|
||||
video_shader_driver_reset_to_defaults();
|
||||
return true;
|
||||
}
|
||||
@ -3572,28 +3557,6 @@ bool video_shader_driver_init(video_shader_ctx_init_t *init)
|
||||
return true;
|
||||
}
|
||||
|
||||
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(current_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(current_shader_data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void video_driver_set_coords(video_shader_ctx_coords_t *coords)
|
||||
{
|
||||
if (current_shader && current_shader->set_coords)
|
||||
|
@ -311,11 +311,6 @@ 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;
|
||||
@ -1180,22 +1175,16 @@ enum gfx_ctx_api video_context_driver_get_api(void);
|
||||
|
||||
void video_context_driver_free(void);
|
||||
|
||||
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_deinit(void);
|
||||
|
||||
bool video_shader_driver_init_first(void);
|
||||
bool video_shader_driver_init_first(const void *data);
|
||||
|
||||
bool video_shader_driver_init(video_shader_ctx_init_t *init);
|
||||
|
||||
void video_driver_set_coords(video_shader_ctx_coords_t *coords);
|
||||
|
||||
bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler);
|
||||
|
||||
bool video_shader_driver_info(video_shader_ctx_info_t *shader_info);
|
||||
|
||||
void video_driver_set_mvp(video_shader_ctx_mvp_t *mvp);
|
||||
|
||||
float video_driver_get_refresh_rate(void);
|
||||
@ -1267,7 +1256,6 @@ extern const gfx_ctx_driver_t gfx_ctx_null;
|
||||
|
||||
extern const shader_backend_t gl_glsl_backend;
|
||||
extern const shader_backend_t gl_cg_backend;
|
||||
extern const shader_backend_t shader_null_backend;
|
||||
|
||||
RETRO_END_DECLS
|
||||
|
||||
|
@ -289,7 +289,6 @@ VIDEO CONTEXT
|
||||
VIDEO SHADERS
|
||||
============================================================ */
|
||||
#include "../gfx/video_shader_parse.c"
|
||||
#include "../gfx/drivers_shader/shader_null.c"
|
||||
|
||||
#ifdef HAVE_CG
|
||||
#ifdef HAVE_OPENGL
|
||||
|
Loading…
x
Reference in New Issue
Block a user