diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/swr/swr_scratch.cpp | 51 | ||||
-rw-r--r-- | src/gallium/drivers/swr/swr_screen.cpp | 2 |
2 files changed, 23 insertions, 30 deletions
diff --git a/src/gallium/drivers/swr/swr_scratch.cpp b/src/gallium/drivers/swr/swr_scratch.cpp index 8afe73c30e4..810132a76c5 100644 --- a/src/gallium/drivers/swr/swr_scratch.cpp +++ b/src/gallium/drivers/swr/swr_scratch.cpp @@ -28,8 +28,6 @@ #include "swr_fence_work.h" #include "api.h" -#define SCRATCH_SINGLE_ALLOCATION_LIMIT 2048 - void * swr_copy_to_scratch_space(struct swr_context *ctx, struct swr_scratch_space *space, @@ -40,41 +38,36 @@ swr_copy_to_scratch_space(struct swr_context *ctx, assert(space); assert(size); - if (size >= SCRATCH_SINGLE_ALLOCATION_LIMIT) { - /* Use per draw SwrAllocDrawContextMemory for larger copies */ - ptr = ctx->api.pfnSwrAllocDrawContextMemory(ctx->swrContext, size, 4); - } else { - /* Allocate enough so that MAX_DRAWS_IN_FLIGHT sets fit. */ - uint32_t max_size_in_flight = size * ctx->max_draws_in_flight; - - /* Need to grow space */ - if (max_size_in_flight > space->current_size) { - space->current_size = max_size_in_flight; + /* Allocate enough so that MAX_DRAWS_IN_FLIGHT sets fit. */ + uint32_t max_size_in_flight = size * ctx->max_draws_in_flight; - if (space->base) { - /* defer delete, use aligned-free */ - struct swr_screen *screen = swr_screen(ctx->pipe.screen); - swr_fence_work_free(screen->flush_fence, space->base, true); - space->base = NULL; - } + /* Need to grow space */ + if (max_size_in_flight > space->current_size) { + space->current_size = max_size_in_flight; - if (!space->base) { - space->base = (uint8_t *)AlignedMalloc(space->current_size, - sizeof(void *)); - space->head = (void *)space->base; - } + if (space->base) { + /* defer delete, use aligned-free */ + struct swr_screen *screen = swr_screen(ctx->pipe.screen); + swr_fence_work_free(screen->flush_fence, space->base, true); + space->base = NULL; } - /* Wrap */ - if (((uint8_t *)space->head + size) - >= ((uint8_t *)space->base + space->current_size)) { - space->head = space->base; + if (!space->base) { + space->base = (uint8_t *)AlignedMalloc(space->current_size, + sizeof(void *)); + space->head = (void *)space->base; } + } - ptr = space->head; - space->head = (uint8_t *)space->head + size; + /* Wrap */ + if (((uint8_t *)space->head + size) + >= ((uint8_t *)space->base + space->current_size)) { + space->head = space->base; } + ptr = space->head; + space->head = (uint8_t *)space->head + size; + /* Copy user_buffer to scratch */ if (user_buffer) memcpy(ptr, user_buffer, size); diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp index 46b3a003c63..b21c35eec80 100644 --- a/src/gallium/drivers/swr/swr_screen.cpp +++ b/src/gallium/drivers/swr/swr_screen.cpp @@ -57,7 +57,7 @@ #define SWR_MAX_TEXTURE_ARRAY_LAYERS 512 /* 8K x 512 / 8K x 8K x 512 */ /* Default max client_copy_limit */ -#define SWR_CLIENT_COPY_LIMIT 32768 +#define SWR_CLIENT_COPY_LIMIT 8192 /* Flag indicates creation of alternate surface, to prevent recursive loop * in resource creation when msaa_force_enable is set. */ |