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
 
 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.
 
 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 {
 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;
        };
 
                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.
 
 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];
        }
 
                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 {
 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.
 
 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 {
 The vertex buffer contains metadata about the vertices:
 
        struct vertex_buffer {