i965: Allocate temporaries contiguously with other regs in fragment shaders.
This is required for threads to be spawned with correctly sized GRF register blocks.
This commit is contained in:
@@ -246,7 +246,9 @@ struct brw_wm_compile {
|
|||||||
struct brw_reg stack;
|
struct brw_reg stack;
|
||||||
struct brw_reg emit_mask_reg;
|
struct brw_reg emit_mask_reg;
|
||||||
GLuint reg_index;
|
GLuint reg_index;
|
||||||
|
GLuint tmp_regs[BRW_WM_MAX_GRF];
|
||||||
GLuint tmp_index;
|
GLuint tmp_index;
|
||||||
|
GLuint tmp_max;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -47,13 +47,16 @@ static int get_scalar_dst_index(struct prog_instruction *inst)
|
|||||||
static struct brw_reg alloc_tmp(struct brw_wm_compile *c)
|
static struct brw_reg alloc_tmp(struct brw_wm_compile *c)
|
||||||
{
|
{
|
||||||
struct brw_reg reg;
|
struct brw_reg reg;
|
||||||
reg = brw_vec8_grf(c->tmp_index--, 0);
|
if(c->tmp_index == c->tmp_max)
|
||||||
|
c->tmp_regs[ c->tmp_max++ ] = c->reg_index++;
|
||||||
|
|
||||||
|
reg = brw_vec8_grf(c->tmp_regs[ c->tmp_index++ ], 0);
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void release_tmps(struct brw_wm_compile *c)
|
static void release_tmps(struct brw_wm_compile *c)
|
||||||
{
|
{
|
||||||
c->tmp_index = 127;
|
c->tmp_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct brw_reg
|
static struct brw_reg
|
||||||
@@ -1368,7 +1371,6 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
|
|||||||
void brw_wm_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c)
|
void brw_wm_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c)
|
||||||
{
|
{
|
||||||
brw_wm_pass_fp(c);
|
brw_wm_pass_fp(c);
|
||||||
c->tmp_index = 127;
|
|
||||||
brw_wm_emit_glsl(brw, c);
|
brw_wm_emit_glsl(brw, c);
|
||||||
c->prog_data.total_grf = c->reg_index;
|
c->prog_data.total_grf = c->reg_index;
|
||||||
c->prog_data.total_scratch = 0;
|
c->prog_data.total_scratch = 0;
|
||||||
|
Reference in New Issue
Block a user