mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
i965: Reuse intel_upload.c for gen4/5 constant buffers.
No performance difference on glamor with copywinwin10 (n=40) on my gm45. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
fea996c2aa
commit
44c63bdd40
3 changed files with 7 additions and 31 deletions
|
|
@ -1227,11 +1227,13 @@ struct brw_context
|
|||
GLuint vs_size;
|
||||
GLuint total_size;
|
||||
|
||||
/**
|
||||
* Pointer to the (intel_upload.c-generated) BO containing the uniforms
|
||||
* for upload to the CURBE.
|
||||
*/
|
||||
drm_intel_bo *curbe_bo;
|
||||
/** Offset within curbe_bo of space for current curbe entry */
|
||||
GLuint curbe_offset;
|
||||
/** Offset within curbe_bo of space for next curbe entry */
|
||||
GLuint curbe_next_offset;
|
||||
|
||||
/**
|
||||
* Copy of the last set of CURBEs uploaded. Frequently we'll end up
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "program/prog_print.h"
|
||||
#include "program/prog_statevars.h"
|
||||
#include "intel_batchbuffer.h"
|
||||
#include "intel_buffer_objects.h"
|
||||
#include "brw_context.h"
|
||||
#include "brw_defines.h"
|
||||
#include "brw_state.h"
|
||||
|
|
@ -264,34 +265,8 @@ brw_upload_constant_buffer(struct brw_context *brw)
|
|||
memcpy(brw->curbe.last_buf, buf, bufsz);
|
||||
brw->curbe.last_bufsz = bufsz;
|
||||
|
||||
if (brw->curbe.curbe_bo != NULL &&
|
||||
brw->curbe.curbe_next_offset + bufsz > brw->curbe.curbe_bo->size)
|
||||
{
|
||||
drm_intel_gem_bo_unmap_gtt(brw->curbe.curbe_bo);
|
||||
drm_intel_bo_unreference(brw->curbe.curbe_bo);
|
||||
brw->curbe.curbe_bo = NULL;
|
||||
}
|
||||
|
||||
if (brw->curbe.curbe_bo == NULL) {
|
||||
/* Allocate a single page for CURBE entries for this batchbuffer.
|
||||
* They're generally around 64b.
|
||||
*/
|
||||
brw->curbe.curbe_bo = drm_intel_bo_alloc(brw->bufmgr, "CURBE",
|
||||
4096, 1 << 6);
|
||||
brw->curbe.curbe_next_offset = 0;
|
||||
drm_intel_gem_bo_map_gtt(brw->curbe.curbe_bo);
|
||||
assert(bufsz < 4096);
|
||||
}
|
||||
|
||||
brw->curbe.curbe_offset = brw->curbe.curbe_next_offset;
|
||||
brw->curbe.curbe_next_offset += bufsz;
|
||||
brw->curbe.curbe_next_offset = ALIGN(brw->curbe.curbe_next_offset, 64);
|
||||
|
||||
/* Copy data to the buffer:
|
||||
*/
|
||||
memcpy(brw->curbe.curbe_bo->virtual + brw->curbe.curbe_offset,
|
||||
buf,
|
||||
bufsz);
|
||||
intel_upload_data(brw, buf, bufsz, 64,
|
||||
&brw->curbe.curbe_bo, &brw->curbe.curbe_offset);
|
||||
}
|
||||
|
||||
/* Because this provokes an action (ie copy the constants into the
|
||||
|
|
|
|||
|
|
@ -225,7 +225,6 @@ brw_finish_batch(struct brw_context *brw)
|
|||
brw_perf_monitor_finish_batch(brw);
|
||||
|
||||
if (brw->curbe.curbe_bo) {
|
||||
drm_intel_gem_bo_unmap_gtt(brw->curbe.curbe_bo);
|
||||
drm_intel_bo_unreference(brw->curbe.curbe_bo);
|
||||
brw->curbe.curbe_bo = NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue