aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/swr/swr_scratch.cpp51
-rw-r--r--src/gallium/drivers/swr/swr_screen.cpp2
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. */