summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOskar Rundgren <oskar.rundgren@imgtec.com>2023-05-09 16:21:46 +0100
committerMarge Bot <emma+marge@anholt.net>2023-05-17 08:18:26 +0000
commit9e91e06d452f597eb06edd05579aa5bb8b82069c (patch)
tree89b567f2a764638229acec68db721ca85d62dd34
parentf142eae05fe28d2158d1b5aa28d983a6073aec63 (diff)
downloadmesa-9e91e06d452f597eb06edd05579aa5bb8b82069c.tar.gz
pvr: Transfer optimisation remove unused features from API
The transfer command "struct pvr_transfer_cmd" has support for features not used by Vulkan: colour key, pattern, rop blit and alpha blending The whole "struct pvr_transfer_blit" can be removed. Also all code related to transfer alpha blending can be removed. This is an optimisation and doesn't fix any dEQP tests. Signed-off-by: Oskar Rundgren <oskar.rundgren@imgtec.com> Reviewed-by: Frank Binns <frank.binns@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22958>
-rw-r--r--src/imagination/vulkan/pvr_common.h10
-rw-r--r--src/imagination/vulkan/pvr_formats.c14
-rw-r--r--src/imagination/vulkan/pvr_formats.h9
-rw-r--r--src/imagination/vulkan/pvr_job_transfer.c60
-rw-r--r--src/imagination/vulkan/pvr_private.h40
-rw-r--r--src/imagination/vulkan/pvr_transfer_frag_store.c3
-rw-r--r--src/imagination/vulkan/usc/pvr_uscgen.h3
-rw-r--r--src/imagination/vulkan/usc/pvr_uscgen_tq.c4
8 files changed, 11 insertions, 132 deletions
diff --git a/src/imagination/vulkan/pvr_common.h b/src/imagination/vulkan/pvr_common.h
index 13395386b01..3d135a68cef 100644
--- a/src/imagination/vulkan/pvr_common.h
+++ b/src/imagination/vulkan/pvr_common.h
@@ -169,16 +169,6 @@ enum pvr_resolve_op {
PVR_RESOLVE_SAMPLE7,
};
-enum pvr_alpha_type {
- PVR_ALPHA_NONE,
- PVR_ALPHA_SOURCE,
- PVR_ALPHA_PREMUL_SOURCE,
- PVR_ALPHA_GLOBAL,
- PVR_ALPHA_PREMUL_SOURCE_WITH_GLOBAL,
- PVR_ALPHA_CUSTOM,
- PVR_ALPHA_AATEXT,
-};
-
enum pvr_event_state {
PVR_EVENT_STATE_SET_BY_HOST,
PVR_EVENT_STATE_RESET_BY_HOST,
diff --git a/src/imagination/vulkan/pvr_formats.c b/src/imagination/vulkan/pvr_formats.c
index 37efc6d9ae6..ac2f02c6796 100644
--- a/src/imagination/vulkan/pvr_formats.c
+++ b/src/imagination/vulkan/pvr_formats.c
@@ -1038,20 +1038,8 @@ bool pvr_format_is_pbe_downscalable(VkFormat vk_format)
}
}
-uint32_t pvr_pbe_pixel_num_loads(enum pvr_transfer_pbe_pixel_src pbe_format,
- uint32_t alpha_type)
+uint32_t pvr_pbe_pixel_num_loads(enum pvr_transfer_pbe_pixel_src pbe_format)
{
- switch (alpha_type) {
- default:
- case PVR_ALPHA_NONE:
- break;
- case PVR_ALPHA_SOURCE:
- case PVR_ALPHA_PREMUL_SOURCE:
- case PVR_ALPHA_PREMUL_SOURCE_WITH_GLOBAL:
- case PVR_ALPHA_GLOBAL:
- return 2U;
- }
-
switch (pbe_format) {
case PVR_TRANSFER_PBE_PIXEL_SRC_UU8888:
case PVR_TRANSFER_PBE_PIXEL_SRC_US8888:
diff --git a/src/imagination/vulkan/pvr_formats.h b/src/imagination/vulkan/pvr_formats.h
index bdd1a4cf906..b0be90b2c29 100644
--- a/src/imagination/vulkan/pvr_formats.h
+++ b/src/imagination/vulkan/pvr_formats.h
@@ -220,13 +220,6 @@ void pvr_get_hw_clear_color(VkFormat vk_format,
VkClearColorValue value,
uint32_t packed_out[static const 4]);
-/* TODO: alpha_type is of 'enum pvr_int_pbe_pixel_num_loads' type. See if we can
- * move that in here. It's currently in pvr_common.h and it doesn't seem
- * appropriate including that in here. Also moving the definition in here would
- * make pvr_common.h include this which would mean that the compiler would be
- * pulling in vulkan specific format stuff.
- */
-uint32_t pvr_pbe_pixel_num_loads(enum pvr_transfer_pbe_pixel_src pbe_format,
- uint32_t alpha_type);
+uint32_t pvr_pbe_pixel_num_loads(enum pvr_transfer_pbe_pixel_src pbe_format);
#endif /* PVR_FORMATS_H */
diff --git a/src/imagination/vulkan/pvr_job_transfer.c b/src/imagination/vulkan/pvr_job_transfer.c
index 7f435ac7935..9f38be154b2 100644
--- a/src/imagination/vulkan/pvr_job_transfer.c
+++ b/src/imagination/vulkan/pvr_job_transfer.c
@@ -1459,15 +1459,14 @@ static void pvr_uv_space(const struct pvr_device_info *dev_info,
}
static uint32_t pvr_int_pbe_pixel_num_sampler_and_image_states(
- enum pvr_transfer_pbe_pixel_src pbe_format,
- uint32_t alpha_type)
+ enum pvr_transfer_pbe_pixel_src pbe_format)
{
switch (pbe_format) {
case PVR_TRANSFER_PBE_PIXEL_SRC_Y_UV_INTERLEAVED:
case PVR_TRANSFER_PBE_PIXEL_SRC_Y_U_V:
return 1U;
default:
- return pvr_pbe_pixel_num_loads(pbe_format, alpha_type);
+ return pvr_pbe_pixel_num_loads(pbe_format);
}
}
@@ -1663,9 +1662,7 @@ pvr_sampler_image_state(struct pvr_transfer_ctx *ctx,
for (uint32_t source = 0; source < transfer_cmd->source_count; source++) {
struct pvr_tq_layer_properties *layer =
&state->shader_props.layer_props;
- uint32_t max_load =
- pvr_pbe_pixel_num_loads(layer->pbe_format,
- state->shader_props.alpha_type);
+ uint32_t max_load = pvr_pbe_pixel_num_loads(layer->pbe_format);
for (uint32_t load = 0U; load < max_load; load++) {
const struct pvr_transfer_cmd_surface *surface;
@@ -1685,11 +1682,7 @@ pvr_sampler_image_state(struct pvr_transfer_ctx *ctx,
case PVR_TRANSFER_PBE_PIXEL_SRC_F16_U8:
if (load > 0U) {
surface = &transfer_cmd->dst;
-
- if (state->shader_props.alpha_type != PVR_ALPHA_NONE)
- filter = PVR_FILTER_POINT;
- else
- filter = transfer_cmd->sources[source].filter;
+ filter = transfer_cmd->sources[source].filter;
} else {
surface = &transfer_cmd->sources[source].surface;
filter = state->filter[source];
@@ -1709,8 +1702,7 @@ pvr_sampler_image_state(struct pvr_transfer_ctx *ctx,
}
if (load < pvr_int_pbe_pixel_num_sampler_and_image_states(
- layer->pbe_format,
- state->shader_props.alpha_type)) {
+ layer->pbe_format)) {
const struct pvr_device_info *dev_info =
&transfer_cmd->cmd_buffer->device->pdevice->dev_info;
@@ -1758,17 +1750,6 @@ static inline uint32_t pvr_dynamic_const_reg_advance(
return offset + state->dynamic_const_reg_ptr++;
}
-static inline void
-pvr_dma_global_alpha(const struct pvr_transfer_alpha *alpha,
- struct pvr_transfer_3d_state *state,
- const struct pvr_tq_frag_sh_reg_layout *sh_reg_layout,
- uint32_t *mem_ptr)
-{
- float global = (float)alpha->global / 255.0f;
-
- mem_ptr[pvr_dynamic_const_reg_advance(sh_reg_layout, state)] = fui(global);
-}
-
/** Scales coefficients for sampling. (non normalized). */
static inline void
pvr_dma_texture_floats(const struct pvr_transfer_cmd *transfer_cmd,
@@ -2779,15 +2760,6 @@ static VkResult pvr_3d_copy_blit_core(struct pvr_transfer_ctx *ctx,
state->shader_props.pick_component =
pvr_pick_component_needed(&state->custom_mapping);
- state->shader_props.alpha_type = transfer_cmd->blit.alpha.type;
-
- if (state->shader_props.alpha_type != PVR_ALPHA_NONE &&
- (state->shader_props.layer_props.pbe_format !=
- PVR_TRANSFER_PBE_PIXEL_SRC_F16F16 &&
- state->shader_props.layer_props.pbe_format !=
- PVR_TRANSFER_PBE_PIXEL_SRC_F16_U8)) {
- return vk_error(device, VK_ERROR_FORMAT_NOT_SUPPORTED);
- }
if (state->filter[0] == PVR_FILTER_LINEAR &&
pvr_requires_usc_linear_filter(
@@ -2849,15 +2821,6 @@ static VkResult pvr_3d_copy_blit_core(struct pvr_transfer_ctx *ctx,
if (result != VK_SUCCESS)
return result;
- if (state->shader_props.alpha_type == PVR_ALPHA_GLOBAL ||
- state->shader_props.alpha_type ==
- PVR_ALPHA_PREMUL_SOURCE_WITH_GLOBAL) {
- pvr_dma_global_alpha(&transfer_cmd->blit.alpha,
- state,
- sh_reg_layout,
- dma_space);
- }
-
pvr_dma_texture_floats(transfer_cmd, state, sh_reg_layout, dma_space);
if (transfer_cmd->sources[0].surface.mem_layout ==
@@ -4515,8 +4478,6 @@ static VkResult pvr_3d_clip_blit(struct pvr_transfer_ctx *ctx,
~(PVR_TRANSFER_CMD_FLAGS_FAST2D | PVR_TRANSFER_CMD_FLAGS_FILL |
PVR_TRANSFER_CMD_FLAGS_DSMERGE | PVR_TRANSFER_CMD_FLAGS_PICKD);
- memset(&bg_cmd.blit, 0U, sizeof(bg_cmd.blit));
-
bg_cmd.source_count = state->custom_mapping.pass_count > 0U ? 0 : 1;
if (bg_cmd.source_count > 0) {
struct pvr_transfer_cmd_source *src = &bg_cmd.sources[0];
@@ -5474,12 +5435,8 @@ static VkResult pvr_reroute_to_clip(struct pvr_transfer_ctx *ctx,
uint32_t pass_idx,
bool *finished_out)
{
- const struct pvr_transfer_blit *blit = &transfer_cmd->blit;
struct pvr_transfer_cmd clip_transfer_cmd;
- if (blit->alpha.type != PVR_ALPHA_NONE)
- return vk_error(ctx->device, VK_ERROR_FORMAT_NOT_SUPPORTED);
-
clip_transfer_cmd = *transfer_cmd;
clip_transfer_cmd.flags |= PVR_TRANSFER_CMD_FLAGS_FAST2D;
@@ -5506,7 +5463,6 @@ static VkResult pvr_3d_copy_blit(struct pvr_transfer_ctx *ctx,
const struct pvr_device_info *const dev_info =
&ctx->device->pdevice->dev_info;
- const struct pvr_transfer_blit *blit = &transfer_cmd->blit;
struct pvr_transfer_3d_state *state = &prep_data->state;
struct pvr_transfer_cmd *active_cmd = transfer_cmd;
struct pvr_transfer_cmd int_cmd;
@@ -5528,8 +5484,7 @@ static VkResult pvr_3d_copy_blit(struct pvr_transfer_ctx *ctx,
if (src->surface.vk_format == transfer_cmd->dst.vk_format &&
state->filter[0] == PVR_FILTER_POINT &&
src->surface.sample_count <= transfer_cmd->dst.sample_count &&
- (transfer_cmd->flags & PVR_TRANSFER_CMD_FLAGS_DSMERGE) == 0U &&
- transfer_cmd->blit.alpha.type == PVR_ALPHA_NONE) {
+ (transfer_cmd->flags & PVR_TRANSFER_CMD_FLAGS_DSMERGE) == 0U) {
uint32_t bpp;
int_cmd = *transfer_cmd;
@@ -5583,9 +5538,6 @@ static VkResult pvr_3d_copy_blit(struct pvr_transfer_ctx *ctx,
if (state->custom_mapping.pass_count > 0U) {
struct pvr_transfer_pass *pass = &state->custom_mapping.passes[pass_idx];
- if (blit->alpha.type != PVR_ALPHA_NONE)
- return vk_error(ctx->device, VK_ERROR_FORMAT_NOT_SUPPORTED);
-
if (active_cmd != &int_cmd) {
int_cmd = *active_cmd;
active_cmd = &int_cmd;
diff --git a/src/imagination/vulkan/pvr_private.h b/src/imagination/vulkan/pvr_private.h
index 36e9ddf02c5..cf281f6e825 100644
--- a/src/imagination/vulkan/pvr_private.h
+++ b/src/imagination/vulkan/pvr_private.h
@@ -398,44 +398,6 @@ struct pvr_rect_mapping {
bool flip_y;
};
-/* Describes an Alpha-Transparency configuration - for Transfer Queue Use. */
-struct pvr_transfer_alpha {
- enum pvr_alpha_type type;
- /* Global alpha value. */
- uint32_t global;
-
- /* Custom blend op for rgb. */
- uint32_t custom_rgb;
- /* Custom blend op for alpha. */
- uint32_t custom_alpha;
- /* Custom global alpha value for alpha output. */
- uint32_t global2;
- /* Custom multiplication of global and source alpha. */
- bool glob_src_mul;
- /* Custom zero source alpha transparency stage. */
- bool zero_src_a_trans;
-
- /* Enable argb1555 alpha components. */
- bool alpha_components;
- /* Source alpha value when argb1555 alpha bit is 0. */
- uint32_t component0;
- /* Source alpha value when argb1555 alpha bit is 1. */
- uint32_t component1;
-};
-
-struct pvr_transfer_blit {
- /* 16 bit rop4 (ie two 8 bit rop3's). */
- uint32_t rop_code;
-
- /* Color key mask. */
- uint32_t color_mask;
-
- /* Alpha blend. */
- struct pvr_transfer_alpha alpha;
-
- VkOffset2D offset;
-};
-
struct pvr_transfer_cmd_source {
struct pvr_transfer_cmd_surface surface;
@@ -473,8 +435,6 @@ struct pvr_transfer_cmd {
VkRect2D scissor;
- struct pvr_transfer_blit blit;
-
/* Pointer to cmd buffer this transfer cmd belongs to. This is mainly used
* to link buffer objects allocated during job submission into
* cmd_buffer::bo_list head.
diff --git a/src/imagination/vulkan/pvr_transfer_frag_store.c b/src/imagination/vulkan/pvr_transfer_frag_store.c
index 758f7849011..1a0d29685b1 100644
--- a/src/imagination/vulkan/pvr_transfer_frag_store.c
+++ b/src/imagination/vulkan/pvr_transfer_frag_store.c
@@ -161,7 +161,8 @@ static uint32_t pvr_transfer_frag_shader_key(
hash |= 1;
shift_hash(hash, 3U);
- hash |= shader_props->alpha_type;
+ /* alpha type none */
+ hash |= 0;
#undef shift_hash
diff --git a/src/imagination/vulkan/usc/pvr_uscgen.h b/src/imagination/vulkan/usc/pvr_uscgen.h
index 89106301717..103df838e2e 100644
--- a/src/imagination/vulkan/usc/pvr_uscgen.h
+++ b/src/imagination/vulkan/usc/pvr_uscgen.h
@@ -49,9 +49,6 @@ struct pvr_tq_shader_properties {
/* Sample specific channel of pixel. */
bool pick_component;
- /* Alpha type from transfer API. */
- uint32_t alpha_type;
-
struct pvr_tq_layer_properties {
/* Controls whether we need to send the sample count to the TPU. */
bool msaa;
diff --git a/src/imagination/vulkan/usc/pvr_uscgen_tq.c b/src/imagination/vulkan/usc/pvr_uscgen_tq.c
index 961310441bc..fc6f031994f 100644
--- a/src/imagination/vulkan/usc/pvr_uscgen_tq.c
+++ b/src/imagination/vulkan/usc/pvr_uscgen_tq.c
@@ -63,7 +63,6 @@ void pvr_uscgen_tq_frag(const struct pvr_tq_shader_properties *shader_props,
/* TODO: Unrestrict. */
assert(shader_props->full_rate == false);
assert(shader_props->pick_component == false);
- assert(shader_props->alpha_type == 0);
const struct pvr_tq_layer_properties *layer_props =
&shader_props->layer_props;
@@ -80,8 +79,7 @@ void pvr_uscgen_tq_frag(const struct pvr_tq_shader_properties *shader_props,
assert(layer_props->byte_unwind == 0);
assert(layer_props->linear == false);
- loads = pvr_pbe_pixel_num_loads(layer_props->pbe_format,
- shader_props->alpha_type);
+ loads = pvr_pbe_pixel_num_loads(layer_props->pbe_format);
for (uint32_t load = 0; load < loads; ++load) {
if (shader_props->iterated) {
/* TODO: feed{back,forward} the coeff index to/from shader_info. */