blob: f68e00e16f7625126b54f491337716923f083c0c [file] [log] [blame]
#!amber
# Copyright 2021 Google LLC.
# Copyright 2021 The Khronos Group Inc.
#
# 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.
# Early Fragment Test 'DepthNotEqual'.
# Polygon depth: 0.3
# FragDepth: 0.5
# Depth compare op: not_equal
# Execution mode: Any
# Depth buffer clear value: 0.5
# Description: FragDepth == CLEAR_DEPTH. Depth test should pass. Overwriting the gl_FragDepth is ignored, when Early Fragment Test Mode is enabled.
SHADER vertex vert_shader GLSL
#version 430
layout(location = 0) in vec4 position;
void main()
{
gl_Position = vec4(position.xy, 0.3, 1.0);
}
END
# The fragment shader is generated from following GLSL code:
# version 430
#
# layout(early_fragment_tests) in;
#
# layout(location = 0) out vec4 color_out;
# layout(depth_any) out float gl_FragDepth;
#
# void main()
# {
# color_out = vec4(1.0, 0.0, 0.0, 1.0);
# gl_FragDepth = 0.5;
# }
SHADER fragment frag_shader SPIRV-ASM TARGET_ENV spv1.0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %color_out %gl_FragDepth
OpExecutionMode %main OriginUpperLeft
OpExecutionMode %main EarlyFragmentTests
OpExecutionMode %main DepthReplacing
OpSource GLSL 430
OpName %main "main"
OpName %color_out "color_out"
OpName %gl_FragDepth "gl_FragDepth"
OpDecorate %color_out Location 0
OpDecorate %gl_FragDepth BuiltIn FragDepth
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%color_out = OpVariable %_ptr_Output_v4float Output
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%12 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
%_ptr_Output_float = OpTypePointer Output %float
%gl_FragDepth = OpVariable %_ptr_Output_float Output
%float_0_5 = OpConstant %float 0.5
%main = OpFunction %void None %3
%5 = OpLabel
OpStore %color_out %12
OpStore %gl_FragDepth %float_0_5
OpReturn
OpFunctionEnd
END
BUFFER framebuffer FORMAT B8G8R8A8_UNORM
BUFFER depth_buf FORMAT D16_UNORM
PIPELINE graphics my_pipeline
ATTACH vert_shader
ATTACH frag_shader
DEPTH
TEST on
WRITE on
COMPARE_OP not_equal
CLAMP off
BOUNDS min 0.0 max 1.0
BIAS constant 0.0 clamp 0.0 slope 0.0
END
BIND BUFFER framebuffer AS color LOCATION 0
BIND BUFFER depth_buf AS depth_stencil
END
CLEAR_COLOR my_pipeline 0 0 0 255
CLEAR_DEPTH my_pipeline 0.5
CLEAR my_pipeline
RUN my_pipeline DRAW_RECT POS 0 0 SIZE 250 250
# ---------------- VERIFY PIPELINE ------------------
# This pipeline verifies the dept buffer contents.
# The fragment shader writes color green if the value is expected,
# otherwise red.
SHADER vertex vtex_shader_verify PASSTHROUGH
SHADER fragment frag_shader_verify GLSL
#version 430
layout(location = 0) out vec4 outColor;
uniform layout(set=0, binding=0) sampler2D imageSampler;
const float expectedValue = 0.3;
const float tolerance = 0.01;
void main()
{
float value = texelFetch(imageSampler, ivec2(gl_FragCoord.xy), 0).r;
if (abs(value - expectedValue) < tolerance)
outColor = vec4(0.0f, 1.0f, 0.0f, 1.0f);
else
outColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
END
BUFFER framebuffer_verify FORMAT B8G8R8A8_UNORM
SAMPLER sampler
PIPELINE graphics verify_pipeline
ATTACH vtex_shader_verify
ATTACH frag_shader_verify
FRAMEBUFFER_SIZE 250 250
BIND BUFFER depth_buf AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
BIND BUFFER framebuffer_verify AS color LOCATION 0
END
CLEAR_COLOR verify_pipeline 0 0 0 255
CLEAR verify_pipeline
RUN verify_pipeline DRAW_RECT POS 0 0 SIZE 250 250
EXPECT framebuffer_verify IDX 0 0 SIZE 250 250 EQ_RGBA 0 255 0 255