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 0718 #333

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,201 @@
#!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]
# #define _float_1_0 _GLF_uniform_float_values[0]
#
# precision highp float;
# precision highp int;
#
# // Contents of _GLF_uniform_float_values: 1.0
# layout(set = 0, binding = 0) uniform buf0
# {
# float _GLF_uniform_float_values[1];
# };
#
# // Contents of _GLF_uniform_int_values: [1, 0]
# layout(set = 0, binding = 1) uniform buf1
# {
# int _GLF_uniform_int_values[2];
# };
#
# // Contents of two: 2.0
# layout(push_constant) uniform buf_push
# {
# float two;
# };
#
# layout(location = 0) out vec4 _GLF_color;
#
# void main()
# {
# // Always true: regardless of the condition a value of one can never become larger by clamping.
# if(clamp(1, _float_1_0 > two ? 1 : 0, 1) <= 1)
# {
# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
# }
# else
# {
# _GLF_color = vec4(_int_0);
# }
# }
SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 59
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %4 "main" %34
OpExecutionMode %4 OriginUpperLeft
OpSource ESSL 320
OpName %4 "main"
OpName %12 "buf0"
OpMemberName %12 0 "_GLF_uniform_float_values"
OpName %14 ""
OpName %19 "buf_push"
OpMemberName %19 0 "two"
OpName %21 ""
OpName %34 "_GLF_color"
OpName %37 "buf1"
OpMemberName %37 0 "_GLF_uniform_int_values"
OpName %39 ""
OpDecorate %11 ArrayStride 16
OpMemberDecorate %12 0 Offset 0
OpDecorate %12 Block
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 0
OpMemberDecorate %19 0 Offset 0
OpDecorate %19 Block
OpDecorate %34 Location 0
OpDecorate %36 ArrayStride 16
OpMemberDecorate %37 0 Offset 0
OpDecorate %37 Block
OpDecorate %39 DescriptorSet 0
OpDecorate %39 Binding 1
%2 = OpTypeVoid
%3 = OpTypeFunction %2
%6 = OpTypeInt 32 1
%7 = OpConstant %6 1
%8 = OpTypeFloat 32
%9 = OpTypeInt 32 0
%10 = OpConstant %9 1
%11 = OpTypeArray %8 %10
%12 = OpTypeStruct %11
%13 = OpTypePointer Uniform %12
%14 = OpVariable %13 Uniform
%15 = OpConstant %6 0
%16 = OpTypePointer Uniform %8
%19 = OpTypeStruct %8
%20 = OpTypePointer PushConstant %19
%21 = OpVariable %20 PushConstant
%22 = OpTypePointer PushConstant %8
%25 = OpTypeBool
%32 = OpTypeVector %8 4
%33 = OpTypePointer Output %32
%34 = OpVariable %33 Output
%35 = OpConstant %9 2
%36 = OpTypeArray %6 %35
%37 = OpTypeStruct %36
%38 = OpTypePointer Uniform %37
%39 = OpVariable %38 Uniform
%40 = OpTypePointer Uniform %6
%4 = OpFunction %2 None %3
%5 = OpLabel
%17 = OpAccessChain %16 %14 %15 %15
%18 = OpLoad %8 %17
%23 = OpAccessChain %22 %21 %15
%24 = OpLoad %8 %23
%26 = OpFOrdGreaterThan %25 %18 %24
%27 = OpSelect %6 %26 %7 %15
%28 = OpExtInst %6 %1 SClamp %7 %27 %7
%29 = OpSLessThanEqual %25 %28 %7
OpSelectionMerge %31 None
OpBranchConditional %29 %30 %54
%30 = OpLabel
%41 = OpAccessChain %40 %39 %15 %15
%42 = OpLoad %6 %41
%43 = OpConvertSToF %8 %42
%44 = OpAccessChain %40 %39 %15 %7
%45 = OpLoad %6 %44
%46 = OpConvertSToF %8 %45
%47 = OpAccessChain %40 %39 %15 %7
%48 = OpLoad %6 %47
%49 = OpConvertSToF %8 %48
%50 = OpAccessChain %40 %39 %15 %15
%51 = OpLoad %6 %50
%52 = OpConvertSToF %8 %51
%53 = OpCompositeConstruct %32 %43 %46 %49 %52
OpStore %34 %53
OpBranch %31
%54 = OpLabel
%55 = OpAccessChain %40 %39 %15 %7
%56 = OpLoad %6 %55
%57 = OpConvertSToF %8 %56
%58 = OpCompositeConstruct %32 %57 %57 %57 %57
OpStore %34 %58
OpBranch %31
%31 = OpLabel
OpReturn
OpFunctionEnd
END

# uniforms for variant

# two
BUFFER variant_two DATA_TYPE float STD140 DATA
2.0
END
# _GLF_uniform_int_values
BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
1 0
END
# _GLF_uniform_float_values
BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] 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_two AS push_constant
BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
BIND BUFFER variant__GLF_uniform_float_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-condition-clamp-min-from-uniform-never-larger.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)
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#version 320 es
precision highp float;

precision highp int;

layout(location = 0) out vec4 _GLF_color;

layout(set = 0, binding = 0) uniform buf0 {
vec2 resolution;
};
vec3 pickColor(int i)
{
return vec3(float(i) / 50.0, float(i) / 120.0, float(i) / 140.0);
}
vec3 mand(float xCoord, float yCoord)
{
float height = resolution.y;
float width = resolution.x;
float xpos = xCoord * 0.1 + (resolution.x * 0.6);
float ypos = yCoord * 0.1 + (resolution.y * 0.4);
float c_re = 0.8 * (xpos - width / 2.0) * 4.0 / width - 0.4;
float c_im = 0.8 * (ypos - height / 2.0) * 4.0 / width;
float x = 0.0, y = 0.0;
if(0.0 > resolution.x)
{
x = 1.0;
y = 1.0;
}
int iteration = bitfieldReverse(int(x));
int k = bitfieldExtract(int(y), bitCount(int(x)), int(y));
int iterationCap = 1000;
do
{
if(x * x + y * y > 4.0)
{
break;
}
float x_new = x * x - y * y + c_re;
y = 2.0 * x * y + c_im;
x = x_new;
iteration ++;
k ++;
}
while(k < bitfieldInsert(iterationCap + (257.0 > resolution.y ? 1 : 0), 0, 0, 0));
if(0.0 > resolution.y)
{
iterationCap += 1;
}
if(iteration < bitfieldInsert(iterationCap, 0, 0, 0))
{
return pickColor(iteration);
}
else
{
return vec3(xCoord / resolution.x, 0.0, yCoord / resolution.y);
}
}
void main()
{
int msb16 = 65536;
uint uselessOutVariable;
vec3 data[16];
for(int i = 0; i < findMSB(16); i ++)
{
for(int j = 0; j < findLSB(16); j ++)
{
data[uaddCarry(uint(4 * j), uint(i), uselessOutVariable)] = mand(gl_FragCoord.x + float(i - bitCount(1)), gl_FragCoord.y + float(j - bitCount(1)));
}
}
vec3 sum = vec3(0.0);
for(int i = bitfieldReverse(0); i < findMSB(msb16); i ++)
{
sum += data[i];
}
sum /= vec3(16.0);
_GLF_color = vec4(sum, 1.0);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"resolution": {
"func": "glUniform2f",
"args": [
256.0,
256.0
],
"binding": 0
}
}
Loading