#!amber

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# A geometry shader test for FrexpStruct.

DEVICE_FEATURE geometryShader

# SHADER vertex vert_shader GLSL
# #version 430
# precision highp float;
#
# const uint ndp = 1296;
# const uint ndpSqrt = uint(sqrt(ndp));
# const float halfGridElementSize = 1.0 / float(ndpSqrt);
#
# layout (location = 0) in vec2 position;
# layout (location = 0) flat out uint ndx_out;
#
# void main ()
# {
#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
#     ndx_out = xcoord + ycoord * ndpSqrt;
#
#     gl_Position = vec4(position, 0, 1);
#
#     return;
# }
# END

SHADER vertex vert_shader SPIRV-ASM
               OpCapability Shader
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical GLSL450
               OpEntryPoint Vertex %main "main" %position %ndx_out %_
               OpDecorate %position Location 0
               OpDecorate %ndx_out Flat
               OpDecorate %ndx_out Location 0
               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
               OpDecorate %gl_PerVertex Block
       %void = OpTypeVoid
          %3 = OpTypeFunction %void
       %uint = OpTypeInt 32 0
      %float = OpTypeFloat 32
    %v2float = OpTypeVector %float 2
%_ptr_Input_v2float = OpTypePointer Input %v2float
   %position = OpVariable %_ptr_Input_v2float Input
     %uint_0 = OpConstant %uint 0
%_ptr_Input_float = OpTypePointer Input %float
    %float_1 = OpConstant %float 1
     %uint_1 = OpConstant %uint 1
%_ptr_Output_uint = OpTypePointer Output %uint
    %ndx_out = OpVariable %_ptr_Output_uint Output
    %uint_36 = OpConstant %uint 36
    %v4float = OpTypeVector %float 4
%_arr_float_uint_1 = OpTypeArray %float %uint_1
%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
        %int = OpTypeInt 32 1
      %int_0 = OpConstant %int 0
    %float_0 = OpConstant %float 0
%_ptr_Output_v4float = OpTypePointer Output %v4float
%float_1_02777779 = OpConstant %float 1.02777779
   %float_18 = OpConstant %float 18
       %main = OpFunction %void None %3
          %5 = OpLabel
         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
         %17 = OpLoad %float %16
         %21 = OpFAdd %float %17 %float_1_02777779
         %24 = OpFMul %float %21 %float_18
         %25 = OpFSub %float %24 %float_1
         %26 = OpConvertFToU %uint %25
         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
         %30 = OpLoad %float %29
         %32 = OpFAdd %float %30 %float_1_02777779
         %34 = OpFMul %float %32 %float_18
         %35 = OpFSub %float %34 %float_1
         %36 = OpConvertFToU %uint %35
         %42 = OpIMul %uint %36 %uint_36
         %43 = OpIAdd %uint %26 %42
               OpStore %ndx_out %43
         %51 = OpLoad %v2float %position
         %53 = OpCompositeExtract %float %51 0
         %54 = OpCompositeExtract %float %51 1
         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
               OpStore %57 %55
               OpReturn
               OpFunctionEnd
END

# SHADER geometry geom_shader GLSL
# #version 430
# precision highp float;
#
# const uint ndp = 1296;
#
# layout(set = 0, binding = 0) readonly buffer block0 {
#     uint in_values[ndp];
# };
#
# layout (triangles) in;
# layout (triangle_strip, max_vertices = 3) out;
#
# layout (location = 0) flat in uint ndx_in[];
# layout (location = 0) flat out float frexp_x_out;
# layout (location = 1) flat out float frexp_exp_out;
# layout (location = 2) flat out float frexpStruct_x_out;
# layout (location = 3) flat out float frexpStruct_exp_out;
#
# struct frexpStructType
# {
#     float x;
#     int exp;
# };
#
# // Replaced with native function in SPIR-V.
# frexpStructType frexpStruct (float orig)
# {
#     float x;
#     int exp;
#     x = frexp(orig, exp);
#     frexpStructType res = { x, exp };
#     return res;
# }
#
# void main ()
# {
#     for (int vertex = 0; vertex < 3; vertex++)
#     {
#         uint in_uint = in_values[ndx_in[vertex]];
#         float in_float = uintBitsToFloat(in_uint);
#         float x;
#         int exp;
#         frexpStructType res;
#
#         x = frexp(in_float, exp);
#         res = frexpStruct(in_float);
#
#         frexp_x_out = x;
#         frexp_exp_out = intBitsToFloat(exp);
#         frexpStruct_x_out = res.x;
#         frexpStruct_exp_out = intBitsToFloat(res.exp);
#
#         gl_Position = gl_in[vertex].gl_Position;
#         EmitVertex();
#     }
#
#     EndPrimitive();
# }
# END

