Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added coverage test 0720 #336

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
#!amber

# Copyright 2022 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 test for a coverage-gap found by the GraphicsFuzz project.

# Short description: A fragment shader that covers specific LLVM code paths

# The test passes because the shader always writes red.

SHADER vertex variant_vertex_shader PASSTHROUGH

# variant_fragment_shader is derived from the following GLSL:
# #version 320 es
# #define _int_1 _GLF_uniform_int_values[0]
# #define _int_0 _GLF_uniform_int_values[1]
#
# precision highp float;
# precision highp int;
#
# // Contents of _GLF_uniform_int_values: [1, 0]
# layout(set = 0, binding = 0) uniform buf0
# {
# int _GLF_uniform_int_values[2];
# };
#
# layout(location = 0) out vec4 _GLF_color;
#
# void main()
# {
# _GLF_color = vec4(_int_0);
#
# // Iterates once with i = 1.
# for(int i = 1; i <= 1; i *= 2)
# {
# // Iterates once with j = 0.
# for(int j = 0; j < 1; j += 2 * i)
# {
# // k = 1 + 0 + 1 = 2
# int k = i + j + 1;
#
# // Never iterates.
# while((j + i) >= _int_1 && k <= min(j + 2 * i, 1))
# {
# return;
# }
# }
# }
#
# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
# }
SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 89
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %4 "main" %9
OpExecutionMode %4 OriginUpperLeft
OpSource ESSL 320
OpName %4 "main"
OpName %9 "_GLF_color"
OpName %14 "buf0"
OpMemberName %14 0 "_GLF_uniform_int_values"
OpName %16 ""
OpName %25 "i"
OpName %34 "j"
OpName %42 "k"
OpDecorate %9 Location 0
OpDecorate %13 ArrayStride 16
OpMemberDecorate %14 0 Offset 0
OpDecorate %14 Block
OpDecorate %16 DescriptorSet 0
OpDecorate %16 Binding 0
%2 = OpTypeVoid
%3 = OpTypeFunction %2
%6 = OpTypeFloat 32
%7 = OpTypeVector %6 4
%8 = OpTypePointer Output %7
%9 = OpVariable %8 Output
%10 = OpTypeInt 32 1
%11 = OpTypeInt 32 0
%12 = OpConstant %11 2
%13 = OpTypeArray %10 %12
%14 = OpTypeStruct %13
%15 = OpTypePointer Uniform %14
%16 = OpVariable %15 Uniform
%17 = OpConstant %10 0
%18 = OpConstant %10 1
%19 = OpTypePointer Uniform %10
%24 = OpTypePointer Function %10
%32 = OpTypeBool
%62 = OpConstant %10 2
%4 = OpFunction %2 None %3
%5 = OpLabel
%25 = OpVariable %24 Function
%34 = OpVariable %24 Function
%42 = OpVariable %24 Function
%20 = OpAccessChain %19 %16 %17 %18
%21 = OpLoad %10 %20
%22 = OpConvertSToF %6 %21
%23 = OpCompositeConstruct %7 %22 %22 %22 %22
OpStore %9 %23
OpStore %25 %18
OpBranch %26
%26 = OpLabel
OpLoopMerge %28 %29 None
OpBranch %30
%30 = OpLabel
%31 = OpLoad %10 %25
%33 = OpSLessThanEqual %32 %31 %18
OpBranchConditional %33 %27 %28
%27 = OpLabel
OpStore %34 %17
OpBranch %35
%35 = OpLabel
OpLoopMerge %37 %38 None
OpBranch %39
%39 = OpLabel
%40 = OpLoad %10 %34
%41 = OpSLessThan %32 %40 %18
OpBranchConditional %41 %36 %37
%36 = OpLabel
%43 = OpLoad %10 %25
%44 = OpLoad %10 %34
%45 = OpIAdd %10 %43 %44
%46 = OpIAdd %10 %45 %18
OpStore %42 %46
OpBranch %47
%47 = OpLabel
OpLoopMerge %49 %50 None
OpBranch %51
%51 = OpLabel
%52 = OpLoad %10 %34
%53 = OpLoad %10 %25
%54 = OpIAdd %10 %52 %53
%55 = OpAccessChain %19 %16 %17 %17
%56 = OpLoad %10 %55
%57 = OpSGreaterThanEqual %32 %54 %56
OpSelectionMerge %59 None
OpBranchConditional %57 %58 %59
%58 = OpLabel
%60 = OpLoad %10 %42
%61 = OpLoad %10 %34
%63 = OpLoad %10 %25
%64 = OpIMul %10 %62 %63
%65 = OpIAdd %10 %61 %64
%66 = OpExtInst %10 %1 SMin %65 %18
%67 = OpSLessThanEqual %32 %60 %66
OpBranch %59
%59 = OpLabel
%68 = OpPhi %32 %57 %51 %67 %58
OpBranchConditional %68 %48 %49
%48 = OpLabel
OpReturn
%50 = OpLabel
OpBranch %47
%49 = OpLabel
OpBranch %38
%38 = OpLabel
%70 = OpLoad %10 %25
%71 = OpIMul %10 %62 %70
%72 = OpLoad %10 %34
%73 = OpIAdd %10 %72 %71
OpStore %34 %73
OpBranch %35
%37 = OpLabel
OpBranch %29
%29 = OpLabel
%74 = OpLoad %10 %25
%75 = OpIMul %10 %74 %62
OpStore %25 %75
OpBranch %26
%28 = OpLabel
%76 = OpAccessChain %19 %16 %17 %17
%77 = OpLoad %10 %76
%78 = OpConvertSToF %6 %77
%79 = OpAccessChain %19 %16 %17 %18
%80 = OpLoad %10 %79
%81 = OpConvertSToF %6 %80
%82 = OpAccessChain %19 %16 %17 %18
%83 = OpLoad %10 %82
%84 = OpConvertSToF %6 %83
%85 = OpAccessChain %19 %16 %17 %17
%86 = OpLoad %10 %85
%87 = OpConvertSToF %6 %86
%88 = OpCompositeConstruct %7 %78 %81 %84 %87
OpStore %9 %88
OpReturn
OpFunctionEnd
END

