}
static void
-disassemble(const char *filename)
+disassemble(const char *filename, bool verbose)
{
FILE *fp = fopen(filename, "rb");
assert(fp);
}
fclose(fp);
- disassemble_bifrost(stdout, code, filesize, false);
+ disassemble_bifrost(stdout, code, filesize, verbose);
free(code);
}
{
void *memctx = NULL; /* TODO */
struct panfrost_device *dev = bit_initialize(memctx);
- bit_vertex(dev, compile_shader(argv, true));
+
+ float iubo[] = {
+ 0.1, 0.2, 0.3, 0.4
+ };
+
+ float iattr[] = {
+ 0.5, 0.6, 0.7, 0.8
+ };
+
+ float expected[] = {
+ 0.6, 0.8, 1.0, 1.2
+ };
+
+ bit_vertex(dev, compile_shader(argv, true),
+ (uint32_t *) iubo, sizeof(iubo),
+ (uint32_t *) iattr, sizeof(iattr),
+ (uint32_t *) expected, sizeof(expected),
+ BIT_DEBUG_ALL);
+}
+
+static void
+tests(void)
+{
+ void *memctx = NULL; /* TODO */
+ struct panfrost_device *dev = bit_initialize(memctx);
+ bit_fmod(dev, BIT_DEBUG_FAIL);
+ bit_fma(dev, BIT_DEBUG_FAIL);
+ bit_csel(dev, BIT_DEBUG_FAIL);
+ bit_special(dev, BIT_DEBUG_FAIL);
+}
+
+static void
+run(const char *filename)
+{
+ FILE *fp = fopen(filename, "rb");
+ assert(fp);
+
+ fseek(fp, 0, SEEK_END);
+ unsigned filesize = ftell(fp);
+ rewind(fp);
+
+ unsigned char *code = malloc(filesize);
+ unsigned res = fread(code, 1, filesize, fp);
+ if (res != filesize) {
+ printf("Couldn't read full file\n");
+ }
+ fclose(fp);
+
+ void *memctx = NULL; /* TODO */
+ struct panfrost_device *dev = bit_initialize(memctx);
+
+ panfrost_program prog = {
+ .compiled = {
+ .data = code,
+ .size = filesize
+ },
+ };
+
+ bit_vertex(dev, prog, NULL, 0, NULL, 0, NULL, 0, BIT_DEBUG_FAIL);
+
+ free(code);
}
int
if (strcmp(argv[1], "compile") == 0)
compile_shader(&argv[2], false);
else if (strcmp(argv[1], "disasm") == 0)
- disassemble(argv[2]);
+ disassemble(argv[2], false);
+ else if (strcmp(argv[1], "disasm-verbose") == 0)
+ disassemble(argv[2], true);
+ else if (strcmp(argv[1], "tests") == 0)
+ tests();
else if (strcmp(argv[1], "test-vertex") == 0)
test_vertex(&argv[2]);
+ else if (strcmp(argv[1], "run") == 0)
+ run(argv[2]);
else
unreachable("Unknown command. Valid: compile/disasm");