util: move util_lower_clearsize_to_dword here

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30208>
This commit is contained in:
Marek Olšák 2024-07-16 05:36:27 -04:00 committed by Marge Bot
parent 1d66acf993
commit d34a450098
7 changed files with 67 additions and 42 deletions

View file

@ -468,44 +468,6 @@ util_sw_query_memory_info(struct pipe_screen *pscreen,
info->total_staging_memory = size / 1024;
}
bool
util_lower_clearsize_to_dword(const void *clearValue, int *clearValueSize, uint32_t *clamped)
{
/* Reduce a large clear value size if possible. */
if (*clearValueSize > 4) {
bool clear_dword_duplicated = true;
const uint32_t *clear_value = clearValue;
/* See if we can lower large fills to dword fills. */
for (unsigned i = 1; i < *clearValueSize / 4; i++) {
if (clear_value[0] != clear_value[i]) {
clear_dword_duplicated = false;
break;
}
}
if (clear_dword_duplicated) {
*clamped = *clear_value;
*clearValueSize = 4;
}
return clear_dword_duplicated;
}
/* Expand a small clear value size. */
if (*clearValueSize <= 2) {
if (*clearValueSize == 1) {
*clamped = *(uint8_t *)clearValue;
*clamped |=
(*clamped << 8) | (*clamped << 16) | (*clamped << 24);
} else {
*clamped = *(uint16_t *)clearValue;
*clamped |= *clamped << 16;
}
*clearValueSize = 4;
return true;
}
return false;
}
void
util_init_pipe_vertex_state(struct pipe_screen *screen,
struct pipe_vertex_buffer *buffer,

View file

@ -118,9 +118,6 @@ void util_throttle_memory_usage(struct pipe_context *pipe,
void util_sw_query_memory_info(struct pipe_screen *pscreen,
struct pipe_memory_info *info);
bool
util_lower_clearsize_to_dword(const void *clearValue, int *clearValueSize, uint32_t *clamped);
void
util_init_pipe_vertex_state(struct pipe_screen *screen,
struct pipe_vertex_buffer *buffer,

View file

@ -7,7 +7,7 @@
#include "si_pipe.h"
#include "util/format/u_format.h"
#include "util/format_srgb.h"
#include "util/u_helpers.h"
#include "util/helpers.h"
#include "util/hash_table.h"
#include "util/u_pack_color.h"
#include "ac_nir_meta.h"

View file

@ -31,6 +31,7 @@
#include "util/u_blitter.h"
#include "util/format/u_format.h"
#include "util/format_srgb.h"
#include "util/helpers.h"
#include "util/u_framebuffer.h"
#include "util/u_inlines.h"
#include "util/u_rect.h"

46
src/util/helpers.c Normal file
View file

@ -0,0 +1,46 @@
/*
* Copyright 2024 Advanced Micro Devices, Inc.
*
* SPDX-License-Identifier: MIT
*/
#include "helpers.h"
bool
util_lower_clearsize_to_dword(const void *clear_value, int *clear_value_size,
uint32_t *out)
{
/* Reduce a large clear value size if possible. */
if (*clear_value_size > 4) {
bool clear_dword_duplicated = true;
const uint32_t *value = clear_value;
/* See if we can lower large fills to dword fills. */
for (unsigned i = 1; i < *clear_value_size / 4; i++) {
if (value[0] != value[i]) {
clear_dword_duplicated = false;
break;
}
}
if (clear_dword_duplicated) {
*out = *value;
*clear_value_size = 4;
}
return clear_dword_duplicated;
}
/* Expand a small clear value size. */
if (*clear_value_size <= 2) {
if (*clear_value_size == 1) {
*out = *(uint8_t *)clear_value;
*out |=
(*out << 8) | (*out << 16) | (*out << 24);
} else {
*out = *(uint16_t *)clear_value;
*out |= *out << 16;
}
*clear_value_size = 4;
return true;
}
return false;
}

17
src/util/helpers.h Normal file
View file

@ -0,0 +1,17 @@
/*
* Copyright 2024 Advanced Micro Devices, Inc.
*
* SPDX-License-Identifier: MIT
*/
#ifndef HELPERS_H
#define HELPERS_H
#include <stdbool.h>
#include <stdint.h>
bool
util_lower_clearsize_to_dword(const void *clear_value, int *clear_value_size,
uint32_t *out);
#endif

View file

@ -56,6 +56,8 @@ files_mesa_util = files(
'half_float.h',
'hash_table.c',
'hash_table.h',
'helpers.c',
'helpers.h',
'hex.h',
'u_idalloc.c',
'u_idalloc.h',