# uniforms for variant

# _GLF_uniform_int_values
BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
1 0
END

BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM

PIPELINE graphics variant_pipeline
ATTACH variant_vertex_shader
ATTACH variant_fragment_shader
FRAMEBUFFER_SIZE 256 256
BIND BUFFER variant_framebuffer AS color LOCATION 0
BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
END
CLEAR_COLOR variant_pipeline 0 0 0 255

CLEAR variant_pipeline
RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256

EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Copyright 2021 The GraphicsFuzz Project Authors
#
# 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
#
# https://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.

"""Generate a CTS test.

This module/script is copied next to a specific test in your repository of bugs
to generate an Amber script test suitable for adding to the CTS.
In particular, the Amber script test is suitable for use with |add_amber_tests_to_cts.py|.
"""

import sys
from pathlib import Path

from gfauto import tool, util


def main() -> None:

# Checklist:
# - check output_amber
# - check short_description
# - check comment_text
# - check copyright_year
# - check extra_commands

bug_dir = util.norm_path(Path(__file__).absolute()).parent

tool.glsl_shader_job_crash_to_amber_script_for_google_cts(
source_dir=bug_dir / "reduced_manual",
output_amber=bug_dir / "cov-nested-loops-return-inside-while-never-executed.amber",
work_dir=bug_dir / "work",
# One sentence, 58 characters max., no period, no line breaks.
short_description="A fragment shader that covers specific LLVM code paths",
comment_text="""The test passes because the shader always writes red.""",
copyright_year="2022",
extra_commands=tool.AMBER_COMMAND_EXPECT_RED,
is_coverage_gap=True,
)


if __name__ == "__main__":
main()
sys.exit(0)
Loading