#!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 fragment shader test for FrexpStruct.

# 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 fragment frag_shader GLSL
# #version 430
# precision highp float;
#
# const uint ndp = 1296;
#
# layout(set = 0, binding = 0) readonly buffer block0 {
#     uvec4 in_values[ndp];
# };
#
# layout (location = 0) flat in uint ndx_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;
#
# struct frexpStructType
# {
#     vec4 x;
#     ivec4 exp;
# };
#
# // Replaced with native function in SPIR-V.
# frexpStructType frexpStruct (vec4 orig)
# {
#     vec4 x;
#     ivec4 exp;
#     x = frexp(orig, exp);
#     frexpStructType res = { x, exp };
#     return res;
# }
#
# void main ()
# {
#     uvec4 in_uint = in_values[ndx_in];
#     vec4 in_float = uintBitsToFloat(in_uint);
#     vec4 x;
#     ivec4 exp;
#     frexpStructType res;
#
#     x = frexp(in_float, exp);
#     res = frexpStruct(in_float);
#
#     frexp_x_out.rgba = x;
#     frexp_exp_out.rgba = intBitsToFloat(exp);
#     frexpStruct_x_out.rgba = res.x;
#     frexpStruct_exp_out.rgba = intBitsToFloat(res.exp);
#
#     return;
# }
# END

SHADER fragment frag_shader SPIRV-ASM
               OpCapability Shader
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical GLSL450
               OpEntryPoint Fragment %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
               OpExecutionMode %main OriginUpperLeft
               OpDecorate %_arr_v4uint_uint_1296 ArrayStride 16
               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 Location 0
               OpDecorate %frexp_exp_out Location 1
               OpDecorate %frexpStruct_x_out Location 2
               OpDecorate %frexpStruct_exp_out Location 3
       %void = OpTypeVoid
          %3 = OpTypeFunction %void
      %float = OpTypeFloat 32
    %v4float = OpTypeVector %float 4
%_ptr_Function_v4float = OpTypePointer Function %v4float
        %int = OpTypeInt 32 1
      %v4int = OpTypeVector %int 4
%frexpStructType = OpTypeStruct %v4float %v4int
         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v4float
%_ptr_Function_v4int = OpTypePointer Function %v4int
%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
       %uint = OpTypeInt 32 0
     %v4uint = OpTypeVector %uint 4
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
  %uint_1296 = OpConstant %uint 1296
%_arr_v4uint_uint_1296 = OpTypeArray %v4uint %uint_1296
     %block0 = OpTypeStruct %_arr_v4uint_uint_1296
%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
          %_ = OpVariable %_ptr_Uniform_block0 Uniform
      %int_0 = OpConstant %int 0
%_ptr_Input_uint = OpTypePointer Input %uint
     %ndx_in = OpVariable %_ptr_Input_uint Input
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
%_ptr_Output_v4float = OpTypePointer Output %v4float
%frexp_x_out = OpVariable %_ptr_Output_v4float Output
%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
      %int_1 = OpConstant %int 1
       %main = OpFunction %void None %3
          %5 = OpLabel
    %in_uint = OpVariable %_ptr_Function_v4uint Function
   %in_float = OpVariable %_ptr_Function_v4float Function
        %x_0 = OpVariable %_ptr_Function_v4float Function
      %exp_0 = OpVariable %_ptr_Function_v4int Function
      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
         %41 = OpLoad %uint %ndx_in
         %43 = OpAccessChain %_ptr_Uniform_v4uint %_ %int_0 %41
         %44 = OpLoad %v4uint %43
               OpStore %in_uint %44
         %46 = OpLoad %v4uint %in_uint
         %47 = OpBitcast %v4float %46
               OpStore %in_float %47
         %49 = OpLoad %v4float %in_float
         %51 = OpExtInst %v4float %1 Frexp %49 %exp_0
               OpStore %x_0 %51
         %54 = OpLoad %v4float %in_float
         %55 = OpExtInst %frexpStructType %1 FrexpStruct %54
               OpStore %res_0 %55
         %58 = OpLoad %v4float %x_0
               OpStore %frexp_x_out %58
         %60 = OpLoad %v4int %exp_0
         %61 = OpBitcast %v4float %60
               OpStore %frexp_exp_out %61
         %63 = OpAccessChain %_ptr_Function_v4float %res_0 %int_0
         %64 = OpLoad %v4float %63
               OpStore %frexpStruct_x_out %64
         %67 = OpAccessChain %_ptr_Function_v4int %res_0 %int_1
         %68 = OpLoad %v4int %67
         %69 = OpBitcast %v4float %68
               OpStore %frexpStruct_exp_out %69
               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 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
