Mesa (master): r600g: add multi ring support with dma as first second ring v4

Jerome Glisse glisse at kemper.freedesktop.org
Mon Jan 28 16:44:44 UTC 2013


Module: Mesa
Branch: master
Commit: bff07638a86d36ac826fb287214eda9ce31c02ad
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bff07638a86d36ac826fb287214eda9ce31c02ad

Author: Jerome Glisse <jglisse at redhat.com>
Date:   Mon Jan  7 14:25:11 2013 -0500

r600g: add multi ring support with dma as first second ring v4

We keep track of ring emission order in a stack, whenever we need to
flush we empty the stack in a fifo order. There is few helpers function
for bo mapping and other ring activities that will make sure that
the ring stack is properly flush and submitted.

v2: fix st flush path, and other flush path to properly flush all
    rings if necessary
v3: - improve name of ring helpers
    - make sure that each time a cs is gona be written it endup at
      top of the stack to avoid any issue such as :
      STACK[0] = dma (withbo A,B)
      STACK[1] = gfx (withbo C,D)
      Now if code try to emit a dma command relative to bo C or D
      it will start writting cmd stream into the cs and once it
      reach the point where it adds relocation it will flush.
      At that point the cs will have cmd that don't have proper
      relocation into the relocation buffer and kernel will just
      refuse to run.
v4: - Drop the stack idea as it turn out there is no way to use it
      or benefit from it. Any time the driver start command on other
      ring, it always need to flush the previous ring. So make code
      simpler by not using a stack.

Signed-off-by: Jerome Glisse <jglisse at redhat.com>

---

 src/gallium/drivers/r600/evergreen_compute.c       |   30 ++--
 .../drivers/r600/evergreen_compute_internal.c      |   42 +++---
 src/gallium/drivers/r600/evergreen_hw_context.c    |    4 +-
 src/gallium/drivers/r600/evergreen_state.c         |   56 +++++----
 src/gallium/drivers/r600/r600_asm.c                |    3 +-
 src/gallium/drivers/r600/r600_buffer.c             |   17 ++-
 src/gallium/drivers/r600/r600_hw_context.c         |   51 ++++----
 src/gallium/drivers/r600/r600_pipe.c               |  142 +++++++++++++++++---
 src/gallium/drivers/r600/r600_pipe.h               |   40 +++++-
 src/gallium/drivers/r600/r600_query.c              |   24 ++--
 src/gallium/drivers/r600/r600_shader.c             |    2 +-
 src/gallium/drivers/r600/r600_state.c              |   48 ++++---
 src/gallium/drivers/r600/r600_state_common.c       |   29 +++--
 src/gallium/drivers/r600/r600_texture.c            |   15 +-
 14 files changed, 327 insertions(+), 176 deletions(-)

Diff:   http://cgit.freedesktop.org/mesa/mesa/diff/?id=bff07638a86d36ac826fb287214eda9ce31c02ad



More information about the mesa-commit mailing list