1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
diff --git a/src/dispatch.c b/src/dispatch.c
index 218b556..067efc7 100644
--- a/src/dispatch.c
+++ b/src/dispatch.c
@@ -29,6 +29,7 @@
enum {
TMP_PRELUDE, // GLSL version, global definitions, etc.
+ TMP_UNIFORMS,
TMP_MAIN, // main GLSL shader body
TMP_VERT_HEAD, // vertex shader inputs/outputs
TMP_VERT_BODY, // vertex shader body
@@ -304,15 +305,16 @@ static void generate_shaders(pl_dispatch dp,
pl_str_builder shader_body = sh_finalize_internal(sh);
pl_str_builder pre = dp->tmp[TMP_PRELUDE];
+ pl_str_builder uni = dp->tmp[TMP_UNIFORMS];
ADD(pre, "#version %d%s\n", gpu->glsl.version,
(gpu->glsl.gles && gpu->glsl.version > 100) ? " es" : "");
if (pass_params->type == PL_PASS_COMPUTE)
- ADD(pre, "#extension GL_ARB_compute_shader : enable\n");
+ ADD(uni, "#extension GL_ARB_compute_shader : enable\n");
// Enable this unconditionally if the GPU supports it, since we have no way
// of knowing whether subgroups are being used or not
if (gpu->glsl.subgroup_size) {
- ADD(pre, "#extension GL_KHR_shader_subgroup_basic : enable \n"
+ ADD(uni, "#extension GL_KHR_shader_subgroup_basic : enable \n"
"#extension GL_KHR_shader_subgroup_vote : enable \n"
"#extension GL_KHR_shader_subgroup_arithmetic : enable \n"
"#extension GL_KHR_shader_subgroup_ballot : enable \n"
@@ -360,24 +362,24 @@ static void generate_shaders(pl_dispatch dp,
}
if (has_img && !gpu->glsl.gles)
- ADD(pre, "#extension GL_ARB_shader_image_load_store : enable\n");
+ ADD(uni, "#extension GL_ARB_shader_image_load_store : enable\n");
if (has_ubo)
- ADD(pre, "#extension GL_ARB_uniform_buffer_object : enable\n");
+ ADD(uni, "#extension GL_ARB_uniform_buffer_object : enable\n");
if (has_ssbo)
- ADD(pre, "#extension GL_ARB_shader_storage_buffer_object : enable\n");
+ ADD(uni, "#extension GL_ARB_shader_storage_buffer_object : enable\n");
if (has_texel)
- ADD(pre, "#extension GL_ARB_texture_buffer_object : enable\n");
+ ADD(uni, "#extension GL_ARB_texture_buffer_object : enable\n");
if (has_ext) {
if (gpu->glsl.version >= 300) {
- ADD(pre, "#extension GL_OES_EGL_image_external_essl3 : enable\n");
+ ADD(uni, "#extension GL_OES_EGL_image_external_essl3 : enable\n");
} else {
- ADD(pre, "#extension GL_OES_EGL_image_external : enable\n");
+ ADD(uni, "#extension GL_OES_EGL_image_external : enable\n");
}
}
if (has_nofmt)
- ADD(pre, "#extension GL_EXT_shader_image_load_formatted : enable\n");
+ ADD(uni, "#extension GL_EXT_shader_image_load_formatted : enable\n");
if (has_gather && !gpu->glsl.gles)
- ADD(pre, "#extension GL_ARB_texture_gather : enable\n");
+ ADD(uni, "#extension GL_ARB_texture_gather : enable\n");
if (gpu->glsl.gles) {
// Use 32-bit precision for floats if possible
@@ -527,12 +529,12 @@ static void generate_shaders(pl_dispatch dp,
case PL_DESC_BUF_UNIFORM:
if (gpu->glsl.vulkan) {
- ADD(pre, "layout(std140, binding=%d) ", desc->binding);
+ ADD(uni, "layout(std140, binding=%d) ", desc->binding);
} else {
- ADD(pre, "layout(std140) ");
+ ADD(uni, "layout(std140) ");
}
- ADD(pre, "uniform "$" ", sh_ident_unpack(desc->name));
- add_buffer_vars(dp, tmp, pre, sd->buffer_vars, sd->num_buffer_vars);
+ ADD(uni, "uniform "$" ", sh_ident_unpack(desc->name));
+ add_buffer_vars(dp, tmp, uni, sd->buffer_vars, sd->num_buffer_vars);
break;
case PL_DESC_BUF_STORAGE:
@@ -599,6 +601,7 @@ static void generate_shaders(pl_dispatch dp,
pl_str_builder glsl = dp->tmp[TMP_MAIN];
ADD_CAT(glsl, pre);
+ ADD_CAT(glsl, uni);
switch(pass_params->type) {
case PL_PASS_RASTER: {
|