gallium/drivers: Sanitize NULL checks into canonical form
[mesa.git] / src / gallium / drivers / radeon / r600_cs.h
index c3af3decfcc8dc391ebdfac7b33078d46b7dcc40..ad067ce4e76dff5b6841fa03b6a36b7a5aefda60 100644 (file)
 #include "r600_pipe_common.h"
 #include "r600d_common.h"
 
-static INLINE uint64_t r600_resource_va(struct pipe_screen *screen,
-                                       struct pipe_resource *resource)
-{
-       struct r600_common_screen *rscreen = (struct r600_common_screen*)screen;
-       struct r600_resource *rresource = (struct r600_resource*)resource;
-
-       return rscreen->ws->buffer_get_virtual_address(rresource->cs_buf);
-}
-
-static INLINE unsigned r600_context_bo_reloc(struct r600_common_context *rctx,
-                                            struct r600_ring *ring,
-                                            struct r600_resource *rbo,
-                                            enum radeon_bo_usage usage)
+/**
+ * Add a buffer to the buffer list for the given command stream (CS).
+ *
+ * All buffers used by a CS must be added to the list. This tells the kernel
+ * driver which buffers are used by GPU commands. Other buffers can
+ * be swapped out (not accessible) during execution.
+ *
+ * The buffer list becomes empty after every context flush and must be
+ * rebuilt.
+ */
+static inline unsigned radeon_add_to_buffer_list(struct r600_common_context *rctx,
+                                                struct r600_ring *ring,
+                                                struct r600_resource *rbo,
+                                                enum radeon_bo_usage usage,
+                                                enum radeon_bo_priority priority)
 {
        assert(usage);
-
-       /* Make sure that all previous rings are flushed so that everything
-        * looks serialized from the driver point of view.
-        */
-       if (!ring->flushing) {
-               if (ring == &rctx->rings.gfx) {
-                       if (rctx->rings.dma.cs) {
-                               /* flush dma ring */
-                               rctx->rings.dma.flush(rctx, RADEON_FLUSH_ASYNC);
-                       }
-               } else {
-                       /* flush gfx ring */
-                       rctx->rings.gfx.flush(rctx, RADEON_FLUSH_ASYNC);
-               }
-       }
-       return rctx->ws->cs_add_reloc(ring->cs, rbo->cs_buf, usage, rbo->domains) * 4;
+       return rctx->ws->cs_add_buffer(ring->cs, rbo->cs_buf, usage,
+                                     rbo->domains, priority) * 4;
 }
 
-static INLINE void r600_emit_reloc(struct r600_common_context *rctx,
+static inline void r600_emit_reloc(struct r600_common_context *rctx,
                                   struct r600_ring *ring, struct r600_resource *rbo,
-                                  enum radeon_bo_usage usage)
+                                  enum radeon_bo_usage usage,
+                                  enum radeon_bo_priority priority)
 {
        struct radeon_winsys_cs *cs = ring->cs;
        bool has_vm = ((struct r600_common_screen*)rctx->b.screen)->info.r600_virtual_address;
-       unsigned reloc = r600_context_bo_reloc(rctx, ring, rbo, usage);
+       unsigned reloc = radeon_add_to_buffer_list(rctx, ring, rbo, usage, priority);
 
        if (!has_vm) {
                radeon_emit(cs, PKT3(PKT3_NOP, 0, 0));
@@ -80,45 +69,59 @@ static INLINE void r600_emit_reloc(struct r600_common_context *rctx,
        }
 }
 
-static INLINE void r600_write_config_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
+static inline void radeon_set_config_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
 {
        assert(reg < R600_CONTEXT_REG_OFFSET);
-       assert(cs->cdw+2+num <= RADEON_MAX_CMDBUF_DWORDS);
+       assert(cs->cdw+2+num <= cs->max_dw);
        radeon_emit(cs, PKT3(PKT3_SET_CONFIG_REG, num, 0));
        radeon_emit(cs, (reg - R600_CONFIG_REG_OFFSET) >> 2);
 }
 
-static INLINE void r600_write_config_reg(struct radeon_winsys_cs *cs, unsigned reg, unsigned value)
+static inline void radeon_set_config_reg(struct radeon_winsys_cs *cs, unsigned reg, unsigned value)
 {
-       r600_write_config_reg_seq(cs, reg, 1);
+       radeon_set_config_reg_seq(cs, reg, 1);
        radeon_emit(cs, value);
 }
 
-static INLINE void r600_write_context_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
+static inline void radeon_set_context_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
 {
        assert(reg >= R600_CONTEXT_REG_OFFSET);
-       assert(cs->cdw+2+num <= RADEON_MAX_CMDBUF_DWORDS);
+       assert(cs->cdw+2+num <= cs->max_dw);
        radeon_emit(cs, PKT3(PKT3_SET_CONTEXT_REG, num, 0));
        radeon_emit(cs, (reg - R600_CONTEXT_REG_OFFSET) >> 2);
 }
 
-static INLINE void r600_write_context_reg(struct radeon_winsys_cs *cs, unsigned reg, unsigned value)
+static inline void radeon_set_context_reg(struct radeon_winsys_cs *cs, unsigned reg, unsigned value)
+{
+       radeon_set_context_reg_seq(cs, reg, 1);
+       radeon_emit(cs, value);
+}
+
+static inline void radeon_set_sh_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
+{
+       assert(reg >= SI_SH_REG_OFFSET && reg < SI_SH_REG_END);
+       assert(cs->cdw+2+num <= cs->max_dw);
+       radeon_emit(cs, PKT3(PKT3_SET_SH_REG, num, 0));
+       radeon_emit(cs, (reg - SI_SH_REG_OFFSET) >> 2);
+}
+
+static inline void radeon_set_sh_reg(struct radeon_winsys_cs *cs, unsigned reg, unsigned value)
 {
-       r600_write_context_reg_seq(cs, reg, 1);
+       radeon_set_sh_reg_seq(cs, reg, 1);
        radeon_emit(cs, value);
 }
 
-static INLINE void cik_write_uconfig_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
+static inline void radeon_set_uconfig_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
 {
        assert(reg >= CIK_UCONFIG_REG_OFFSET && reg < CIK_UCONFIG_REG_END);
-       assert(cs->cdw+2+num <= RADEON_MAX_CMDBUF_DWORDS);
+       assert(cs->cdw+2+num <= cs->max_dw);
        radeon_emit(cs, PKT3(PKT3_SET_UCONFIG_REG, num, 0));
        radeon_emit(cs, (reg - CIK_UCONFIG_REG_OFFSET) >> 2);
 }
 
-static INLINE void cik_write_uconfig_reg(struct radeon_winsys_cs *cs, unsigned reg, unsigned value)
+static inline void radeon_set_uconfig_reg(struct radeon_winsys_cs *cs, unsigned reg, unsigned value)
 {
-       cik_write_uconfig_reg_seq(cs, reg, 1);
+       radeon_set_uconfig_reg_seq(cs, reg, 1);
        radeon_emit(cs, value);
 }