diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-04-22 14:54:43 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2021-04-22 17:03:08 +0300 |
commit | 532f65583e7a1703458d0c2e162a1f93b91abf16 (patch) | |
tree | 5423ee69083ae9ed9e52c27068e33e0d18480e12 /shaders-no-opt | |
parent | d137abeef57b2f3fdbdab0ad5590fe99a44ba546 (diff) |
Rewrite how non-uniform qualifiers are handled.
Remove all shenanigans with propagation, and only consume nonuniform
qualifiers exactly where needed (last minute).
Diffstat (limited to 'shaders-no-opt')
-rw-r--r-- | shaders-no-opt/asm/comp/nonuniform-bracket-handling.vk.nocompat.asm.comp | 1 | ||||
-rw-r--r-- | shaders-no-opt/asm/frag/nonuniform-ssbo.nocompat.vk.asm.frag | 99 |
2 files changed, 100 insertions, 0 deletions
diff --git a/shaders-no-opt/asm/comp/nonuniform-bracket-handling.vk.nocompat.asm.comp b/shaders-no-opt/asm/comp/nonuniform-bracket-handling.vk.nocompat.asm.comp index 3e36093e..5d5fac62 100644 --- a/shaders-no-opt/asm/comp/nonuniform-bracket-handling.vk.nocompat.asm.comp +++ b/shaders-no-opt/asm/comp/nonuniform-bracket-handling.vk.nocompat.asm.comp @@ -54,6 +54,7 @@ OpDecorate %196 NonUniform OpDecorate %197 NonUniform OpDecorate %205 NonUniform + OpDecorate %212 NonUniform %void = OpTypeVoid %2 = OpTypeFunction %void %uint = OpTypeInt 32 0 diff --git a/shaders-no-opt/asm/frag/nonuniform-ssbo.nocompat.vk.asm.frag b/shaders-no-opt/asm/frag/nonuniform-ssbo.nocompat.vk.asm.frag new file mode 100644 index 00000000..c5428a8b --- /dev/null +++ b/shaders-no-opt/asm/frag/nonuniform-ssbo.nocompat.vk.asm.frag @@ -0,0 +1,99 @@ +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 10 +; Bound: 59 +; Schema: 0 + OpCapability Shader + OpCapability ShaderNonUniform + OpCapability RuntimeDescriptorArray + OpCapability StorageBufferArrayNonUniformIndexing + OpExtension "SPV_EXT_descriptor_indexing" + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %main "main" %vIndex %FragColor + OpExecutionMode %main OriginUpperLeft + OpSource GLSL 450 + OpSourceExtension "GL_EXT_nonuniform_qualifier" + OpSourceExtension "GL_EXT_samplerless_texture_functions" + OpName %main "main" + OpName %i "i" + OpName %vIndex "vIndex" + OpName %SSBO "SSBO" + OpMemberName %SSBO 0 "counter" + OpMemberName %SSBO 1 "v" + OpName %ssbos "ssbos" + OpName %FragColor "FragColor" + OpDecorate %vIndex Flat + OpDecorate %vIndex Location 0 + OpDecorate %_runtimearr_v4float ArrayStride 16 + OpMemberDecorate %SSBO 0 Offset 0 + OpMemberDecorate %SSBO 1 Offset 16 + OpDecorate %SSBO BufferBlock + OpDecorate %ssbos DescriptorSet 0 + OpDecorate %ssbos Binding 3 + OpDecorate %32 NonUniform + OpDecorate %39 NonUniform + OpDecorate %49 NonUniform + OpDecorate %FragColor Location 0 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %int = OpTypeInt 32 1 +%_ptr_Function_int = OpTypePointer Function %int +%_ptr_Input_int = OpTypePointer Input %int + %vIndex = OpVariable %_ptr_Input_int Input + %uint = OpTypeInt 32 0 + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_runtimearr_v4float = OpTypeRuntimeArray %v4float + %SSBO = OpTypeStruct %uint %_runtimearr_v4float +%_runtimearr_SSBO = OpTypeRuntimeArray %SSBO +%_ptr_Uniform__runtimearr_SSBO = OpTypePointer Uniform %_runtimearr_SSBO + %ssbos = OpVariable %_ptr_Uniform__runtimearr_SSBO Uniform + %int_60 = OpConstant %int 60 + %int_1 = OpConstant %int 1 + %int_70 = OpConstant %int 70 + %float_20 = OpConstant %float 20 + %30 = OpConstantComposite %v4float %float_20 %float_20 %float_20 %float_20 +%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float + %int_100 = OpConstant %int 100 + %int_0 = OpConstant %int 0 +%_ptr_Uniform_uint = OpTypePointer Uniform %uint + %uint_100 = OpConstant %uint 100 + %uint_1 = OpConstant %uint 1 + %uint_0 = OpConstant %uint 0 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %FragColor = OpVariable %_ptr_Output_v4float Output +%_ptr_Uniform_SSBO = OpTypePointer Uniform %SSBO + %uint_2 = OpConstant %uint 2 +%_ptr_Output_float = OpTypePointer Output %float + %main = OpFunction %void None %3 + %5 = OpLabel + %i = OpVariable %_ptr_Function_int Function + %11 = OpLoad %int %vIndex + OpStore %i %11 + %20 = OpLoad %int %i + %22 = OpIAdd %int %20 %int_60 + %23 = OpCopyObject %int %22 + %25 = OpLoad %int %i + %27 = OpIAdd %int %25 %int_70 + %28 = OpCopyObject %int %27 + %32 = OpAccessChain %_ptr_Uniform_v4float %ssbos %23 %int_1 %28 + OpStore %32 %30 + %33 = OpLoad %int %i + %35 = OpIAdd %int %33 %int_100 + %36 = OpCopyObject %int %35 + %39 = OpAccessChain %_ptr_Uniform_uint %ssbos %36 %int_0 + %43 = OpAtomicIAdd %uint %39 %uint_1 %uint_0 %uint_100 + %46 = OpLoad %int %i + %47 = OpCopyObject %int %46 + %49 = OpAccessChain %_ptr_Uniform_SSBO %ssbos %47 + %50 = OpArrayLength %uint %49 1 + %51 = OpBitcast %int %50 + %52 = OpConvertSToF %float %51 + %55 = OpAccessChain %_ptr_Output_float %FragColor %uint_2 + %56 = OpLoad %float %55 + %57 = OpFAdd %float %56 %52 + %58 = OpAccessChain %_ptr_Output_float %FragColor %uint_2 + OpStore %58 %57 + OpReturn + OpFunctionEnd |