Fallback to graphics shader instead of compute shader if the gpu doesn't support compute shader (either glsl 420 or opengl es glsl 310)

This commit is contained in:
dec05eba
2025-04-06 21:52:15 +02:00
parent 9de04e74ea
commit 5029906c34
6 changed files with 552 additions and 123 deletions

View File

@@ -6,7 +6,8 @@
#include "vec2.h"
#include <stdbool.h>
#define GSR_COLOR_CONVERSION_MAX_SHADERS 12
#define GSR_COLOR_CONVERSION_MAX_COMPUTE_SHADERS 12
#define GSR_COLOR_CONVERSION_MAX_GRAPHICS_SHADERS 6
#define GSR_COLOR_CONVERSION_MAX_FRAMEBUFFERS 2
typedef enum {
@@ -37,12 +38,17 @@ typedef enum {
GSR_ROT_270
} gsr_rotation;
typedef struct {
int rotation_matrix;
int offset;
} gsr_color_graphics_uniforms;
typedef struct {
int rotation_matrix;
int source_position;
int target_position;
int scale;
} gsr_color_uniforms;
} gsr_color_compute_uniforms;
typedef struct {
gsr_egl *egl;
@@ -58,8 +64,15 @@ typedef struct {
typedef struct {
gsr_color_conversion_params params;
gsr_color_uniforms uniforms[GSR_COLOR_CONVERSION_MAX_SHADERS];
gsr_shader shaders[GSR_COLOR_CONVERSION_MAX_SHADERS];
gsr_color_compute_uniforms compute_uniforms[GSR_COLOR_CONVERSION_MAX_COMPUTE_SHADERS];
gsr_shader compute_shaders[GSR_COLOR_CONVERSION_MAX_COMPUTE_SHADERS];
/* These are only loader if compute shaders (of the same type) fail to load */
gsr_color_graphics_uniforms graphics_uniforms[GSR_COLOR_CONVERSION_MAX_GRAPHICS_SHADERS];
gsr_shader graphics_shaders[GSR_COLOR_CONVERSION_MAX_GRAPHICS_SHADERS];
bool compute_shaders_failed_to_load;
bool external_compute_shaders_failed_to_load;
unsigned int framebuffers[GSR_COLOR_CONVERSION_MAX_FRAMEBUFFERS];

View File

@@ -1,6 +1,8 @@
#ifndef GSR_SHADER_H
#define GSR_SHADER_H
#include <stdbool.h>
typedef struct gsr_egl gsr_egl;
typedef struct {
@@ -16,4 +18,6 @@ int gsr_shader_bind_attribute_location(gsr_shader *self, const char *attribute,
void gsr_shader_use(gsr_shader *self);
void gsr_shader_use_none(gsr_shader *self);
void gsr_shader_enable_debug_output(bool enable);
#endif /* GSR_SHADER_H */