Fix intra-atom dependency chains
authorCafe <cafe@not.applicable>
Thu, 27 Jul 2017 00:00:00 +0000 (00:00 +0000)
committerCafe <cafe@not.applicable>
Thu, 27 Jul 2017 15:15:08 +0000 (15:15 +0000)
re.c

diff --git a/re.c b/re.c
index 358ad2bc66e18c7c7e909635baf6081b627dcbcc..73387166c726ee96eae96bb4969488b7bf779e64 100644 (file)
--- a/re.c
+++ b/re.c
 
 #define HEAP_FREE_ADDRESS 0x1DABE0000
 
+/* TODO: allocate these indices dynamically; message passing */
+
+#define INDEX_VERTEX 1
+#define INDEX_TILER 2
+#define INDEX_SV 3
+
+#define INDEX_FRAGMENT 1
+
 int atom_count = 0;
 
 uint64_t framebuffer;
@@ -28,8 +36,8 @@ void *set_value_helper(int fd, uint32_t out) {
                .fault_pointer = 0,
                .job_descriptor_size = 1, /* 64-bit */
                .job_type = JOB_TYPE_SET_VALUE,
-               .job_barrier = /* 1 */ 0, /* set for first in chain? */
-               .job_index = atom_count,
+               .job_barrier = 0, 
+               .job_index = INDEX_SV,
                .job_dependency_index_1 = 0,
                .job_dependency_index_2 = 0,
                .next_job = 0 
@@ -93,7 +101,7 @@ int job_chain_fragment(int fd, uint32_t sv_magic) {
                .job_descriptor_size = JOB_32_BIT,
                .job_type = JOB_TYPE_FRAGMENT,
                .job_barrier = 0, 
-               .job_index = atom_count,
+               .job_index = INDEX_FRAGMENT,
                .job_dependency_index_1 = 0,
                .job_dependency_index_2 = 0,
                .next_job = 0 
@@ -153,6 +161,12 @@ uint64_t import_shader(int fd, uint8_t *shader, size_t sz, bool fragment)
        uint8_t *cpu = mmap_gpu(fd, gpu, pages);
 
        memcpy(cpu, shader, sz);
+       if(!fragment) {
+               for(int i = 40; i < 128; ++i) {
+                       cpu[i] = rand() & 0xFF;
+               }
+       }
+
        sync_gpu(fd, cpu, gpu, sz);
 
        /* TODO: munmap */
@@ -194,9 +208,9 @@ void* vertex_tiler_helper(int fd, bool tiler, uint32_t fbd, uint32_t vertex_buff
                .job_descriptor_size = JOB_32_BIT,
                .job_type = tiler ? JOB_TYPE_TILER : JOB_TYPE_VERTEX,
                .job_barrier = 0, 
-               .job_index = atom_count,
-               .job_dependency_index_1 = 0,
-               .job_dependency_index_2 = 0,
+               .job_index = tiler? INDEX_TILER : INDEX_VERTEX,
+               .job_dependency_index_1 = tiler ? INDEX_VERTEX : 0,
+               .job_dependency_index_2 = tiler ? 0 : INDEX_SV,
                .next_job = 0 
        };