aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2025-04-06 21:52:15 +0200
committerdec05eba <dec05eba@protonmail.com>2025-04-06 21:52:15 +0200
commit5029906c344ea39c13c9875d89da0f6b4a8595aa (patch)
tree1f85799d2e51d676e8cf571f94f12a3a20e04446 /include
parent9de04e74eaab2748318198d2b8fa273c3a79fe12 (diff)
Fallback to graphics shader instead of compute shader if the gpu doesn't support compute shader (either glsl 420 or opengl es glsl 310)
Diffstat (limited to 'include')
-rw-r--r--include/color_conversion.h21
-rw-r--r--include/shader.h4
2 files changed, 21 insertions, 4 deletions
diff --git a/include/color_conversion.h b/include/color_conversion.h
index 4c3b615..a8462c0 100644
--- a/include/color_conversion.h
+++ b/include/color_conversion.h
@@ -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 {
@@ -39,10 +40,15 @@ typedef enum {
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];
diff --git a/include/shader.h b/include/shader.h
index 8bc1104..285758d 100644
--- a/include/shader.h
+++ b/include/shader.h
@@ -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 */