pvr: Complete pvr_generate_custom_mapping()
Signed-off-by: Sarah Walker <sarah.walker@imgtec.com> Acked-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21550>
This commit is contained in:
@@ -5071,6 +5071,17 @@ pvr_map_clip_rects(struct pvr_transfer_custom_mapping *custom_mapping)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool pvr_extend_height(const VkRect2D *rect,
|
||||||
|
const uint32_t height,
|
||||||
|
const uint32_t unwind_src)
|
||||||
|
{
|
||||||
|
if (rect->offset.x >= (int32_t)unwind_src)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (rect->offset.y > (int32_t)height) ||
|
||||||
|
((rect->offset.y + rect->extent.height) > (int32_t)height);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pvr_generate_custom_mapping(uint32_t src_stride,
|
pvr_generate_custom_mapping(uint32_t src_stride,
|
||||||
uint32_t src_width,
|
uint32_t src_width,
|
||||||
@@ -5114,7 +5125,38 @@ pvr_generate_custom_mapping(uint32_t src_stride,
|
|||||||
* are split to two sources.
|
* are split to two sources.
|
||||||
*/
|
*/
|
||||||
if (custom_mapping->texel_unwind_src > 0U) {
|
if (custom_mapping->texel_unwind_src > 0U) {
|
||||||
pvr_finishme("Implement pvr_generate_custom_mapping().");
|
for (uint32_t i = 0; i < custom_mapping->pass_count; i++) {
|
||||||
|
struct pvr_transfer_pass *pass = &custom_mapping->passes[i];
|
||||||
|
|
||||||
|
for (uint32_t j = 0; j < pass->source_count; j++) {
|
||||||
|
struct pvr_transfer_wa_source *src = &pass->sources[j];
|
||||||
|
|
||||||
|
for (uint32_t k = 0; k < src->mapping_count; k++) {
|
||||||
|
VkRect2D *src_rect = &src->mappings[i].src_rect;
|
||||||
|
bool extend_height =
|
||||||
|
pvr_extend_height(src_rect,
|
||||||
|
src_height,
|
||||||
|
custom_mapping->texel_unwind_src);
|
||||||
|
|
||||||
|
if (src->mapping_count == 1) {
|
||||||
|
src->extend_height = extend_height;
|
||||||
|
} else if (!src->extend_height && extend_height) {
|
||||||
|
struct pvr_transfer_wa_source *new_src =
|
||||||
|
pvr_acquire_source(pass, src->src_offset, extend_height);
|
||||||
|
|
||||||
|
new_src->mappings[new_src->mapping_count] = src->mappings[k];
|
||||||
|
new_src->src_offset = src->src_offset;
|
||||||
|
|
||||||
|
for (uint32_t l = i + 1; l < src->mapping_count; l++)
|
||||||
|
src->mappings[l - 1] = src->mappings[l];
|
||||||
|
|
||||||
|
new_src->mapping_count++;
|
||||||
|
src->mapping_count--;
|
||||||
|
k--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user