mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 13:38:06 +02:00
i965: increase the brw eu instruction store size dynamically
Here is the final patch to enable dynamic eu instruction store size: increase the brw eu instruction store size dynamically instead of just allocating it statically with a constant limit. This would fix something that 'GL_MAX_PROGRAM_INSTRUCTIONS_ARB was 16384 while the driver would limit it to 10000'. v2: comments from ken, do not hardcode the eu limit to (1024 * 1024) Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
8d1b378939
commit
3aa3c3f758
3 changed files with 18 additions and 3 deletions
|
|
@ -174,6 +174,13 @@ void
|
|||
brw_init_compile(struct brw_context *brw, struct brw_compile *p, void *mem_ctx)
|
||||
{
|
||||
p->brw = brw;
|
||||
/*
|
||||
* Set the initial instruction store array size to 1024, if found that
|
||||
* isn't enough, then it will double the store size at brw_next_insn()
|
||||
* until out of memory.
|
||||
*/
|
||||
p->store_size = 1024;
|
||||
p->store = rzalloc_array(mem_ctx, struct brw_instruction, p->store_size);
|
||||
p->nr_insn = 0;
|
||||
p->current = p->stack;
|
||||
p->compressed = false;
|
||||
|
|
|
|||
|
|
@ -101,10 +101,10 @@ struct brw_glsl_call;
|
|||
|
||||
|
||||
#define BRW_EU_MAX_INSN_STACK 5
|
||||
#define BRW_EU_MAX_INSN 10000
|
||||
|
||||
struct brw_compile {
|
||||
struct brw_instruction store[BRW_EU_MAX_INSN];
|
||||
struct brw_instruction *store;
|
||||
int store_size;
|
||||
GLuint nr_insn;
|
||||
|
||||
void *mem_ctx;
|
||||
|
|
|
|||
|
|
@ -691,7 +691,15 @@ brw_next_insn(struct brw_compile *p, GLuint opcode)
|
|||
{
|
||||
struct brw_instruction *insn;
|
||||
|
||||
assert(p->nr_insn + 1 < BRW_EU_MAX_INSN);
|
||||
if (p->nr_insn + 1 > p->store_size) {
|
||||
if (0)
|
||||
printf("incresing the store size to %d\n", p->store_size << 1);
|
||||
p->store_size <<= 1;
|
||||
p->store = reralloc(p->mem_ctx, p->store,
|
||||
struct brw_instruction, p->store_size);
|
||||
if (!p->store)
|
||||
assert(!"realloc eu store memeory failed");
|
||||
}
|
||||
|
||||
insn = &p->store[p->nr_insn++];
|
||||
memcpy(insn, p->current, sizeof(*insn));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue