Assign job indices in caller, not callee
authorCafe <cafe@not.applicable>
Fri, 28 Jul 2017 00:00:00 +0000 (00:00 +0000)
committerCafe <cafe@not.applicable>
Fri, 28 Jul 2017 18:34:36 +0000 (18:34 +0000)
re.c

diff --git a/re.c b/re.c
index 9591cf54d9d0f88d8975c3c3839122c7df31e804..40b7ba719562873f296c0e0d8bac2eb45857efea 100644 (file)
--- a/re.c
+++ b/re.c
 
 #define SV_OFFSET (0x4000)
 
-/* 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;
 
-void *set_value_helper(int fd, uint64_t out) {
+struct job_descriptor_header* set_value_helper(int fd, uint64_t out) {
        void* packet = galloc(sizeof(struct job_descriptor_header) + sizeof(struct payload_set_value));
 
        struct job_descriptor_header header = {
                .exception_status = JOB_NOT_STARTED,
                .job_descriptor_size = JOB_64_BIT,
-               .job_type = JOB_TYPE_SET_VALUE,
-               .job_index = INDEX_SV,
+               .job_type = JOB_TYPE_SET_VALUE
        };
 
        struct payload_set_value payload = {
@@ -179,17 +172,14 @@ uint32_t upload_vertices(float *vertices, size_t sz)
        return (uint32_t) vb;
 }
 
-void* vertex_tiler_helper(int fd, bool tiler, uint32_t fbd, uint32_t vertex_buffer, uint32_t zero_buffer, uint32_t mode, void *shader, size_t shader_size)
+struct job_descriptor_header* vertex_tiler_helper(int fd, bool tiler, uint32_t fbd, uint32_t vertex_buffer, uint32_t zero_buffer, uint32_t mode, void *shader, size_t shader_size)
 {
        void* packet = galloc(sizeof(struct job_descriptor_header) + sizeof(struct payload_vertex_tiler32));
 
        struct job_descriptor_header header = {
                .exception_status = JOB_NOT_STARTED,
                .job_descriptor_size = JOB_32_BIT,
-               .job_type = tiler ? JOB_TYPE_TILER : JOB_TYPE_VERTEX,
-               .job_index = tiler ? INDEX_TILER : INDEX_VERTEX,
-               .job_dependency_index_1 = tiler ? INDEX_VERTEX : 0,
-               .job_dependency_index_2 = tiler ? 0 : INDEX_SV
+               .job_type = tiler ? JOB_TYPE_TILER : JOB_TYPE_VERTEX
        };
 
        /* TODO */
@@ -359,12 +349,20 @@ uint32_t job_chain_vertex_tiler(int fd, float *vertices, size_t vertex_size, int
 
        sync_gpu(fd, (void*) zero_buffer, zero_buffer, 0x20 << PAGE_SHIFT);
 
-       void *set = set_value_helper(fd, scratchpad + SV_OFFSET);
-       void *vertex = vertex_tiler_helper(fd, false, vertex_fbd, vertex_buffer, zero_buffer, mode, vertex_shader, vs_sz);
-       void *tiler = vertex_tiler_helper(fd, true, vertex_fbd, vertex_buffer, zero_buffer, mode, fragment_shader, fs_sz);
+       struct job_descriptor_header *set = set_value_helper(fd, scratchpad + SV_OFFSET);
+       struct job_descriptor_header *vertex = vertex_tiler_helper(fd, false, vertex_fbd, vertex_buffer, zero_buffer, mode, vertex_shader, vs_sz);
+       struct job_descriptor_header *tiler = vertex_tiler_helper(fd, true, vertex_fbd, vertex_buffer, zero_buffer, mode, fragment_shader, fs_sz);
+
+       set->next_job = (uint32_t) vertex;
+       vertex->next_job = (uint32_t) tiler;
+
+       /* TODO: Determine if these numbers are meaningful */
+       set->job_index = 3;
+       vertex->job_index = 1;
+       tiler->job_index = 2;
 
-       ((struct job_descriptor_header*) set)->next_job = (uint32_t) vertex;
-       ((struct job_descriptor_header*) vertex)->next_job = (uint32_t) tiler;
+       vertex->job_dependency_index_2 = set->job_index;
+       tiler->job_dependency_index_1 = vertex->job_index;
 
        struct base_dependency depNoDep = {
                .atom_id = 0,