From 0beb77751ebdf4db291aa791c12af843e193ef1c Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Sat, 6 Feb 2021 23:30:56 +0100 Subject: [PATCH] st/nine: Add driconf option to limit texture memory Signed-off-by: Axel Davy Part-of: --- src/gallium/frontends/nine/adapter9.h | 1 + src/gallium/frontends/nine/device9.c | 2 +- src/gallium/targets/d3dadapter9/drm.c | 2 ++ src/util/driconf.h | 4 ++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/nine/adapter9.h b/src/gallium/frontends/nine/adapter9.h index 605444cbc8d..ef129687727 100644 --- a/src/gallium/frontends/nine/adapter9.h +++ b/src/gallium/frontends/nine/adapter9.h @@ -44,6 +44,7 @@ struct d3dadapter9_context int csmt_force; BOOL dynamic_texture_workaround; BOOL shader_inline_constants; + int memfd_virtualsizelimit; void (*destroy)( struct d3dadapter9_context *ctx ); }; diff --git a/src/gallium/frontends/nine/device9.c b/src/gallium/frontends/nine/device9.c index ccba38a6347..9b44b9827b7 100644 --- a/src/gallium/frontends/nine/device9.c +++ b/src/gallium/frontends/nine/device9.c @@ -236,7 +236,7 @@ NineDevice9_ctor( struct NineDevice9 *This, /* Create first, it messes up our state. */ This->hud = hud_create(This->context.cso, NULL, NULL); /* NULL result is fine */ - This->allocator = nine_allocator_create(This, 512); + This->allocator = nine_allocator_create(This, pCTX->memfd_virtualsizelimit); /* Available memory counter. Updated only for allocations with this device * instance. This is the Win 7 behavior. diff --git a/src/gallium/targets/d3dadapter9/drm.c b/src/gallium/targets/d3dadapter9/drm.c index a8a77129b0a..4967b06c0e8 100644 --- a/src/gallium/targets/d3dadapter9/drm.c +++ b/src/gallium/targets/d3dadapter9/drm.c @@ -60,6 +60,7 @@ const driOptionDescription __driConfigOptionsNine[] = { DRI_CONF_NINE_CSMT(-1) DRI_CONF_NINE_DYNAMICTEXTUREWORKAROUND(false) DRI_CONF_NINE_SHADERINLINECONSTANTS(false) + DRI_CONF_NINE_SHMEM_LIMIT() DRI_CONF_SECTION_END }; @@ -277,6 +278,7 @@ drm_create_adapter( int fd, ctx->base.csmt_force = driQueryOptioni(&userInitOptions, "csmt_force"); ctx->base.dynamic_texture_workaround = driQueryOptionb(&userInitOptions, "dynamic_texture_workaround"); ctx->base.shader_inline_constants = driQueryOptionb(&userInitOptions, "shader_inline_constants"); + ctx->base.memfd_virtualsizelimit = driQueryOptioni(&userInitOptions, "texture_memory_limit"); driDestroyOptionCache(&userInitOptions); driDestroyOptionInfo(&defaultInitOptions); diff --git a/src/util/driconf.h b/src/util/driconf.h index 422fec52df2..9c0c353b7b5 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -402,6 +402,10 @@ DRI_CONF_OPT_B(shader_inline_constants, def, \ "If set to true, recompile shaders with integer or boolean constants when the values are known. Can cause stutter, but can increase slightly performance.") +#define DRI_CONF_NINE_SHMEM_LIMIT() \ + DRI_CONF_OPT_I(texture_memory_limit, 512, 0, 0, \ + "In MB the limit of virtual memory used for textures until shmem files are unmapped (default 512MB, 32bits only). If negative disables shmem. Set to a low amount to reduce virtual memory usage, but can inccur a small perf hit if too low.") + /** * \brief radeonsi specific configuration options */