blob: b411618cc0433d6e713a6e3b75ea872ff1ac1582 [file] [log] [blame]
[require]
VK_KHR_spirv_1_4
VK_KHR_variable_pointers
VariablePointerFeatures.variablePointersStorageBuffer
VariablePointerFeatures.variablePointers
VK_KHR_storage_buffer_storage_class
VK_KHR_get_physical_device_properties2
[compute shader spirv]
; This generates 4 results for OpPtrNotEqual
; The workgroup variable is a struct containing a single float.
; Results:
; 0: comparison of the workgroup var vs null
; 1: comparison of the workgroup float vs null
; 2: comparison of null struct vs null struct
; 3: comparison of null float vs null float
OpCapability Shader
OpCapability VariablePointers
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %wg_var %out_var
OpExecutionMode %main LocalSize 1 1 1
OpDecorate %out_struct Block
OpMemberDecorate %out_struct 0 Offset 0
OpDecorate %out_var DescriptorSet 0
OpDecorate %out_var Binding 0
%void = OpTypeVoid
%bool = OpTypeBool
%float = OpTypeFloat 32
%int = OpTypeInt 32 0
%int4 = OpTypeVector %int 4
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%wg_struct = OpTypeStruct %float
%ptr_wg_struct = OpTypePointer Workgroup %wg_struct
%wg_var = OpVariable %ptr_wg_struct Workgroup
%ptr_wg_float = OpTypePointer Workgroup %float
%out_struct = OpTypeStruct %int4
%ptr_out_struct = OpTypePointer StorageBuffer %out_struct
%out_var = OpVariable %ptr_out_struct StorageBuffer
%ptr_ssbo_int4 = OpTypePointer StorageBuffer %int4
%ptr_wg_struct_null = OpConstantNull %ptr_wg_struct
%ptr_wg_float_null = OpConstantNull %ptr_wg_float
%ptr_wg_struct_null2 = OpConstantNull %ptr_wg_struct
%ptr_wg_float_null2 = OpConstantNull %ptr_wg_float
%void_fn = OpTypeFunction %void
%main = OpFunction %void None %void_fn
%entry = OpLabel
%wg_not_equal = OpPtrNotEqual %bool %wg_var %ptr_wg_struct_null
%wg_not_equal_int = OpSelect %int %wg_not_equal %int_1 %int_0
%wg_gep_0 = OpAccessChain %ptr_wg_float %wg_var %int_0
%wg_not_equal_0 = OpPtrNotEqual %bool %wg_gep_0 %ptr_wg_float_null
%wg_not_equal_0_int = OpSelect %int %wg_not_equal_0 %int_1 %int_0
%null_wg_not_equal = OpPtrNotEqual %bool %ptr_wg_struct_null %ptr_wg_struct_null2
%null_wg_not_equal_int = OpSelect %int %null_wg_not_equal %int_1 %int_0
%null_wg_not_equal_0 = OpPtrNotEqual %bool %ptr_wg_float_null %ptr_wg_float_null2
%null_wg_not_equal_0_int = OpSelect %int %null_wg_not_equal_0 %int_1 %int_0
%combined = OpCompositeConstruct %int4 %wg_not_equal_int %wg_not_equal_0_int %null_wg_not_equal_int %null_wg_not_equal_0_int
%out_gep = OpAccessChain %ptr_ssbo_int4 %out_var %int_0
OpStore %out_gep %combined
OpReturn
OpFunctionEnd
[test]
ssbo 0:0 16
compute entrypoint main
compute 1 1 1
probe ssbo uvec4 0:0 0 == 1 1 0 0