i965: Clean up intel_batchbuffer_init().
Passing screen lets us get the kernel features, devinfo, and bufmgr, without needing container_of. This use of container_of could cause crashes due to issues with the "sample" macro parameter. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102062 Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
parent
b420680ede
commit
da0840246f
|
@ -934,7 +934,7 @@ brwCreateContext(gl_api api,
|
||||||
|
|
||||||
intel_fbo_init(brw);
|
intel_fbo_init(brw);
|
||||||
|
|
||||||
intel_batchbuffer_init(&brw->batch, brw->bufmgr, brw->has_llc);
|
intel_batchbuffer_init(screen, &brw->batch);
|
||||||
|
|
||||||
if (brw->gen >= 6) {
|
if (brw->gen >= 6) {
|
||||||
/* Create a new hardware context. Using a hardware context means that
|
/* Create a new hardware context. Using a hardware context means that
|
||||||
|
|
|
@ -58,13 +58,13 @@ uint_key_hash(const void *key)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
intel_batchbuffer_init(struct intel_batchbuffer *batch,
|
intel_batchbuffer_init(struct intel_screen *screen,
|
||||||
struct brw_bufmgr *bufmgr,
|
struct intel_batchbuffer *batch)
|
||||||
bool has_llc)
|
|
||||||
{
|
{
|
||||||
struct brw_context *brw = container_of(batch, brw, batch);
|
struct brw_bufmgr *bufmgr = screen->bufmgr;
|
||||||
|
const struct gen_device_info *devinfo = &screen->devinfo;
|
||||||
|
|
||||||
if (!has_llc) {
|
if (!devinfo->has_llc) {
|
||||||
batch->cpu_map = malloc(BATCH_SZ);
|
batch->cpu_map = malloc(BATCH_SZ);
|
||||||
batch->map = batch->cpu_map;
|
batch->map = batch->cpu_map;
|
||||||
batch->map_next = batch->cpu_map;
|
batch->map_next = batch->cpu_map;
|
||||||
|
@ -87,14 +87,14 @@ intel_batchbuffer_init(struct intel_batchbuffer *batch,
|
||||||
}
|
}
|
||||||
|
|
||||||
batch->use_batch_first =
|
batch->use_batch_first =
|
||||||
brw->screen->kernel_features & KERNEL_ALLOWS_EXEC_BATCH_FIRST;
|
screen->kernel_features & KERNEL_ALLOWS_EXEC_BATCH_FIRST;
|
||||||
|
|
||||||
/* PIPE_CONTROL needs a w/a but only on gen6 */
|
/* PIPE_CONTROL needs a w/a but only on gen6 */
|
||||||
batch->valid_reloc_flags = EXEC_OBJECT_WRITE;
|
batch->valid_reloc_flags = EXEC_OBJECT_WRITE;
|
||||||
if (brw->gen == 6)
|
if (devinfo->gen == 6)
|
||||||
batch->valid_reloc_flags |= EXEC_OBJECT_NEEDS_GTT;
|
batch->valid_reloc_flags |= EXEC_OBJECT_NEEDS_GTT;
|
||||||
|
|
||||||
intel_batchbuffer_reset(batch, bufmgr, has_llc);
|
intel_batchbuffer_reset(batch, bufmgr, devinfo->has_llc);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define READ_ONCE(x) (*(volatile __typeof__(x) *)&(x))
|
#define READ_ONCE(x) (*(volatile __typeof__(x) *)&(x))
|
||||||
|
|
|
@ -38,9 +38,8 @@ extern "C" {
|
||||||
|
|
||||||
struct intel_batchbuffer;
|
struct intel_batchbuffer;
|
||||||
|
|
||||||
void intel_batchbuffer_init(struct intel_batchbuffer *batch,
|
void intel_batchbuffer_init(struct intel_screen *screen,
|
||||||
struct brw_bufmgr *bufmgr,
|
struct intel_batchbuffer *batch);
|
||||||
bool has_llc);
|
|
||||||
void intel_batchbuffer_free(struct intel_batchbuffer *batch);
|
void intel_batchbuffer_free(struct intel_batchbuffer *batch);
|
||||||
void intel_batchbuffer_save_state(struct brw_context *brw);
|
void intel_batchbuffer_save_state(struct brw_context *brw);
|
||||||
void intel_batchbuffer_reset_to_saved(struct brw_context *brw);
|
void intel_batchbuffer_reset_to_saved(struct brw_context *brw);
|
||||||
|
|
Loading…
Reference in New Issue