diff options
author | Marek Olšák <marek.olsak@amd.com> | 2021-10-21 23:17:03 -0400 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2021-10-29 06:54:21 +0000 |
commit | 61bd8ec0430868c29870620d685a3400454480a7 (patch) | |
tree | 37f44c9bf1fdfeea6f92697e8551a0462816096c /src/gallium/drivers/radeon | |
parent | 90ff5ef5c0a029c023e166569b17c0122f274cc2 (diff) |
gallium/radeon: merge BO read/write usage flags with priority flags
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13478>
Diffstat (limited to 'src/gallium/drivers/radeon')
-rw-r--r-- | src/gallium/drivers/radeon/radeon_uvd.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_vce.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_vce.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_vcn_dec.c | 6 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c | 16 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_vcn_enc.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_vcn_enc.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_winsys.h | 45 |
9 files changed, 42 insertions, 45 deletions
diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c index ec7d8b5ff19..f89969733e7 100644 --- a/src/gallium/drivers/radeon/radeon_uvd.c +++ b/src/gallium/drivers/radeon/radeon_uvd.c @@ -108,11 +108,11 @@ static void set_reg(struct ruvd_decoder *dec, unsigned reg, uint32_t val) /* send a command to the VCPU through the GPCOM registers */ static void send_cmd(struct ruvd_decoder *dec, unsigned cmd, struct pb_buffer *buf, uint32_t off, - enum radeon_bo_usage usage, enum radeon_bo_domain domain) + unsigned usage, enum radeon_bo_domain domain) { int reloc_idx; - reloc_idx = dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + reloc_idx = dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); if (!dec->use_legacy) { uint64_t addr; addr = dec->ws->buffer_get_virtual_address(buf); diff --git a/src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c b/src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c index b76d2dc6a4e..5d420d04a11 100644 --- a/src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c +++ b/src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c @@ -54,10 +54,10 @@ static const unsigned index_to_shifts[4] = {24, 16, 8, 0}; static void radeon_uvd_enc_add_buffer(struct radeon_uvd_encoder *enc, struct pb_buffer *buf, - enum radeon_bo_usage usage, enum radeon_bo_domain domain, + unsigned usage, enum radeon_bo_domain domain, signed offset) { - enc->ws->cs_add_buffer(&enc->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + enc->ws->cs_add_buffer(&enc->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); uint64_t addr; addr = enc->ws->buffer_get_virtual_address(buf); addr = addr + offset; diff --git a/src/gallium/drivers/radeon/radeon_vce.c b/src/gallium/drivers/radeon/radeon_vce.c index daa7b8898d1..90920591f0c 100644 --- a/src/gallium/drivers/radeon/radeon_vce.c +++ b/src/gallium/drivers/radeon/radeon_vce.c @@ -536,12 +536,12 @@ bool si_vce_is_fw_version_supported(struct si_screen *sscreen) /** * Add the buffer as relocation to the current command submission */ -void si_vce_add_buffer(struct rvce_encoder *enc, struct pb_buffer *buf, enum radeon_bo_usage usage, +void si_vce_add_buffer(struct rvce_encoder *enc, struct pb_buffer *buf, unsigned usage, enum radeon_bo_domain domain, signed offset) { int reloc_idx; - reloc_idx = enc->ws->cs_add_buffer(&enc->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + reloc_idx = enc->ws->cs_add_buffer(&enc->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); if (enc->use_vm) { uint64_t addr; addr = enc->ws->buffer_get_virtual_address(buf); diff --git a/src/gallium/drivers/radeon/radeon_vce.h b/src/gallium/drivers/radeon/radeon_vce.h index 35a7514cccb..6b1b00da283 100644 --- a/src/gallium/drivers/radeon/radeon_vce.h +++ b/src/gallium/drivers/radeon/radeon_vce.h @@ -432,7 +432,7 @@ struct pipe_video_codec *si_vce_create_encoder(struct pipe_context *context, bool si_vce_is_fw_version_supported(struct si_screen *sscreen); -void si_vce_add_buffer(struct rvce_encoder *enc, struct pb_buffer *buf, enum radeon_bo_usage usage, +void si_vce_add_buffer(struct rvce_encoder *enc, struct pb_buffer *buf, unsigned usage, enum radeon_bo_domain domain, signed offset); /* init vce fw 40.2.2 specific callbacks */ diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec.c b/src/gallium/drivers/radeon/radeon_vcn_dec.c index ee965b7c7a8..560b734a1e3 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeon/radeon_vcn_dec.c @@ -1414,7 +1414,7 @@ static unsigned rvcn_dec_dynamic_dpb_t2_message(struct radeon_decoder *dec, rvcn } dec->ws->cs_add_buffer(&dec->cs, dpb->dpb.res->buf, - RADEON_USAGE_READWRITE | RADEON_USAGE_SYNCHRONIZED, RADEON_DOMAIN_VRAM, 0); + RADEON_USAGE_READWRITE | RADEON_USAGE_SYNCHRONIZED, RADEON_DOMAIN_VRAM); addr = dec->ws->buffer_get_virtual_address(dpb->dpb.res->buf); dynamic_dpb_t2->dpbCurrLo = addr; dynamic_dpb_t2->dpbCurrHi = addr >> 32; @@ -1863,11 +1863,11 @@ static void set_reg(struct radeon_decoder *dec, unsigned reg, uint32_t val) /* send a command to the VCPU through the GPCOM registers */ static void send_cmd(struct radeon_decoder *dec, unsigned cmd, struct pb_buffer *buf, uint32_t off, - enum radeon_bo_usage usage, enum radeon_bo_domain domain) + unsigned usage, enum radeon_bo_domain domain) { uint64_t addr; - dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); addr = dec->ws->buffer_get_virtual_address(buf); addr = addr + off; diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c b/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c index 64bc49dd4da..8d95f42b69c 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c +++ b/src/gallium/drivers/radeon/radeon_vcn_dec_jpeg.c @@ -63,7 +63,7 @@ static void set_reg_jpeg(struct radeon_decoder *dec, unsigned reg, unsigned cond /* send a bitstream buffer command */ static void send_cmd_bitstream(struct radeon_decoder *dec, struct pb_buffer *buf, uint32_t off, - enum radeon_bo_usage usage, enum radeon_bo_domain domain) + unsigned usage, enum radeon_bo_domain domain) { uint64_t addr; @@ -85,7 +85,7 @@ static void send_cmd_bitstream(struct radeon_decoder *dec, struct pb_buffer *buf set_reg_jpeg(dec, SOC15_REG_ADDR(mmUVD_CTX_DATA), COND0, TYPE0, (0 << 9)); set_reg_jpeg(dec, SOC15_REG_ADDR(mmUVD_SOFT_RESET), COND0, TYPE3, (1 << 9)); - dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); addr = dec->ws->buffer_get_virtual_address(buf); addr = addr + off; @@ -106,7 +106,7 @@ static void send_cmd_bitstream(struct radeon_decoder *dec, struct pb_buffer *buf /* send a target buffer command */ static void send_cmd_target(struct radeon_decoder *dec, struct pb_buffer *buf, uint32_t off, - enum radeon_bo_usage usage, enum radeon_bo_domain domain) + unsigned usage, enum radeon_bo_domain domain) { uint64_t addr; @@ -117,7 +117,7 @@ static void send_cmd_target(struct radeon_decoder *dec, struct pb_buffer *buf, u set_reg_jpeg(dec, SOC15_REG_ADDR(mmUVD_JPEG_TILING_CTRL), COND0, TYPE0, 0); set_reg_jpeg(dec, SOC15_REG_ADDR(mmUVD_JPEG_UV_TILING_CTRL), COND0, TYPE0, 0); - dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); addr = dec->ws->buffer_get_virtual_address(buf); addr = addr + off; @@ -185,7 +185,7 @@ static void send_cmd_target(struct radeon_decoder *dec, struct pb_buffer *buf, u /* send a bitstream buffer command */ static void send_cmd_bitstream_direct(struct radeon_decoder *dec, struct pb_buffer *buf, - uint32_t off, enum radeon_bo_usage usage, + uint32_t off, unsigned usage, enum radeon_bo_domain domain) { uint64_t addr; @@ -205,7 +205,7 @@ static void send_cmd_bitstream_direct(struct radeon_decoder *dec, struct pb_buff set_reg_jpeg(dec, vcnipUVD_JRBC_IB_REF_DATA, COND0, TYPE0, (0 << 0x10)); set_reg_jpeg(dec, vcnipUVD_JPEG_DEC_SOFT_RST, COND3, TYPE3, (0x1 << 0x10)); - dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); addr = dec->ws->buffer_get_virtual_address(buf); addr = addr + off; @@ -225,7 +225,7 @@ static void send_cmd_bitstream_direct(struct radeon_decoder *dec, struct pb_buff /* send a target buffer command */ static void send_cmd_target_direct(struct radeon_decoder *dec, struct pb_buffer *buf, uint32_t off, - enum radeon_bo_usage usage, enum radeon_bo_domain domain) + unsigned usage, enum radeon_bo_domain domain) { uint64_t addr; @@ -236,7 +236,7 @@ static void send_cmd_target_direct(struct radeon_decoder *dec, struct pb_buffer set_reg_jpeg(dec, vcnipJPEG_DEC_Y_GFX10_TILING_SURFACE, COND0, TYPE0, 0); set_reg_jpeg(dec, vcnipJPEG_DEC_UV_GFX10_TILING_SURFACE, COND0, TYPE0, 0); - dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + dec->ws->cs_add_buffer(&dec->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); addr = dec->ws->buffer_get_virtual_address(buf); addr = addr + off; diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.c b/src/gallium/drivers/radeon/radeon_vcn_enc.c index ab13dad3c63..de4ba05ed3f 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeon/radeon_vcn_enc.c @@ -478,9 +478,9 @@ error: } void radeon_enc_add_buffer(struct radeon_encoder *enc, struct pb_buffer *buf, - enum radeon_bo_usage usage, enum radeon_bo_domain domain, signed offset) + unsigned usage, enum radeon_bo_domain domain, signed offset) { - enc->ws->cs_add_buffer(&enc->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain, 0); + enc->ws->cs_add_buffer(&enc->cs, buf, usage | RADEON_USAGE_SYNCHRONIZED, domain); uint64_t addr; addr = enc->ws->buffer_get_virtual_address(buf); addr = addr + offset; diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.h b/src/gallium/drivers/radeon/radeon_vcn_enc.h index 491d51b32bf..a695a19a098 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_enc.h +++ b/src/gallium/drivers/radeon/radeon_vcn_enc.h @@ -556,7 +556,7 @@ struct radeon_encoder { }; void radeon_enc_add_buffer(struct radeon_encoder *enc, struct pb_buffer *buf, - enum radeon_bo_usage usage, enum radeon_bo_domain domain, signed offset); + unsigned usage, enum radeon_bo_domain domain, signed offset); void radeon_enc_set_emulation_prevention(struct radeon_encoder *enc, bool set); diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h index c39858ae096..a61d6d4e187 100644 --- a/src/gallium/drivers/radeon/radeon_winsys.h +++ b/src/gallium/drivers/radeon/radeon_winsys.h @@ -78,23 +78,6 @@ enum radeon_bo_flag RADEON_FLAG_DRIVER_INTERNAL = (1 << 9), }; -enum radeon_bo_usage -{ /* bitfield */ - RADEON_USAGE_READ = 2, - RADEON_USAGE_WRITE = 4, - RADEON_USAGE_READWRITE = RADEON_USAGE_READ | RADEON_USAGE_WRITE, - - /* The winsys ensures that the CS submission will be scheduled after - * previously flushed CSs referencing this BO in a conflicting way. - */ - RADEON_USAGE_SYNCHRONIZED = 8, - - /* When used, an implicit sync is done to make sure a compute shader - * will read the written values from a previous draw. - */ - RADEON_USAGE_NEEDS_IMPLICIT_SYNC = 16, -}; - enum radeon_map_flags { /* Indicates that the caller will unmap the buffer. @@ -171,6 +154,23 @@ enum radeon_value_id #define RADEON_PRIO_SHADER_RINGS (1 << 22) #define RADEON_PRIO_SCRATCH_BUFFER (1 << 23) +#define RADEON_ALL_PRIORITIES (RADEON_USAGE_READ - 1) + +/* Upper bits of priorities are used by usage flags. */ +#define RADEON_USAGE_READ (1 << 28) +#define RADEON_USAGE_WRITE (1 << 29) +#define RADEON_USAGE_READWRITE (RADEON_USAGE_READ | RADEON_USAGE_WRITE) + +/* The winsys ensures that the CS submission will be scheduled after + * previously flushed CSs referencing this BO in a conflicting way. + */ +#define RADEON_USAGE_SYNCHRONIZED (1 << 30) + +/* When used, an implicit sync is done to make sure a compute shader + * will read the written values from a previous draw. + */ +#define RADEON_USAGE_NEEDS_IMPLICIT_SYNC (1u << 31) + struct winsys_handle; struct radeon_winsys_ctx; @@ -333,7 +333,7 @@ struct radeon_winsys { * is idle. */ bool (*buffer_wait)(struct radeon_winsys *ws, struct pb_buffer *buf, - uint64_t timeout, enum radeon_bo_usage usage); + uint64_t timeout, unsigned usage); /** * Return buffer metadata. @@ -512,15 +512,12 @@ struct radeon_winsys { * * \param cs Command stream * \param buf Buffer - * \param usage Whether the buffer is used for read and/or write. + * \param usage Usage * \param domain Bitmask of the RADEON_DOMAIN_* flags. - * \param priority A higher number means a greater chance of being - * placed in the requested domain. 15 is the maximum. * \return Buffer index. */ unsigned (*cs_add_buffer)(struct radeon_cmdbuf *cs, struct pb_buffer *buf, - enum radeon_bo_usage usage, enum radeon_bo_domain domain, - unsigned priority); + unsigned usage, enum radeon_bo_domain domain); /** * Return the index of an already-added buffer. @@ -594,7 +591,7 @@ struct radeon_winsys { * \param buf A winsys buffer. */ bool (*cs_is_buffer_referenced)(struct radeon_cmdbuf *cs, struct pb_buffer *buf, - enum radeon_bo_usage usage); + unsigned usage); /** * Request access to a feature for a command stream. |