[Piglit] [PATCH 04/25] shader_runner/spirv: add vertex shader passthrough support on SPIR-V
Alejandro PiƱeiro
apinheiro at igalia.com
Tue Apr 17 14:37:10 UTC 2018
Adds a equivalent to the existing GLSL
passthrough_vertex_shader_source, but with an SPIR-V assembly one. As
it is somewhat big, moved to a different header.
An alternative would be kept the assembly on a file, and open it when
required.
---
tests/shaders/shader_runner.c | 8 +++++
tests/shaders/shader_runner_vs_passthrough_spv.h | 45 ++++++++++++++++++++++++
2 files changed, 53 insertions(+)
create mode 100644 tests/shaders/shader_runner_vs_passthrough_spv.h
diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index b1cd3529a..f7c6ede60 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -34,6 +34,8 @@
#include "shader_runner_gles_workarounds.h"
#include "parser_utils.h"
+#include "shader_runner_vs_passthrough_spv.h"
+
#define DEFAULT_WINDOW_WIDTH 250
#define DEFAULT_WINDOW_HEIGHT 250
@@ -1124,6 +1126,12 @@ leave_state(enum states state, const char *line, const char *script_name)
return compile_glsl(GL_VERTEX_SHADER);
case vertex_shader_passthrough:
+ if (spirv_replaces_glsl) {
+ shader_string = (char *) passthrough_vertex_shader_source_spv;
+ shader_string_size = strlen(passthrough_vertex_shader_source_spv);
+
+ return assemble_spirv(GL_VERTEX_SHADER);
+ }
return compile_glsl(GL_VERTEX_SHADER);
case vertex_program:
diff --git a/tests/shaders/shader_runner_vs_passthrough_spv.h b/tests/shaders/shader_runner_vs_passthrough_spv.h
new file mode 100644
index 000000000..07bdbfabe
--- /dev/null
+++ b/tests/shaders/shader_runner_vs_passthrough_spv.h
@@ -0,0 +1,45 @@
+static const char passthrough_vertex_shader_source_spv[] =
+ "; SPIR-V\n"
+ "; Version: 1.0\n"
+ "; Generator: Khronos Glslang Reference Front End; 6\n"
+ "; Bound: 24\n"
+ "; Schema: 0\n"
+ " OpCapability Shader\n"
+ " %1 = OpExtInstImport \"GLSL.std.450\"\n"
+ " OpMemoryModel Logical GLSL450\n"
+ " OpEntryPoint Vertex %main \"main\" %_ %piglit_vertex %gl_VertexID %gl_InstanceID\n"
+ " OpSource GLSL 450\n"
+ " OpMemberDecorate %gl_PerVertex 0 BuiltIn Position\n"
+ " OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize\n"
+ " OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance\n"
+ " OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance\n"
+ " OpDecorate %gl_PerVertex Block\n"
+ " OpDecorate %piglit_vertex Location 0\n"
+ " OpDecorate %gl_VertexID BuiltIn VertexId\n"
+ " OpDecorate %gl_InstanceID BuiltIn InstanceId\n"
+ " %void = OpTypeVoid\n"
+ " %3 = OpTypeFunction %void\n"
+ " %float = OpTypeFloat 32\n"
+ " %v4float = OpTypeVector %float 4\n"
+ " %uint = OpTypeInt 32 0\n"
+ " %uint_1 = OpConstant %uint 1\n"
+ "%_arr_float_uint_1 = OpTypeArray %float %uint_1\n"
+ "%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1\n"
+ "%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex\n"
+ " %_ = OpVariable %_ptr_Output_gl_PerVertex Output\n"
+ " %int = OpTypeInt 32 1\n"
+ " %int_0 = OpConstant %int 0\n"
+ "%_ptr_Input_v4float = OpTypePointer Input %v4float\n"
+ "%piglit_vertex = OpVariable %_ptr_Input_v4float Input\n"
+ "%_ptr_Output_v4float = OpTypePointer Output %v4float\n"
+ "%_ptr_Input_int = OpTypePointer Input %int\n"
+ "%gl_VertexID = OpVariable %_ptr_Input_int Input\n"
+ "%gl_InstanceID = OpVariable %_ptr_Input_int Input\n"
+ " %main = OpFunction %void None %3\n"
+ " %5 = OpLabel\n"
+ " %18 = OpLoad %v4float %piglit_vertex\n"
+ " %20 = OpAccessChain %_ptr_Output_v4float %_ %int_0\n"
+ " OpStore %20 %18\n"
+ " OpReturn\n"
+ " OpFunctionEnd\n"
+ ;
--
2.14.1
More information about the Piglit
mailing list