SHADER geometry geom_shader SPIRV-ASM
               OpCapability Geometry
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical GLSL450
               OpEntryPoint Geometry %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0 %gl_in
               OpExecutionMode %main Triangles
               OpExecutionMode %main Invocations 1
               OpExecutionMode %main OutputTriangleStrip
               OpExecutionMode %main OutputVertices 3
               OpDecorate %_arr_uint_uint_1296 ArrayStride 4
               OpMemberDecorate %block0 0 NonWritable
               OpMemberDecorate %block0 0 Offset 0
               OpDecorate %block0 BufferBlock
               OpDecorate %_ DescriptorSet 0
               OpDecorate %_ Binding 0
               OpDecorate %ndx_in Flat
               OpDecorate %ndx_in Location 0
               OpDecorate %frexp_x_out Flat
               OpDecorate %frexp_x_out Location 0
               OpDecorate %frexp_exp_out Flat
               OpDecorate %frexp_exp_out Location 1
               OpDecorate %frexpStruct_x_out Flat
               OpDecorate %frexpStruct_x_out Location 2
               OpDecorate %frexpStruct_exp_out Flat
               OpDecorate %frexpStruct_exp_out Location 3
               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
               OpDecorate %gl_PerVertex Block
               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
               OpDecorate %gl_PerVertex_0 Block
       %void = OpTypeVoid
          %3 = OpTypeFunction %void
      %float = OpTypeFloat 32
%_ptr_Function_float = OpTypePointer Function %float
        %int = OpTypeInt 32 1
%frexpStructType = OpTypeStruct %float %int
         %10 = OpTypeFunction %frexpStructType %_ptr_Function_float
%_ptr_Function_int = OpTypePointer Function %int
%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
      %int_0 = OpConstant %int 0
      %int_3 = OpConstant %int 3
       %bool = OpTypeBool
       %uint = OpTypeInt 32 0
%_ptr_Function_uint = OpTypePointer Function %uint
  %uint_1296 = OpConstant %uint 1296
%_arr_uint_uint_1296 = OpTypeArray %uint %uint_1296
     %block0 = OpTypeStruct %_arr_uint_uint_1296
%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
          %_ = OpVariable %_ptr_Uniform_block0 Uniform
     %uint_3 = OpConstant %uint 3
%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
%_ptr_Input__arr_uint_uint_3 = OpTypePointer Input %_arr_uint_uint_3
     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_3 Input
%_ptr_Input_uint = OpTypePointer Input %uint
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
%_ptr_Output_float = OpTypePointer Output %float
%frexp_x_out = OpVariable %_ptr_Output_float Output
%frexp_exp_out = OpVariable %_ptr_Output_float Output
%frexpStruct_x_out = OpVariable %_ptr_Output_float Output
%frexpStruct_exp_out = OpVariable %_ptr_Output_float Output
      %int_1 = OpConstant %int 1
    %v4float = OpTypeVector %float 4
     %uint_1 = OpConstant %uint 1
%_arr_float_uint_1 = OpTypeArray %float %uint_1
%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
%_arr_gl_PerVertex_0_uint_3 = OpTypeArray %gl_PerVertex_0 %uint_3
%_ptr_Input__arr_gl_PerVertex_0_uint_3 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_3
      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_3 Input
%_ptr_Input_v4float = OpTypePointer Input %v4float
%_ptr_Output_v4float = OpTypePointer Output %v4float
       %main = OpFunction %void None %3
          %5 = OpLabel
     %vertex = OpVariable %_ptr_Function_int Function
    %in_uint = OpVariable %_ptr_Function_uint Function
   %in_float = OpVariable %_ptr_Function_float Function
        %x_0 = OpVariable %_ptr_Function_float Function
      %exp_0 = OpVariable %_ptr_Function_int Function
      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
               OpStore %vertex %int_0
               OpBranch %29
         %29 = OpLabel
               OpLoopMerge %31 %32 None
               OpBranch %33
         %33 = OpLabel
         %34 = OpLoad %int %vertex
         %37 = OpSLessThan %bool %34 %int_3
               OpBranchConditional %37 %30 %31
         %30 = OpLabel
         %50 = OpLoad %int %vertex
         %52 = OpAccessChain %_ptr_Input_uint %ndx_in %50
         %53 = OpLoad %uint %52
         %55 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %53
         %56 = OpLoad %uint %55
               OpStore %in_uint %56
         %58 = OpLoad %uint %in_uint
         %59 = OpBitcast %float %58
               OpStore %in_float %59
         %61 = OpLoad %float %in_float
         %63 = OpExtInst %float %1 Frexp %61 %exp_0
               OpStore %x_0 %63
         %66 = OpLoad %float %in_float
         %67 = OpExtInst %frexpStructType %1 FrexpStruct %66
               OpStore %res_0 %67
         %70 = OpLoad %float %x_0
               OpStore %frexp_x_out %70
         %72 = OpLoad %int %exp_0
         %73 = OpBitcast %float %72
               OpStore %frexp_exp_out %73
         %75 = OpAccessChain %_ptr_Function_float %res_0 %int_0
         %76 = OpLoad %float %75
               OpStore %frexpStruct_x_out %76
         %79 = OpAccessChain %_ptr_Function_int %res_0 %int_1
         %80 = OpLoad %int %79
         %81 = OpBitcast %float %80
               OpStore %frexpStruct_exp_out %81
         %92 = OpLoad %int %vertex
         %94 = OpAccessChain %_ptr_Input_v4float %gl_in %92 %int_0
         %95 = OpLoad %v4float %94
         %97 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
               OpStore %97 %95
               OpEmitVertex
               OpBranch %32
         %32 = OpLabel
         %98 = OpLoad %int %vertex
         %99 = OpIAdd %int %98 %int_1
               OpStore %vertex %99
               OpBranch %29
         %31 = OpLabel
               OpEndPrimitive
               OpReturn
               OpFunctionEnd
