host_shaders: Remove dependency on shaderSampledImageArrayDynamicIndexing

This commit is contained in:
GPUCode 2024-01-25 00:50:16 +02:00
parent 549fdd0736
commit 20ef8e47e6
3 changed files with 42 additions and 6 deletions

View file

@ -20,6 +20,18 @@ layout (push_constant, std140) uniform DrawInfo {
layout (set = 0, binding = 0) uniform sampler2D screen_textures[3];
void main() {
color = texture(screen_textures[screen_id_l], frag_tex_coord);
// Not all vulkan drivers support shaderSampledImageArrayDynamicIndexing, so index manually.
vec4 GetScreen(int screen_id) {
switch (screen_id) {
case 0:
return texture(screen_textures[0], frag_tex_coord);
case 1:
return texture(screen_textures[1], frag_tex_coord);
case 2:
return texture(screen_textures[2], frag_tex_coord);
}
}
void main() {
color = GetScreen(screen_id_l);
}

View file

@ -32,8 +32,20 @@ layout (push_constant, std140) uniform DrawInfo {
layout (set = 0, binding = 0) uniform sampler2D screen_textures[3];
// Not all vulkan drivers support shaderSampledImageArrayDynamicIndexing, so index manually.
vec4 GetScreen(int screen_id) {
switch (screen_id) {
case 0:
return texture(screen_textures[0], frag_tex_coord);
case 1:
return texture(screen_textures[1], frag_tex_coord);
case 2:
return texture(screen_textures[2], frag_tex_coord);
}
}
void main() {
vec4 color_tex_l = texture(screen_textures[screen_id_l], frag_tex_coord);
vec4 color_tex_r = texture(screen_textures[screen_id_r], frag_tex_coord);
vec4 color_tex_l = GetScreen(screen_id_l);
vec4 color_tex_r = GetScreen(screen_id_r);
color = vec4(color_tex_l.rgb*l+color_tex_r.rgb*r, color_tex_l.a);
}

View file

@ -20,10 +20,22 @@ layout (push_constant, std140) uniform DrawInfo {
layout (set = 0, binding = 0) uniform sampler2D screen_textures[3];
// Not all vulkan drivers support shaderSampledImageArrayDynamicIndexing, so index manually.
vec4 GetScreen(int screen_id) {
switch (screen_id) {
case 0:
return texture(screen_textures[0], frag_tex_coord);
case 1:
return texture(screen_textures[1], frag_tex_coord);
case 2:
return texture(screen_textures[2], frag_tex_coord);
}
}
void main() {
float screen_row = o_resolution.x * frag_tex_coord.x;
if (int(screen_row) % 2 == reverse_interlaced)
color = texture(screen_textures[screen_id_l], frag_tex_coord);
color = GetScreen(screen_id_l);
else
color = texture(screen_textures[screen_id_r], frag_tex_coord);
color = GetScreen(screen_id_r);
}