ralloc/linalloc: allow adding custom code to LINEAR_ALLOC new operator

for GLSL IR

Acked-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Acked-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36539>
This commit is contained in:
Marek Olšák 2025-07-21 16:51:45 -04:00 committed by Marge Bot
parent 4f2b8e7713
commit ae5b168051
5 changed files with 13 additions and 9 deletions

View file

@ -50,7 +50,7 @@ struct YYLTYPE;
*/
class ast_node {
public:
DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(ast_node);
DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(ast_node,,);
/**
* Print an AST node in something approximating the original GLSL code

View file

@ -27,7 +27,7 @@
class symbol_table_entry {
public:
DECLARE_LINEAR_ALLOC_CXX_OPERATORS(symbol_table_entry);
DECLARE_LINEAR_ALLOC_CXX_OPERATORS(symbol_table_entry,,);
bool add_interface(const glsl_type *i, enum ir_variable_mode mode)
{

View file

@ -141,7 +141,7 @@ private:
};
struct acp {
DECLARE_LINEAR_ALLOC_CXX_OPERATORS(acp);
DECLARE_LINEAR_ALLOC_CXX_OPERATORS(acp,,);
struct rb_tree by_dst;
struct rb_tree by_src;

View file

@ -143,7 +143,7 @@ private:
};
struct acp {
DECLARE_LINEAR_ALLOC_CXX_OPERATORS(acp);
DECLARE_LINEAR_ALLOC_CXX_OPERATORS(acp,,);
struct rb_tree by_dst;
struct rb_tree by_src;

View file

@ -566,13 +566,14 @@ public: \
DECLARE_RALLOC_CXX_OPERATORS_TEMPLATE(type, rzalloc_size)
#define DECLARE_LINEAR_ALLOC_CXX_OPERATORS_TEMPLATE(TYPE, ALLOC_FUNC) \
#define DECLARE_LINEAR_ALLOC_CXX_OPERATORS_TEMPLATE(TYPE, ALLOC_FUNC, new_cmd, new_array_cmd) \
public: \
static void* operator new(size_t size, linear_ctx *ctx) \
{ \
void *p = ALLOC_FUNC(ctx, size); \
assert(p != NULL); \
static_assert(HAS_TRIVIAL_DESTRUCTOR(TYPE)); \
new_cmd \
return p; \
} \
static void* operator new[](size_t size, linear_ctx *ctx) \
@ -580,14 +581,17 @@ public: \
void *p = ALLOC_FUNC(ctx, size); \
assert(p != NULL); \
static_assert(HAS_TRIVIAL_DESTRUCTOR(TYPE)); \
new_array_cmd \
return p; \
}
#define DECLARE_LINEAR_ALLOC_CXX_OPERATORS(type) \
DECLARE_LINEAR_ALLOC_CXX_OPERATORS_TEMPLATE(type, linear_alloc_child)
#define DECLARE_LINEAR_ALLOC_CXX_OPERATORS(type, new_cmd, new_array_cmd) \
DECLARE_LINEAR_ALLOC_CXX_OPERATORS_TEMPLATE(type, linear_alloc_child, \
new_cmd, new_array_cmd)
#define DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(type) \
DECLARE_LINEAR_ALLOC_CXX_OPERATORS_TEMPLATE(type, linear_zalloc_child)
#define DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(type, new_cmd, new_array_cmd) \
DECLARE_LINEAR_ALLOC_CXX_OPERATORS_TEMPLATE(type, linear_zalloc_child, \
new_cmd, new_array_cmd)
typedef struct linear_ctx linear_ctx;