summaryrefslogtreecommitdiff
path: root/tests/util
diff options
context:
space:
mode:
authorNeil Roberts <nroberts@igalia.com>2018-05-04 12:25:12 +0200
committerAlejandro PiƱeiro <apinheiro@igalia.com>2018-08-21 11:06:12 +0200
commit9e30fb9e9ae15abbb6f516941ffcecafbe7ff4fd (patch)
tree0ae0f57d5974595eb508a50c2887dfb5dc261559 /tests/util
parent9f7d793ad6b936ebaac2ffcd9841d4b430f9728a (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.c37
-rw-r--r--tests/util/piglit-shader.h3
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);