blob: 906d5271ff7ebcf6019e0f33ea11d69986f3f130 [file] [log] [blame]
/*
* Copyright (c) 2015-2024 The Khronos Group Inc.
* Copyright (c) 2015-2024 Valve Corporation
* Copyright (c) 2015-2024 LunarG, Inc.
* Copyright (c) 2015-2024 Google, 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
*/
#pragma once
static const char kMinimalShaderGlsl[] = R"glsl(
#version 460
void main() {}
)glsl";
static const char kVertexMinimalGlsl[] = R"glsl(
#version 460
void main() {
gl_Position = vec4(1);
}
)glsl";
// for GPU-AV tests, we need the vertex shader to actually run and produce
// work for the next shader stages
static const char kVertexDrawPassthroughGlsl[] = R"glsl(
#version 450
vec2 vertices[3];
void main(){
vertices[0] = vec2(-1.0, -1.0);
vertices[1] = vec2( 1.0, -1.0);
vertices[2] = vec2( 0.0, 1.0);
gl_Position = vec4(vertices[gl_VertexIndex % 3], 0.0, 1.0);
}
)glsl";
static const char kVertexPointSizeGlsl[] = R"glsl(
#version 460
out gl_PerVertex {
vec4 gl_Position;
float gl_PointSize;
};
void main() {
gl_Position = vec4(1);
gl_PointSize = 1.0;
}
)glsl";
static char const kGeometryMinimalGlsl[] = R"glsl(
#version 460
layout(triangles) in;
layout(triangle_strip, max_vertices=3) out;
void main() {
gl_Position = vec4(1);
EmitVertex();
}
)glsl";
static char const kGeometryPointSizeGlsl[] = R"glsl(
#version 460
layout (points) in;
layout (points) out;
layout (max_vertices = 1) out;
in gl_PerVertex {
vec4 gl_Position;
float gl_PointSize;
};
void main() {
gl_Position = vec4(1);
gl_PointSize = 1.0;
EmitVertex();
}
)glsl";
static const char kTessellationControlMinimalGlsl[] = R"glsl(
#version 460
layout(vertices=3) out;
void main() {
gl_TessLevelOuter[0] = gl_TessLevelOuter[1] = gl_TessLevelOuter[2] = 1;
gl_TessLevelInner[0] = 1;
}
)glsl";
static const char kTessellationEvalMinimalGlsl[] = R"glsl(
#version 460
layout(triangles, equal_spacing, cw) in;
void main() { gl_Position = vec4(1); }
)glsl";
static const char kFragmentMinimalGlsl[] = R"glsl(
#version 460
layout(location = 0) out vec4 uFragColor;
void main(){
uFragColor = vec4(0,1,0,1);
}
)glsl";
static const char kFragmentSamplerGlsl[] = R"glsl(
#version 460
layout(set=0, binding=0) uniform sampler2D s;
layout(location=0) out vec4 x;
void main(){
x = texture(s, vec2(1));
}
)glsl";
static const char kFragmentUniformGlsl[] = R"glsl(
#version 460
layout(set=0) layout(binding=0) uniform foo { int x; int y; } bar;
layout(location=0) out vec4 x;
void main(){
x = vec4(bar.y);
}
)glsl";
static char const kFragmentSubpassLoadGlsl[] = R"glsl(
#version 460
layout(input_attachment_index=0, set=0, binding=0) uniform subpassInput x;
void main() {
vec4 color = subpassLoad(x);
}
)glsl";
[[maybe_unused]] static const char *kTaskMinimalGlsl = R"glsl(
#version 460
#extension GL_EXT_mesh_shader : require // Requires SPIR-V 1.5 (Vulkan 1.2)
layout (local_size_x=1, local_size_y=1, local_size_z=1) in;
void main() {
EmitMeshTasksEXT(1u, 1u, 1u);
}
)glsl";
[[maybe_unused]] static const char *kMeshMinimalGlsl = R"glsl(
#version 460
#extension GL_EXT_mesh_shader : require // Requires SPIR-V 1.5 (Vulkan 1.2)
layout(max_vertices = 3, max_primitives=1) out;
layout(triangles) out;
void main() {}
)glsl";
[[maybe_unused]] static const char *kRayTracingMinimalGlsl = R"glsl(
#version 460
#extension GL_EXT_ray_tracing : require // Requires SPIR-V 1.5 (Vulkan 1.2)
void main() {}
)glsl";
[[maybe_unused]] static char const kRayTracingPayloadMinimalGlsl[] = R"glsl(
#version 460
#extension GL_EXT_ray_tracing : enable
layout(location = 0) rayPayloadInEXT float hitValue;
void main() {
hitValue = 1.0;
}
)glsl";
[[maybe_unused]] static const char *kRayTracingNVMinimalGlsl = R"glsl(
#version 460
#extension GL_NV_ray_tracing : require
void main() {}
)glsl";
static char const kShaderTileImageDepthReadSpv[] = R"(
OpCapability Shader
OpCapability TileImageDepthReadAccessEXT
OpExtension "SPV_EXT_shader_tile_image"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %depth_output
OpExecutionMode %main OriginUpperLeft
OpExecutionMode %main EarlyFragmentTests
OpSource GLSL 450
OpSourceExtension "GL_EXT_shader_tile_image"
OpName %main "main"
OpName %depth "depth"
OpName %depth_output "depth_output"
OpDecorate %depth_output Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%_ptr_Function_float = OpTypePointer Function %float
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%depth_output = OpVariable %_ptr_Output_v4float Output
%main = OpFunction %void None %3
%5 = OpLabel
%depth = OpVariable %_ptr_Function_float Function
%9 = OpDepthAttachmentReadEXT %float
OpStore %depth %9
%13 = OpLoad %float %depth
%14 = OpCompositeConstruct %v4float %13 %13 %13 %13
OpStore %depth_output %14
OpReturn
OpFunctionEnd
)";
static char const kShaderTileImageStencilReadSpv[] = R"(
OpCapability Shader
OpCapability TileImageStencilReadAccessEXT
OpExtension "SPV_EXT_shader_tile_image"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %stencil_output
OpExecutionMode %main OriginUpperLeft
OpExecutionMode %main EarlyFragmentTests
OpSource GLSL 450
OpSourceExtension "GL_EXT_shader_tile_image"
OpName %main "main"
OpName %stencil "stencil"
OpName %stencil_output "stencil_output"
OpDecorate %9 RelaxedPrecision
OpDecorate %stencil_output Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%_ptr_Function_uint = OpTypePointer Function %uint
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%stencil_output = OpVariable %_ptr_Output_v4float Output
%main = OpFunction %void None %3
%5 = OpLabel
%stencil = OpVariable %_ptr_Function_uint Function
%9 = OpStencilAttachmentReadEXT %uint
OpStore %stencil %9
%14 = OpLoad %uint %stencil
%15 = OpConvertUToF %float %14
%16 = OpCompositeConstruct %v4float %15 %15 %15 %15
OpStore %stencil_output %16
OpReturn
OpFunctionEnd
)";
static char const kShaderTileImageColorReadSpv[] = R"(
OpCapability Shader
OpCapability TileImageColorReadAccessEXT
OpExtension "SPV_EXT_shader_tile_image"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %color_output
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 450
OpSourceExtension "GL_EXT_shader_tile_image"
OpName %main "main"
OpName %color_output "color_output"
OpName %color_f "color_f"
OpDecorate %color_output Location 0
OpDecorate %color_f Location 1
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%color_output = OpVariable %_ptr_Output_v4float Output
%10 = OpTypeImage %float TileImageDataEXT 0 0 0 2 Unknown
%_ptr_TileImageEXT_10 = OpTypePointer TileImageEXT %10
%color_f = OpVariable %_ptr_TileImageEXT_10 TileImageEXT
%main = OpFunction %void None %3
%5 = OpLabel
%13 = OpLoad %10 %color_f
%14 = OpColorAttachmentReadEXT %v4float %13
OpStore %color_output %14
OpReturn
OpFunctionEnd
)";
static char const kShaderTileImageDepthStencilReadSpv[] = R"(
OpCapability Shader
OpCapability TileImageDepthReadAccessEXT
OpCapability TileImageStencilReadAccessEXT
OpExtension "SPV_EXT_shader_tile_image"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %uFragColor
OpExecutionMode %main OriginUpperLeft
OpExecutionMode %main EarlyFragmentTests
OpSource GLSL 450
OpSourceExtension "GL_EXT_shader_tile_image"
OpName %main "main"
OpName %depth "depth"
OpName %stencil "stencil"
OpName %uFragColor "uFragColor"
OpDecorate %13 RelaxedPrecision
OpDecorate %uFragColor Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%_ptr_Function_float = OpTypePointer Function %float
%uint = OpTypeInt 32 0
%_ptr_Function_uint = OpTypePointer Function %uint
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%uFragColor = OpVariable %_ptr_Output_v4float Output
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%main = OpFunction %void None %3
%5 = OpLabel
%depth = OpVariable %_ptr_Function_float Function
%stencil = OpVariable %_ptr_Function_uint Function
%9 = OpDepthAttachmentReadEXT %float
OpStore %depth %9
%13 = OpStencilAttachmentReadEXT %uint
OpStore %stencil %13
%17 = OpLoad %float %depth
%18 = OpLoad %uint %stencil
%19 = OpConvertUToF %float %18
%22 = OpCompositeConstruct %v4float %17 %19 %float_0 %float_1
OpStore %uFragColor %22
OpReturn
OpFunctionEnd
)";
[[maybe_unused]] static const char kRayGenGlsl[] = R"glsl(
#version 460 core
#extension GL_EXT_ray_tracing : enable
layout(set = 0, binding = 0, rgba8) uniform image2D image;
layout(set = 0, binding = 1) uniform accelerationStructureEXT as;
layout(location = 0) rayPayloadEXT float payload;
void main()
{
vec4 col = vec4(0, 0, 0, 1);
vec3 origin = vec3(float(gl_LaunchIDEXT.x)/float(gl_LaunchSizeEXT.x), float(gl_LaunchIDEXT.y)/float(gl_LaunchSizeEXT.y), 1.0);
vec3 dir = vec3(0.0, 0.0, -1.0);
payload = 0.5;
traceRayEXT(as, gl_RayFlagsCullBackFacingTrianglesEXT, 0xff, 0, 1, 0, origin, 0.0, dir, 1000.0, 0);
col.y = payload;
imageStore(image, ivec2(gl_LaunchIDEXT.xy), col);
}
)glsl";
[[maybe_unused]] static char const *kMissGlsl = kRayTracingPayloadMinimalGlsl;