Write up additional findings in jobs.md
authorCafe <cafe@not.applicable>
Sun, 30 Jul 2017 00:00:00 +0000 (00:00 +0000)
committerCafe <cafe@not.applicable>
Sun, 30 Jul 2017 18:59:12 +0000 (18:59 +0000)
jobs.md

diff --git a/jobs.md b/jobs.md
index 1b13dcf0a0c1d2d20bfa3e67a144e8152f8aac5d..08c3ec724730a7af1733eb483aa142390db07826 100644 (file)
--- a/jobs.md
+++ b/jobs.md
@@ -10,7 +10,21 @@ manipulate the driver. Software jobs set BASE_JD_REQ_SOFT_JOB in the
 
 Hardware jobs contain the jc pointer into GPU memory. This points to the
 job descriptor. All hardware jobs begin with the job descriptor header
-which is found in the shim headers.
+which is found in the shim headers. The header contains a field,
+job_type, which must be set according to the job type:
+
+Byte  Job type
+----- ---------
+0     Not started
+1     Null
+2     Set value
+3     Cache flush
+4     Compute
+5     Vertex
+6     (none)
+7     Tiler
+8     Fused
+9     Fragment
 
 This header contains a pointer to the next job, forming sequences of
 hardware jobs.
@@ -29,11 +43,15 @@ Set value jobs follow:
 Fragment jobs follow:
 
        struct tentative_fragment {
-               uint32_t min_tile_coord;
-               uint32_t max_tile_coord;
+               tile_coord_t min_tile_coord;
+               tile_coord_t max_tile_coord;
                uint64_t fragment_fbd;
        };
 
+tile_coord_t is an ordered pair for specifying a tile. It is encoded as
+a uint32_t where bits 0-11 represent the X coordinate and bits 16-27
+represent the Y coordinate.
+
 Tiles are 16x16 pixels. This can be concluded from max_tile_coord in
 known render sizes.
 
@@ -54,6 +72,16 @@ GPU memory):
                uint32_t block2[36];
        }
 
+In tiler jobs, block1[8] encodes the drawing mode used:
+
+Byte  Mode
+----- -----
+0x01  GL_POINTS
+0x02  GL_LINES
+0x08  GL_TRIANGLES
+0x0A  GL_TRIANGLE_STRIP
+0x0C  GL_TRIANGLE_FAN
+
 The shader metadata follows a (very indirect) structure:
 
        struct tentative_shader {
@@ -65,6 +93,10 @@ Shader points directly to the compiled instruction stream. For vertex
 jobs, this is the vertex shader. For tiler jobs, this is the fragment
 shader.
 
+Shaders are 128-bit aligned. The lower 128-bits of the shader metadata
+pointer contains flags. Bit 0 is set for all shaders. Bit 2 is set for
+vertex shaders. Bit 3 is set for fragment shaders.
+
 The vertex buffer contains metadata about the vertices:
 
        struct vertex_buffer {