| ; SPIR-V |
| ; Version: 1.0 |
| ; Generator: Google spiregg; 0 |
| ; Bound: 180 |
| ; Schema: 0 |
| OpCapability Shader |
| OpCapability SampledBuffer |
| OpCapability ImageBuffer |
| OpExtension "SPV_GOOGLE_hlsl_functionality1" |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %ShadowObjectCullPS "main" %in_var_TEXCOORD0 %gl_FragCoord %out_var_SV_Target0 |
| OpExecutionMode %ShadowObjectCullPS OriginUpperLeft |
| OpSource HLSL 600 |
| OpName %type_StructuredBuffer_v4float "type.StructuredBuffer.v4float" |
| OpName %CulledObjectBoxBounds "CulledObjectBoxBounds" |
| OpName %type__Globals "type.$Globals" |
| OpMemberName %type__Globals 0 "ShadowTileListGroupSize" |
| OpName %_Globals "$Globals" |
| OpName %type_buffer_image "type.buffer.image" |
| OpName %RWShadowTileNumCulledObjects "RWShadowTileNumCulledObjects" |
| OpName %in_var_TEXCOORD0 "in.var.TEXCOORD0" |
| OpName %out_var_SV_Target0 "out.var.SV_Target0" |
| OpName %ShadowObjectCullPS "ShadowObjectCullPS" |
| OpDecorateString %in_var_TEXCOORD0 UserSemantic "TEXCOORD0" |
| OpDecorate %in_var_TEXCOORD0 Flat |
| OpDecorate %gl_FragCoord BuiltIn FragCoord |
| OpDecorateString %gl_FragCoord UserSemantic "SV_POSITION" |
| OpDecorateString %out_var_SV_Target0 UserSemantic "SV_Target0" |
| OpDecorate %in_var_TEXCOORD0 Location 0 |
| OpDecorate %out_var_SV_Target0 Location 0 |
| OpDecorate %CulledObjectBoxBounds DescriptorSet 0 |
| OpDecorate %CulledObjectBoxBounds Binding 1 |
| OpDecorate %_Globals DescriptorSet 0 |
| OpDecorate %_Globals Binding 2 |
| OpDecorate %RWShadowTileNumCulledObjects DescriptorSet 0 |
| OpDecorate %RWShadowTileNumCulledObjects Binding 0 |
| OpDecorate %_runtimearr_v4float ArrayStride 16 |
| OpMemberDecorate %type_StructuredBuffer_v4float 0 Offset 0 |
| OpMemberDecorate %type_StructuredBuffer_v4float 0 NonWritable |
| OpDecorate %type_StructuredBuffer_v4float BufferBlock |
| OpMemberDecorate %type__Globals 0 Offset 0 |
| OpDecorate %type__Globals Block |
| %float = OpTypeFloat 32 |
| %v4float = OpTypeVector %float 4 |
| %v3float = OpTypeVector %float 3 |
| %v2float = OpTypeVector %float 2 |
| %int = OpTypeInt 32 1 |
| %uint = OpTypeInt 32 0 |
| %uint_2 = OpConstant %uint 2 |
| %uint_4 = OpConstant %uint 4 |
| %float_0 = OpConstant %float 0 |
| %22 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 |
| %int_1 = OpConstant %int 1 |
| %int_0 = OpConstant %int 0 |
| %uint_1 = OpConstant %uint 1 |
| %float_2 = OpConstant %float 2 |
| %27 = OpConstantComposite %v2float %float_2 %float_2 |
| %float_1 = OpConstant %float 1 |
| %29 = OpConstantComposite %v2float %float_1 %float_1 |
| %float_n1000 = OpConstant %float -1000 |
| %int_2 = OpConstant %int 2 |
| %float_0_5 = OpConstant %float 0.5 |
| %33 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_5 |
| %float_500000 = OpConstant %float 500000 |
| %35 = OpConstantComposite %v3float %float_500000 %float_500000 %float_500000 |
| %float_n500000 = OpConstant %float -500000 |
| %37 = OpConstantComposite %v3float %float_n500000 %float_n500000 %float_n500000 |
| %int_3 = OpConstant %int 3 |
| %int_4 = OpConstant %int 4 |
| %int_5 = OpConstant %int 5 |
| %int_6 = OpConstant %int 6 |
| %int_7 = OpConstant %int 7 |
| %int_8 = OpConstant %int 8 |
| %44 = OpConstantComposite %v3float %float_1 %float_1 %float_1 |
| %float_n1 = OpConstant %float -1 |
| %46 = OpConstantComposite %v3float %float_n1 %float_n1 %float_n1 |
| %uint_5 = OpConstant %uint 5 |
| %uint_0 = OpConstant %uint 0 |
| %uint_3 = OpConstant %uint 3 |
| %_runtimearr_v4float = OpTypeRuntimeArray %v4float |
| %type_StructuredBuffer_v4float = OpTypeStruct %_runtimearr_v4float |
| %_ptr_Uniform_type_StructuredBuffer_v4float = OpTypePointer Uniform %type_StructuredBuffer_v4float |
| %v2uint = OpTypeVector %uint 2 |
| %type__Globals = OpTypeStruct %v2uint |
| %_ptr_Uniform_type__Globals = OpTypePointer Uniform %type__Globals |
| %type_buffer_image = OpTypeImage %uint Buffer 2 0 0 2 R32ui |
| %_ptr_UniformConstant_type_buffer_image = OpTypePointer UniformConstant %type_buffer_image |
| %_ptr_Input_uint = OpTypePointer Input %uint |
| %_ptr_Input_v4float = OpTypePointer Input %v4float |
| %_ptr_Output_v4float = OpTypePointer Output %v4float |
| %void = OpTypeVoid |
| %58 = OpTypeFunction %void |
| %_ptr_Function_v3float = OpTypePointer Function %v3float |
| %uint_8 = OpConstant %uint 8 |
| %_arr_v3float_uint_8 = OpTypeArray %v3float %uint_8 |
| %_ptr_Function__arr_v3float_uint_8 = OpTypePointer Function %_arr_v3float_uint_8 |
| %_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint |
| %_ptr_Uniform_uint = OpTypePointer Uniform %uint |
| %bool = OpTypeBool |
| %v2bool = OpTypeVector %bool 2 |
| %v3bool = OpTypeVector %bool 3 |
| %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float |
| %_ptr_Image_uint = OpTypePointer Image %uint |
| %CulledObjectBoxBounds = OpVariable %_ptr_Uniform_type_StructuredBuffer_v4float Uniform |
| %_Globals = OpVariable %_ptr_Uniform_type__Globals Uniform |
| %RWShadowTileNumCulledObjects = OpVariable %_ptr_UniformConstant_type_buffer_image UniformConstant |
| %in_var_TEXCOORD0 = OpVariable %_ptr_Input_uint Input |
| %gl_FragCoord = OpVariable %_ptr_Input_v4float Input |
| %out_var_SV_Target0 = OpVariable %_ptr_Output_v4float Output |
| %70 = OpUndef %v3float |
| %71 = OpConstantNull %v3float |
| %ShadowObjectCullPS = OpFunction %void None %58 |
| %72 = OpLabel |
| %73 = OpVariable %_ptr_Function__arr_v3float_uint_8 Function |
| %74 = OpLoad %uint %in_var_TEXCOORD0 |
| %75 = OpLoad %v4float %gl_FragCoord |
| %76 = OpVectorShuffle %v2float %75 %75 0 1 |
| %77 = OpConvertFToU %v2uint %76 |
| %78 = OpCompositeExtract %uint %77 1 |
| %79 = OpAccessChain %_ptr_Uniform_v2uint %_Globals %int_0 |
| %80 = OpAccessChain %_ptr_Uniform_uint %_Globals %int_0 %int_0 |
| %81 = OpLoad %uint %80 |
| %82 = OpIMul %uint %78 %81 |
| %83 = OpCompositeExtract %uint %77 0 |
| %84 = OpIAdd %uint %82 %83 |
| %85 = OpConvertUToF %float %83 |
| %86 = OpAccessChain %_ptr_Uniform_uint %_Globals %int_0 %int_1 |
| %87 = OpLoad %uint %86 |
| %88 = OpISub %uint %87 %uint_1 |
| %89 = OpISub %uint %88 %78 |
| %90 = OpConvertUToF %float %89 |
| %91 = OpCompositeConstruct %v2float %85 %90 |
| %92 = OpLoad %v2uint %79 |
| %93 = OpConvertUToF %v2float %92 |
| %94 = OpFDiv %v2float %91 %93 |
| %95 = OpFMul %v2float %94 %27 |
| %96 = OpFSub %v2float %95 %29 |
| %97 = OpFAdd %v2float %91 %29 |
| %98 = OpFDiv %v2float %97 %93 |
| %99 = OpFMul %v2float %98 %27 |
| %100 = OpFSub %v2float %99 %29 |
| %101 = OpVectorShuffle %v3float %70 %100 3 4 2 |
| %102 = OpCompositeInsert %v3float %float_1 %101 2 |
| %103 = OpIMul %uint %74 %uint_5 |
| %104 = OpAccessChain %_ptr_Uniform_v4float %CulledObjectBoxBounds %int_0 %103 |
| %105 = OpLoad %v4float %104 |
| %106 = OpVectorShuffle %v3float %105 %105 0 1 2 |
| %107 = OpIAdd %uint %103 %uint_1 |
| %108 = OpAccessChain %_ptr_Uniform_v4float %CulledObjectBoxBounds %int_0 %107 |
| %109 = OpLoad %v4float %108 |
| %110 = OpVectorShuffle %v3float %109 %109 0 1 2 |
| %111 = OpVectorShuffle %v2float %109 %71 0 1 |
| %112 = OpVectorShuffle %v2float %96 %71 0 1 |
| %113 = OpFOrdGreaterThan %v2bool %111 %112 |
| %114 = OpAll %bool %113 |
| %115 = OpFOrdLessThan %v3bool %106 %102 |
| %116 = OpAll %bool %115 |
| %117 = OpLogicalAnd %bool %114 %116 |
| OpSelectionMerge %118 DontFlatten |
| OpBranchConditional %117 %119 %118 |
| %119 = OpLabel |
| %120 = OpFAdd %v3float %106 %110 |
| %121 = OpFMul %v3float %33 %120 |
| %122 = OpCompositeExtract %float %96 0 |
| %123 = OpCompositeExtract %float %96 1 |
| %124 = OpCompositeConstruct %v3float %122 %123 %float_n1000 |
| %125 = OpAccessChain %_ptr_Function_v3float %73 %int_0 |
| OpStore %125 %124 |
| %126 = OpCompositeExtract %float %100 0 |
| %127 = OpCompositeConstruct %v3float %126 %123 %float_n1000 |
| %128 = OpAccessChain %_ptr_Function_v3float %73 %int_1 |
| OpStore %128 %127 |
| %129 = OpCompositeExtract %float %100 1 |
| %130 = OpCompositeConstruct %v3float %122 %129 %float_n1000 |
| %131 = OpAccessChain %_ptr_Function_v3float %73 %int_2 |
| OpStore %131 %130 |
| %132 = OpCompositeConstruct %v3float %126 %129 %float_n1000 |
| %133 = OpAccessChain %_ptr_Function_v3float %73 %int_3 |
| OpStore %133 %132 |
| %134 = OpCompositeConstruct %v3float %122 %123 %float_1 |
| %135 = OpAccessChain %_ptr_Function_v3float %73 %int_4 |
| OpStore %135 %134 |
| %136 = OpCompositeConstruct %v3float %126 %123 %float_1 |
| %137 = OpAccessChain %_ptr_Function_v3float %73 %int_5 |
| OpStore %137 %136 |
| %138 = OpCompositeConstruct %v3float %122 %129 %float_1 |
| %139 = OpAccessChain %_ptr_Function_v3float %73 %int_6 |
| OpStore %139 %138 |
| %140 = OpCompositeConstruct %v3float %126 %129 %float_1 |
| %141 = OpAccessChain %_ptr_Function_v3float %73 %int_7 |
| OpStore %141 %140 |
| %142 = OpIAdd %uint %103 %uint_2 |
| %143 = OpAccessChain %_ptr_Uniform_v4float %CulledObjectBoxBounds %int_0 %142 |
| %144 = OpLoad %v4float %143 |
| %145 = OpVectorShuffle %v3float %144 %144 0 1 2 |
| %146 = OpIAdd %uint %103 %uint_3 |
| %147 = OpAccessChain %_ptr_Uniform_v4float %CulledObjectBoxBounds %int_0 %146 |
| %148 = OpLoad %v4float %147 |
| %149 = OpVectorShuffle %v3float %148 %148 0 1 2 |
| %150 = OpIAdd %uint %103 %uint_4 |
| %151 = OpAccessChain %_ptr_Uniform_v4float %CulledObjectBoxBounds %int_0 %150 |
| %152 = OpLoad %v4float %151 |
| %153 = OpVectorShuffle %v3float %152 %152 0 1 2 |
| OpBranch %154 |
| %154 = OpLabel |
| %155 = OpPhi %v3float %37 %119 %156 %157 |
| %158 = OpPhi %v3float %35 %119 %159 %157 |
| %160 = OpPhi %int %int_0 %119 %161 %157 |
| %162 = OpSLessThan %bool %160 %int_8 |
| OpLoopMerge %163 %157 Unroll |
| OpBranchConditional %162 %157 %163 |
| %157 = OpLabel |
| %164 = OpAccessChain %_ptr_Function_v3float %73 %160 |
| %165 = OpLoad %v3float %164 |
| %166 = OpFSub %v3float %165 %121 |
| %167 = OpDot %float %166 %145 |
| %168 = OpDot %float %166 %149 |
| %169 = OpDot %float %166 %153 |
| %170 = OpCompositeConstruct %v3float %167 %168 %169 |
| %159 = OpExtInst %v3float %1 FMin %158 %170 |
| %156 = OpExtInst %v3float %1 FMax %155 %170 |
| %161 = OpIAdd %int %160 %int_1 |
| OpBranch %154 |
| %163 = OpLabel |
| %171 = OpFOrdLessThan %v3bool %158 %44 |
| %172 = OpAll %bool %171 |
| %173 = OpFOrdGreaterThan %v3bool %155 %46 |
| %174 = OpAll %bool %173 |
| %175 = OpLogicalAnd %bool %172 %174 |
| OpSelectionMerge %176 DontFlatten |
| OpBranchConditional %175 %177 %176 |
| %177 = OpLabel |
| %178 = OpImageTexelPointer %_ptr_Image_uint %RWShadowTileNumCulledObjects %84 %uint_0 |
| %179 = OpAtomicIAdd %uint %178 %uint_1 %uint_0 %uint_1 |
| OpBranch %176 |
| %176 = OpLabel |
| OpBranch %118 |
| %118 = OpLabel |
| OpStore %out_var_SV_Target0 %22 |
| OpReturn |
| OpFunctionEnd |