diff options
author | Neil Roberts <nroberts@igalia.com> | 2018-05-04 12:25:12 +0200 |
---|---|---|
committer | Alejandro PiƱeiro <apinheiro@igalia.com> | 2018-08-21 11:06:12 +0200 |
commit | 9e30fb9e9ae15abbb6f516941ffcecafbe7ff4fd (patch) | |
tree | 0ae0f57d5974595eb508a50c2887dfb5dc261559 /tests/util | |
parent | 9f7d793ad6b936ebaac2ffcd9841d4b430f9728a (diff) |
util: Add a utility to assemble SPIR-V sources
Adds piglit_assemble_spirv which invokes spirv-as to assemble a SPIR-V
source. The function is based on a static helper function that was in
shader_runner.
Acked-by: Timothy Arceri <tarceri@itsqueeze.com>
Diffstat (limited to 'tests/util')
-rw-r--r-- | tests/util/piglit-shader.c | 37 | ||||
-rw-r--r-- | tests/util/piglit-shader.h | 3 |
2 files changed, 40 insertions, 0 deletions
diff --git a/tests/util/piglit-shader.c b/tests/util/piglit-shader.c index 7ac5df14d..1938b1576 100644 --- a/tests/util/piglit-shader.c +++ b/tests/util/piglit-shader.c @@ -24,6 +24,7 @@ #include <errno.h> #include "piglit-util-gl.h" +#include "piglit-subprocess.h" void piglit_get_glsl_version(bool *es, int* major, int* minor) { @@ -464,6 +465,42 @@ piglit_build_simple_program_multiple_shaders(GLenum target1, return prog; } +GLuint +piglit_assemble_spirv(GLenum target, + size_t source_length, + const char *source) +{ + char *arguments[] = { + getenv("PIGLIT_SPIRV_AS_BINARY"), + "-o", "-", + NULL + }; + + if (arguments[0] == NULL) + arguments[0] = "spirv-as"; + + uint8_t *binary_source; + size_t binary_source_length; + bool res = piglit_subprocess(arguments, + source_length, + (const uint8_t *) source, + &binary_source_length, + &binary_source); + + if (!res) { + fprintf(stderr, "spirv-as failed\n"); + piglit_report_result(PIGLIT_FAIL); + } + + GLuint shader = glCreateShader(target); + glShaderBinary(1, &shader, GL_SHADER_BINARY_FORMAT_SPIR_V_ARB, + binary_source, binary_source_length); + + free(binary_source); + + return shader; +} + void piglit_require_GLSL(void) { diff --git a/tests/util/piglit-shader.h b/tests/util/piglit-shader.h index 9208451a8..aa29d0994 100644 --- a/tests/util/piglit-shader.h +++ b/tests/util/piglit-shader.h @@ -49,6 +49,9 @@ GLint piglit_build_simple_program_unlinked_multiple_shaders(GLenum target1, GLint piglit_build_simple_program_multiple_shaders(GLenum target1, const char *source1, ...); +GLuint piglit_assemble_spirv(GLenum target, + size_t source_length, + const char *source); extern GLboolean piglit_program_pipeline_check_status(GLuint pipeline); extern GLboolean piglit_program_pipeline_check_status_quiet(GLuint pipeline); |