Remove additional globals
authorCafe <cafe@not.applicable>
Fri, 28 Jul 2017 00:00:00 +0000 (00:00 +0000)
committerCafe <cafe@not.applicable>
Fri, 28 Jul 2017 16:22:04 +0000 (16:22 +0000)
re.c

diff --git a/re.c b/re.c
index ea8f3319edcd619f98f31e4c2509647ce8f7821d..9591cf54d9d0f88d8975c3c3839122c7df31e804 100644 (file)
--- a/re.c
+++ b/re.c
@@ -10,8 +10,6 @@
 #include "memory.h"
 #include "../oolong/chai-notes.h"
 
-uint64_t heap_free_address;
-
 #define SV_OFFSET (0x4000)
 
 /* TODO: allocate these indices dynamically; message passing */
@@ -24,11 +22,6 @@ uint64_t heap_free_address;
 
 int atom_count = 0;
 
-uint64_t framebuffer;
-
-uint64_t last_fragment;
-uint64_t last_tiler;
-
 void *set_value_helper(int fd, uint64_t out) {
        void* packet = galloc(sizeof(struct job_descriptor_header) + sizeof(struct payload_set_value));
 
@@ -51,10 +44,9 @@ void *set_value_helper(int fd, uint64_t out) {
        return packet;
 }
 
-uint64_t make_mfbd(bool tiler, uint64_t scratchpad)
+uint64_t make_mfbd(bool tiler, uint64_t heap_free_address, uint64_t scratchpad)
 {
        struct tentative_mfbd *mfbd = galloc(sizeof(struct tentative_mfbd));
-       memset(mfbd, 0, sizeof(struct tentative_mfbd));
 
        mfbd->block2[0] = scratchpad + SV_OFFSET;
        mfbd->block2[1] = scratchpad + SV_OFFSET + 0x200;
@@ -99,7 +91,7 @@ uint64_t make_mfbd(bool tiler, uint64_t scratchpad)
        return (uint64_t) (uint32_t) mfbd | MFBD | (tiler ? FBD_VERTEX_TILER : FBD_FRAGMENT);
 }
 
-int job_chain_fragment(int fd, uint64_t scratchpad) {
+uint32_t job_chain_fragment(int fd, uint64_t framebuffer, uint64_t heap_free_address, uint64_t scratchpad) {
        void* packet = galloc(sizeof(struct job_descriptor_header) + sizeof(struct payload_fragment));
 
        struct job_descriptor_header header = {
@@ -112,7 +104,7 @@ int job_chain_fragment(int fd, uint64_t scratchpad) {
        struct payload_fragment payload = {
                .min_tile_coord = MAKE_TILE_COORD(0, 0, 0),
                .max_tile_coord = MAKE_TILE_COORD(29, 45, 0),
-               .fragment_fbd = make_mfbd(false, scratchpad)
+               .fragment_fbd = make_mfbd(false, heap_free_address, scratchpad)
        };
 
        memcpy(packet, &header, sizeof(header));
@@ -149,9 +141,7 @@ int job_chain_fragment(int fd, uint64_t scratchpad) {
 
        submit_job(fd, job);
 
-       last_fragment = (uint32_t) packet;
-
-       return 0;
+       return (uint32_t) packet;
 }
 
 uint64_t import_shader(int fd, uint8_t *shader, size_t sz, bool fragment)
@@ -358,10 +348,10 @@ void* vertex_tiler_helper(int fd, bool tiler, uint32_t fbd, uint32_t vertex_buff
        return packet;
 }
 
-int job_chain_vertex_tiler(int fd, float *vertices, size_t vertex_size, int mode, void* vertex_shader, size_t vs_sz, void *fragment_shader, size_t fs_sz, uint64_t scratchpad)
+uint32_t job_chain_vertex_tiler(int fd, float *vertices, size_t vertex_size, int mode, void* vertex_shader, size_t vs_sz, void *fragment_shader, size_t fs_sz, uint64_t heap_free_address, uint64_t scratchpad)
 {
        uint32_t vertex_buffer = upload_vertices(vertices, vertex_size);
-       uint32_t vertex_fbd = (uint32_t) make_mfbd(true, scratchpad);
+       uint32_t vertex_fbd = (uint32_t) make_mfbd(true, heap_free_address, scratchpad);
 
        uint32_t zero_buffer = (uint32_t) alloc_gpu_pages(fd, 0x20,
                        0x3800 | BASE_MEM_PROT_CPU_RD |
@@ -396,19 +386,17 @@ int job_chain_vertex_tiler(int fd, float *vertices, size_t vertex_size, int mode
 
        submit_job(fd, job);
 
-       last_tiler = (uint32_t) tiler;
-
-       return 0;
+       return (uint32_t) tiler;
 }
 
-void job_chain_replay(int fd)
+void job_chain_replay(int fd, uint32_t tiler_jc, uint32_t fragment_jc, uint64_t heap_free_address, uint64_t framebuffer)
 {
        struct base_jd_replay_payload *payload;
 
        payload = (struct base_jd_replay_payload*) galloc(sizeof(*payload));
 
-       payload->tiler_jc_list = last_tiler;
-       payload->fragment_jc = last_fragment;
+       payload->tiler_jc_list = tiler_jc;
+       payload->fragment_jc = fragment_jc;
        payload->tiler_heap_free = heap_free_address;
        payload->fragment_hierarchy_mask = 0;
        payload->tiler_hierarchy_mask = 0;
@@ -459,14 +447,13 @@ int main()
        stream_create(fd, "malitl_339_0x53f78");
 
        uint64_t scratchpad = alloc_gpu_pages(fd, 8, 0xC);
-
-       heap_free_address = alloc_gpu_heap(fd, 0x8000); 
+       uint64_t heap_free_address = alloc_gpu_heap(fd, 0x8000);        
 
        // size_t fb_size = 29 * 16 * 45 * 16 * 4 * 2;
-       // framebuffer = (uint64_t) (uint32_t) galloc(fb_size);
+       // uint64_t framebuffer = (uint64_t) (uint32_t) galloc(fb_size);
        
        /* Fake framebuffer to trap accesses */
-       framebuffer = 0x1CAFE0000;
+       uint64_t framebuffer = 0x1CAFE0000;
 
        float vertices[] = {
                0.0, 0.0, 0.0,
@@ -478,14 +465,16 @@ int main()
 
 #include "../shader_hex.h"
 
-       job_chain_vertex_tiler(fd,
+       uint32_t tiler_jc =
+               job_chain_vertex_tiler(fd,
                        vertices, sizeof(vertices), CHAI_TRIANGLE_FAN,
                        vertex_shader, sizeof(vertex_shader),
                        fragment_shader, sizeof(fragment_shader),
-                       scratchpad);
+                       heap_free_address, scratchpad);
+
+       uint32_t fragment_jc = job_chain_fragment(fd, framebuffer, heap_free_address, scratchpad);
 
-       //job_chain_fragment(fd, scratchpad);
-       //job_chain_replay(fd);
+       job_chain_replay(fd, tiler_jc, fragment_jc, heap_free_address, framebuffer);
        sync_gpu(fd, (uint8_t*) cbma_top, cbma_top, cbma_bottom - cbma_top);
        flush_job_queue(fd);