END

# SHADER fragment frag_shader GLSL
# #version 430
# precision highp float;
#
# layout (location = 0) flat in float frexp_x_in;
# layout (location = 1) flat in float frexp_exp_in;
# layout (location = 2) flat in float frexpStruct_x_in;
# layout (location = 3) flat in float frexpStruct_exp_in;
#
# layout (location = 0) out vec4 frexp_x_out;
# layout (location = 1) out vec4 frexp_exp_out;
# layout (location = 2) out vec4 frexpStruct_x_out;
# layout (location = 3) out vec4 frexpStruct_exp_out;
#
# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
#
# void main ()
# {
#     frexp_x_out = clear_value;
#     frexp_exp_out = clear_value;
#     frexpStruct_x_out = clear_value;
#     frexpStruct_exp_out = clear_value;
#     frexp_x_out.r = frexp_x_in;
#     frexp_exp_out.r = frexp_exp_in;
#     frexpStruct_x_out.r = frexpStruct_x_in;
#     frexpStruct_exp_out.r = frexpStruct_exp_in;
# }
# END

SHADER fragment frag_shader SPIRV-ASM
               OpCapability Shader
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical GLSL450
               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
               OpExecutionMode %main OriginUpperLeft
               OpDecorate %frexp_x_out Location 0
               OpDecorate %frexp_exp_out Location 1
               OpDecorate %frexpStruct_x_out Location 2
               OpDecorate %frexpStruct_exp_out Location 3
               OpDecorate %frexp_x_in Flat
               OpDecorate %frexp_x_in Location 0
               OpDecorate %frexp_exp_in Flat
               OpDecorate %frexp_exp_in Location 1
               OpDecorate %frexpStruct_x_in Flat
               OpDecorate %frexpStruct_x_in Location 2
               OpDecorate %frexpStruct_exp_in Flat
               OpDecorate %frexpStruct_exp_in Location 3
       %void = OpTypeVoid
          %3 = OpTypeFunction %void
      %float = OpTypeFloat 32
    %v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%frexp_x_out = OpVariable %_ptr_Output_v4float Output
    %float_0 = OpConstant %float 0
    %float_1 = OpConstant %float 1
         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
%_ptr_Input_float = OpTypePointer Input %float
 %frexp_x_in = OpVariable %_ptr_Input_float Input
       %uint = OpTypeInt 32 0
     %uint_0 = OpConstant %uint 0
%_ptr_Output_float = OpTypePointer Output %float
%frexp_exp_in = OpVariable %_ptr_Input_float Input
%frexpStruct_x_in = OpVariable %_ptr_Input_float Input
%frexpStruct_exp_in = OpVariable %_ptr_Input_float Input
       %main = OpFunction %void None %3
          %5 = OpLabel
               OpStore %frexp_x_out %12
               OpStore %frexp_exp_out %12
               OpStore %frexpStruct_x_out %12
               OpStore %frexpStruct_exp_out %12
         %18 = OpLoad %float %frexp_x_in
         %22 = OpAccessChain %_ptr_Output_float %frexp_x_out %uint_0
               OpStore %22 %18
         %24 = OpLoad %float %frexp_exp_in
         %25 = OpAccessChain %_ptr_Output_float %frexp_exp_out %uint_0
               OpStore %25 %24
         %27 = OpLoad %float %frexpStruct_x_in
         %28 = OpAccessChain %_ptr_Output_float %frexpStruct_x_out %uint_0
               OpStore %28 %27
         %30 = OpLoad %float %frexpStruct_exp_in
         %31 = OpAccessChain %_ptr_Output_float %frexpStruct_exp_out %uint_0
               OpStore %31 %30
               OpReturn
               OpFunctionEnd
END

BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt

BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT

PIPELINE graphics test_pipeline
    FRAMEBUFFER_SIZE 144 144

    ATTACH vert_shader
    ATTACH geom_shader
    ATTACH frag_shader

    VERTEX_DATA vertices LOCATION 0

    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
    BIND BUFFER frexp_x AS color LOCATION 0
    BIND BUFFER frexp_exp AS color LOCATION 1
    BIND BUFFER frexpStruct_x AS color LOCATION 2
    BIND BUFFER frexpStruct_exp AS color LOCATION 3
END

RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776

EXPECT frexp_x EQ_BUFFER frexpStruct_x
EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
