bjin / mpv-prescalers

prescalers for mpv, as user shaders
GNU Lesser General Public License v3.0
355 stars 34 forks source link

compute/ravu-r3-x3 fails with libplacebo-3.120.3 and shaderc-2022.1 #47

Closed NHOrus closed 12 months ago

NHOrus commented 2 years ago

Throws error:

[vo/gpu/vulkan/libplacebo] shaderc output:
[vo/gpu/vulkan/libplacebo] input:9: warning: '#extension' : extension not supported: GL_ARB_texture_buffer_object
[vo/gpu/vulkan/libplacebo] shaderc: internal error: compilation succeeded but failed to optimize: In SPIR-V 1.6 or later, sampled image dimension must not be Buffer
[vo/gpu/vulkan/libplacebo]   %57 = OpTypeSampledImage %56
[vo/gpu/vulkan/libplacebo] 
[vo/gpu/vulkan/libplacebo] 
[vo/gpu/vulkan/libplacebo] 
[vo/gpu/vulkan/libplacebo] shaderc compile status 'error' (0 errors, 1 warnings)
[vo/gpu/vulkan/libplacebo] [  1] #version 450
[vo/gpu/vulkan/libplacebo] [  2] #extension GL_ARB_compute_shader : enable
[vo/gpu/vulkan/libplacebo] [  3] #extension GL_KHR_shader_subgroup_basic : enable 
[vo/gpu/vulkan/libplacebo] [  4] #extension GL_KHR_shader_subgroup_vote : enable 
[vo/gpu/vulkan/libplacebo] [  5] #extension GL_KHR_shader_subgroup_arithmetic : enable 
[vo/gpu/vulkan/libplacebo] [  6] #extension GL_KHR_shader_subgroup_ballot : enable 
[vo/gpu/vulkan/libplacebo] [  7] #extension GL_KHR_shader_subgroup_shuffle : enable 
[vo/gpu/vulkan/libplacebo] [  8] #extension GL_ARB_shader_image_load_store : enable
[vo/gpu/vulkan/libplacebo] [  9] #extension GL_ARB_texture_buffer_object : enable
[vo/gpu/vulkan/libplacebo] [ 10] layout(binding=0) uniform samplerBuffer _data_0_0;
[vo/gpu/vulkan/libplacebo] [ 11] layout(binding=1, rgba16f) writeonly restrict uniform image2D _image_1_0;
[vo/gpu/vulkan/libplacebo] [ 12] layout (local_size_x = 256, local_size_y = 1) in;
[vo/gpu/vulkan/libplacebo] [ 13] 
[vo/gpu/vulkan/libplacebo] [ 14] void _main_2_0() {
[vo/gpu/vulkan/libplacebo] [ 15] if (gl_GlobalInvocationID.x >= 26) 
[vo/gpu/vulkan/libplacebo] [ 16]     return;                        
[vo/gpu/vulkan/libplacebo] [ 17] vec4 color = vec4(0.0);                                       
[vo/gpu/vulkan/libplacebo] [ 18] ivec3 pos = ivec3(gl_GlobalInvocationID) + ivec3(0, 0, 0); 
[vo/gpu/vulkan/libplacebo] [ 19] int base = ((pos.z * 216 + pos.y) * 26 + pos.x) * 4;          
[vo/gpu/vulkan/libplacebo] [ 20] color[0] = texelFetch(_data_0_0, base + 0).r; 
[vo/gpu/vulkan/libplacebo] [ 21] color[1] = texelFetch(_data_0_0, base + 1).r; 
[vo/gpu/vulkan/libplacebo] [ 22] color[2] = texelFetch(_data_0_0, base + 2).r; 
[vo/gpu/vulkan/libplacebo] [ 23] color[3] = texelFetch(_data_0_0, base + 3).r; 
[vo/gpu/vulkan/libplacebo] [ 24] imageStore(_image_1_0, ivec2(pos), color);
[vo/gpu/vulkan/libplacebo] [ 25] 
[vo/gpu/vulkan/libplacebo] [ 26] }
[vo/gpu/vulkan/libplacebo] [ 27] 
[vo/gpu/vulkan/libplacebo] [ 28] void main() {
[vo/gpu/vulkan/libplacebo] [ 29] _main_2_0();
[vo/gpu/vulkan/libplacebo] [ 30] }
[vo/gpu/vulkan/libplacebo] vk_compile_glsl(gpu, tmp, GLSL_SHADER_COMPUTE, params->glsl_shader, &comp): VK_ERROR_INITIALIZATION_FAILED (../libplacebo-v3.120.3/src/vulkan/gpu.c:2739)
[vo/gpu/vulkan/libplacebo] Failed creating render pass for dispatch
haasn commented 2 years ago

Does it work with glslang instead of shaderc?

NHOrus commented 2 years ago

Yes, it works with glslang.

bjin commented 2 years ago

The GLSL compilation succeeded, but the SPIRV optimization failed. Either the generated SPIRV is not compliant with SPIRV 1.6 standard, or it's a spirv-tools bug.

In SPIR-V 1.6 or later, sampled image dimension must not be Buffer