Acked-by: Timothy Arceri <tarceri@itsqueeze.com>tags/18.1-branchpoint
@@ -1,6 +1,5 @@ | |||
C_SOURCES := \ | |||
r600_buffer_common.c \ | |||
r600_cs.h \ | |||
r600_gpu_load.c \ | |||
r600_perfcounter.c \ | |||
r600_pipe_common.h \ |
@@ -23,7 +23,6 @@ | |||
*/ | |||
#include "radeonsi/si_pipe.h" | |||
#include "r600_cs.h" | |||
#include "util/u_memory.h" | |||
#include "util/u_upload_mgr.h" | |||
#include <inttypes.h> |
@@ -26,7 +26,6 @@ | |||
#include "radeonsi/si_pipe.h" | |||
#include "r600_query.h" | |||
#include "r600_cs.h" | |||
#include "util/u_memory.h" | |||
#include "util/u_upload_mgr.h" | |||
#include "util/os_time.h" |
@@ -24,7 +24,6 @@ | |||
*/ | |||
#include "radeonsi/si_pipe.h" | |||
#include "r600_cs.h" | |||
#include "r600_query.h" | |||
#include "util/u_format.h" | |||
#include "util/u_log.h" |
@@ -26,90 +26,11 @@ | |||
* This file contains helpers for writing commands to commands streams. | |||
*/ | |||
#ifndef R600_CS_H | |||
#define R600_CS_H | |||
#ifndef SI_BUILD_PM4_H | |||
#define SI_BUILD_PM4_H | |||
#include "radeonsi/si_pipe.h" | |||
#include "amd/common/sid.h" | |||
/** | |||
* Return true if there is enough memory in VRAM and GTT for the buffers | |||
* added so far. | |||
* | |||
* \param vram VRAM memory size not added to the buffer list yet | |||
* \param gtt GTT memory size not added to the buffer list yet | |||
*/ | |||
static inline bool | |||
radeon_cs_memory_below_limit(struct si_screen *screen, | |||
struct radeon_winsys_cs *cs, | |||
uint64_t vram, uint64_t gtt) | |||
{ | |||
vram += cs->used_vram; | |||
gtt += cs->used_gart; | |||
/* Anything that goes above the VRAM size should go to GTT. */ | |||
if (vram > screen->info.vram_size) | |||
gtt += vram - screen->info.vram_size; | |||
/* Now we just need to check if we have enough GTT. */ | |||
return gtt < screen->info.gart_size * 0.7; | |||
} | |||
/** | |||
* 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 void radeon_add_to_buffer_list(struct si_context *sctx, | |||
struct radeon_winsys_cs *cs, | |||
struct r600_resource *rbo, | |||
enum radeon_bo_usage usage, | |||
enum radeon_bo_priority priority) | |||
{ | |||
assert(usage); | |||
sctx->b.ws->cs_add_buffer( | |||
cs, rbo->buf, | |||
(enum radeon_bo_usage)(usage | RADEON_USAGE_SYNCHRONIZED), | |||
rbo->domains, priority); | |||
} | |||
/** | |||
* Same as above, but also checks memory usage and flushes the context | |||
* accordingly. | |||
* | |||
* When this SHOULD NOT be used: | |||
* | |||
* - if si_context_add_resource_size has been called for the buffer | |||
* followed by *_need_cs_space for checking the memory usage | |||
* | |||
* - if si_need_dma_space has been called for the buffer | |||
* | |||
* - when emitting state packets and draw packets (because preceding packets | |||
* can't be re-emitted at that point) | |||
* | |||
* - if shader resource "enabled_mask" is not up-to-date or there is | |||
* a different constraint disallowing a context flush | |||
*/ | |||
static inline void | |||
radeon_add_to_gfx_buffer_list_check_mem(struct si_context *sctx, | |||
struct r600_resource *rbo, | |||
enum radeon_bo_usage usage, | |||
enum radeon_bo_priority priority, | |||
bool check_mem) | |||
{ | |||
if (check_mem && | |||
!radeon_cs_memory_below_limit(sctx->screen, sctx->b.gfx_cs, | |||
sctx->b.vram + rbo->vram_usage, | |||
sctx->b.gtt + rbo->gart_usage)) | |||
si_flush_gfx_cs(sctx, PIPE_FLUSH_ASYNC, NULL); | |||
radeon_add_to_buffer_list(sctx, sctx->b.gfx_cs, rbo, usage, priority); | |||
} | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
static inline void radeon_set_config_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num) | |||
{ |
@@ -29,10 +29,8 @@ | |||
#include "util/u_upload_mgr.h" | |||
#include "amd_kernel_code_t.h" | |||
#include "radeon/r600_cs.h" | |||
#include "si_pipe.h" | |||
#include "si_build_pm4.h" | |||
#include "si_compute.h" | |||
#include "sid.h" | |||
#define COMPUTE_DBG(rscreen, fmt, args...) \ | |||
do { \ |
@@ -24,7 +24,6 @@ | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
#include "radeon/r600_cs.h" | |||
/* Recommended maximum sizes for optimal performance. | |||
* Fall back to compute or SDMA if the size is greater. |
@@ -53,7 +53,6 @@ | |||
* Sampler states are never unbound except when FMASK is bound. | |||
*/ | |||
#include "radeon/r600_cs.h" | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
#include "gfx9d.h" |
@@ -23,7 +23,6 @@ | |||
*/ | |||
#include "si_pipe.h" | |||
#include "radeon/r600_cs.h" | |||
static void si_dma_emit_wait_idle(struct si_context *sctx) | |||
{ |
@@ -30,8 +30,7 @@ | |||
#include "util/u_queue.h" | |||
#include "util/u_upload_mgr.h" | |||
#include "si_pipe.h" | |||
#include "radeon/r600_cs.h" | |||
#include "si_build_pm4.h" | |||
struct si_fine_fence { | |||
struct r600_resource *buf; |
@@ -24,7 +24,6 @@ | |||
*/ | |||
#include "si_pipe.h" | |||
#include "radeon/r600_cs.h" | |||
#include "util/os_time.h" | |||
@@ -22,12 +22,10 @@ | |||
* SOFTWARE. | |||
*/ | |||
#include "radeon/r600_cs.h" | |||
#include "si_build_pm4.h" | |||
#include "radeon/r600_query.h" | |||
#include "util/u_memory.h" | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
enum si_pc_reg_layout { | |||
/* All secondary selector dwords follow as one block after the primary |
@@ -1063,6 +1063,85 @@ static inline unsigned si_get_total_colormask(struct si_context *sctx) | |||
return colormask; | |||
} | |||
/** | |||
* Return true if there is enough memory in VRAM and GTT for the buffers | |||
* added so far. | |||
* | |||
* \param vram VRAM memory size not added to the buffer list yet | |||
* \param gtt GTT memory size not added to the buffer list yet | |||
*/ | |||
static inline bool | |||
radeon_cs_memory_below_limit(struct si_screen *screen, | |||
struct radeon_winsys_cs *cs, | |||
uint64_t vram, uint64_t gtt) | |||
{ | |||
vram += cs->used_vram; | |||
gtt += cs->used_gart; | |||
/* Anything that goes above the VRAM size should go to GTT. */ | |||
if (vram > screen->info.vram_size) | |||
gtt += vram - screen->info.vram_size; | |||
/* Now we just need to check if we have enough GTT. */ | |||
return gtt < screen->info.gart_size * 0.7; | |||
} | |||
/** | |||
* 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 void radeon_add_to_buffer_list(struct si_context *sctx, | |||
struct radeon_winsys_cs *cs, | |||
struct r600_resource *rbo, | |||
enum radeon_bo_usage usage, | |||
enum radeon_bo_priority priority) | |||
{ | |||
assert(usage); | |||
sctx->b.ws->cs_add_buffer( | |||
cs, rbo->buf, | |||
(enum radeon_bo_usage)(usage | RADEON_USAGE_SYNCHRONIZED), | |||
rbo->domains, priority); | |||
} | |||
/** | |||
* Same as above, but also checks memory usage and flushes the context | |||
* accordingly. | |||
* | |||
* When this SHOULD NOT be used: | |||
* | |||
* - if si_context_add_resource_size has been called for the buffer | |||
* followed by *_need_cs_space for checking the memory usage | |||
* | |||
* - if si_need_dma_space has been called for the buffer | |||
* | |||
* - when emitting state packets and draw packets (because preceding packets | |||
* can't be re-emitted at that point) | |||
* | |||
* - if shader resource "enabled_mask" is not up-to-date or there is | |||
* a different constraint disallowing a context flush | |||
*/ | |||
static inline void | |||
radeon_add_to_gfx_buffer_list_check_mem(struct si_context *sctx, | |||
struct r600_resource *rbo, | |||
enum radeon_bo_usage usage, | |||
enum radeon_bo_priority priority, | |||
bool check_mem) | |||
{ | |||
if (check_mem && | |||
!radeon_cs_memory_below_limit(sctx->screen, sctx->b.gfx_cs, | |||
sctx->b.vram + rbo->vram_usage, | |||
sctx->b.gtt + rbo->gart_usage)) | |||
si_flush_gfx_cs(sctx, PIPE_FLUSH_ASYNC, NULL); | |||
radeon_add_to_buffer_list(sctx, sctx->b.gfx_cs, rbo, usage, priority); | |||
} | |||
#define PRINT_ERR(fmt, args...) \ | |||
fprintf(stderr, "EE %s:%d %s - " fmt, __FILE__, __LINE__, __func__, ##args) | |||
@@ -22,7 +22,6 @@ | |||
* USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
*/ | |||
#include "radeon/r600_cs.h" | |||
#include "util/u_memory.h" | |||
#include "si_pipe.h" | |||
#include "sid.h" |
@@ -22,10 +22,8 @@ | |||
* USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
*/ | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
#include "si_build_pm4.h" | |||
#include "gfx9d.h" | |||
#include "radeon/r600_cs.h" | |||
#include "radeon/r600_query.h" | |||
#include "util/u_dual_blend.h" |
@@ -24,10 +24,8 @@ | |||
/* This file handles register programming of primitive binning. */ | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
#include "si_build_pm4.h" | |||
#include "gfx9d.h" | |||
#include "radeon/r600_cs.h" | |||
struct uvec2 { | |||
unsigned x, y; |
@@ -22,9 +22,7 @@ | |||
* USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
*/ | |||
#include "si_pipe.h" | |||
#include "radeon/r600_cs.h" | |||
#include "sid.h" | |||
#include "si_build_pm4.h" | |||
#include "gfx9d.h" | |||
#include "util/u_index_modify.h" |
@@ -22,9 +22,7 @@ | |||
* SOFTWARE. | |||
*/ | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
#include "radeon/r600_cs.h" | |||
#include "si_build_pm4.h" | |||
/* For MSAA sample positions. */ | |||
#define FILL_SREG(s0x, s0y, s1x, s1y, s2x, s2y, s3x, s3y) \ |
@@ -22,10 +22,8 @@ | |||
* USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
*/ | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
#include "si_build_pm4.h" | |||
#include "gfx9d.h" | |||
#include "radeon/r600_cs.h" | |||
#include "compiler/nir/nir_serialize.h" | |||
#include "tgsi/tgsi_parse.h" |
@@ -22,10 +22,7 @@ | |||
* SOFTWARE. | |||
*/ | |||
#include "si_pipe.h" | |||
#include "si_state.h" | |||
#include "sid.h" | |||
#include "radeon/r600_cs.h" | |||
#include "si_build_pm4.h" | |||
#include "util/u_memory.h" | |||
@@ -22,9 +22,7 @@ | |||
* USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
*/ | |||
#include "si_pipe.h" | |||
#include "sid.h" | |||
#include "radeon/r600_cs.h" | |||
#include "si_build_pm4.h" | |||
#include "util/u_viewport.h" | |||
#include "tgsi/tgsi_scan.h" | |||