1. 25 Jun, 2019 15 commits
  2. 24 Jun, 2019 11 commits
  3. 21 Jun, 2019 9 commits
    • Alyssa Rosenzweig's avatar
    • Boris Brezillon's avatar
      panfrost: Remove the panfrost_driver abstraction · 5f81669d
      Boris Brezillon authored
      The non-DRM backend is gone. Let's get rid of the panfrost_driver
      abstraction and call the panfrost_drm_xxx() functions directly.
      Signed-off-by: Boris Brezillon's avatarBoris Brezillon <boris.brezillon@collabora.com>
      Reviewed-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
      5f81669d
    • Boris Brezillon's avatar
      panfrost: Remove the perf counters interface · e8257f3d
      Boris Brezillon authored
      The DRM backend has a dummy implementation and the non-DRM backend is
      gone, so let's remove this perf counter interface.
      Signed-off-by: Boris Brezillon's avatarBoris Brezillon <boris.brezillon@collabora.com>
      Reviewed-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
      e8257f3d
    • Tomeu Vizoso's avatar
      panfrost: ci: Fix parsing of crashed tests · 0bcbccf8
      Tomeu Vizoso authored
      Without this fix, LAVA isn't parsing crashes as failed tests, because
      the shell logging is interspersed within the fake deqp output.
      Signed-off-by: default avatarTomeu Vizoso <tomeu.vizoso@collabora.com>
      Acked-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
      0bcbccf8
    • Alyssa Rosenzweig's avatar
      panfrost: Conditionally submit fragment job · d38ac212
      Alyssa Rosenzweig authored
      If there are no tiling jobs and no clears, there is no need to submit a
      fragment job (relevant for transform feedback).
      Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
      d38ac212
    • Alyssa Rosenzweig's avatar
      panfrost: Implement rasterizer discard · cd5d618b
      Alyssa Rosenzweig authored
      D'aww, look how cute that is now that scoreboarding is setup.
      Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
      cd5d618b
    • Alyssa Rosenzweig's avatar
      panfrost: Track buffer initialization · 26c5a145
      Alyssa Rosenzweig authored
      We want to know if a given slice of a buffer is initialized at a
      particular point in the execution of the program. This is accomplished
      easily enough -- start out uninitialized and upon an operation writing
      to the buffer, mark it initialized.
      
      The motivation is to optimize away expensive operations (like wallpaper
      blits) when reading from an uninitialized buffer; since it's
      uninitialized, the results of these operations are undefined, and it's
      legal to take the fast path ^_^
      Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
      26c5a145
    • Alyssa Rosenzweig's avatar
      panfrost: Implement command stream scoreboarding · f0854745
      Alyssa Rosenzweig authored
      This is a rather complex change, adding a lot of code but ideally
      cleaning up quite a bit as we go.
      
      Within a batch (single frame), there are multiple distinct Mali job
      types: SET_VALUE, VERTEX, TILER, FRAGMENT for the few that we emit right
      now (eventually more for compute and geometry shaders). Each hardware
      job has a mali_job_descriptor_header, which contains three fields of
      interest: job index, a dependencies list, and a next job pointer.
      
      The next job pointer in each job is used to form a linked list of
      submitted jobs. Easy enough.
      
      The job index and dependencies list, however, are used to form a
      dependency graph (a DAG, where each hardware job is a node and each
      dependency is a directed edge). Internally, this sets up a scoreboarding
      data structure for the hardware to dispatch jobs in parallel, enabling
      (for example) vertex shaders from different draws to execute in parallel
      while there are strict dependencies between tiling the geometry of a
      draw and running that vertex shader.
      
      For a while, we got by with an incredible series of total hacks,
      manually coding indices, lists, and dependencies. That worked for a
      moment, but combinatorial kaboom kicked in and it became an
      unmaintainable mess of spaghetti code.
      
      We can do better. This commit explicitly handles the scoreboarding by
      providing high-level manipulation for jobs. Rather than a command like
      "set dependency #2 to index 17", we can express quite naturally "add a
      dependency from job T on job V". Instead of some open-coded logic to
      copy a draw pointer into a delicate context array, we now have an
      elegant exposed API to simple "queue a job of type XYZ".
      
      The design is influenced by both our current requirements (standard ES2
      draws and u_blitter) as well as the need for more complex scheduling in
      the future. For instance, blits can be optimized to use only a tiler
      job, without a vertex job first (since the screen-space vertices are
      known ahead-of-time) -- causing tiler-only jobs. Likewise, when using
      transform feedback with rasterizer discard enabled, vertex jobs are
      created (to run vertex shaders) with no corresponding tiler job. Both of
      these cases break the original model and could not be expressed with the
      open-coded logic. More generally, this will make it easier to add
      support for compute shaders, geometry shaders, and fused jobs (an
      optimization available on Bifrost).
      
      Incidentally, this moves quite a bit of state from the driver context to
      the batch, which helps with Rohan's refactor to eventually permit
      pipelining across framebuffers (one important outstanding optimization
      for FBO-heavy workloads).
      
      v2: Add comment explaining the meaning of "primary batch" as suggested
      by Tomeu (trivial - not reviewed).
      Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
      Reviewed-by: default avatarTomeu Vizoso <tomeu.vizoso@collabora.com>
      Reviewed-by: default avatarRohan Garg <rohan.garg@collabora.com>
      f0854745
    • Tomeu Vizoso's avatar
      panfrost: ci: Exclude two more flip-flop from results · 1cbe2ad3
      Tomeu Vizoso authored
      These three tests pass on RK3399, but fail on RK3288:
      
      dEQP-GLES2.functional.shaders.matrix.div.const_lowp_mat2_mat2_vertex
      dEQP-GLES2.functional.shaders.operator.unary_operator.pre_increment_effect.highp_ivec4_vertex
      dEQP-GLES2.functional.shaders.texture_functions.vertex.texture2dprojlod_vec3
      
      They reliably pass when run individually, but reliably fail when run in
      a full CI run.
      Signed-off-by: default avatarTomeu Vizoso <tomeu.vizoso@collabora.com>
      1cbe2ad3
  4. 20 Jun, 2019 5 commits