r300g: Let hyperz init fail
Signed-off-by: Marek Olšák <maraeo@gmail.com>
This commit is contained in:
@@ -457,7 +457,8 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
|
||||
|
||||
/* setup hyper-z mm */
|
||||
if (r300->rws->get_value(r300->rws, R300_CAN_HYPERZ))
|
||||
r300_hyperz_init_mm(r300);
|
||||
if (!r300_hyperz_init_mm(r300))
|
||||
goto fail;
|
||||
|
||||
r300->upload_ib = u_upload_create(&r300->context,
|
||||
32 * 1024, 16,
|
||||
|
||||
@@ -373,23 +373,36 @@ void r300_zmask_alloc_block(struct r300_context *r300, struct r300_surface *surf
|
||||
return;
|
||||
}
|
||||
|
||||
void r300_hyperz_init_mm(struct r300_context *r300)
|
||||
boolean r300_hyperz_init_mm(struct r300_context *r300)
|
||||
{
|
||||
struct r300_screen* r300screen = r300->screen;
|
||||
int frag_pipes = r300screen->caps.num_frag_pipes;
|
||||
|
||||
if (r300screen->caps.hiz_ram)
|
||||
r300->hiz_mm = u_mmInit(0, r300screen->caps.hiz_ram * frag_pipes);
|
||||
|
||||
r300->zmask_mm = u_mmInit(0, r300screen->caps.zmask_ram * frag_pipes);
|
||||
if (!r300->zmask_mm)
|
||||
return FALSE;
|
||||
|
||||
if (r300screen->caps.hiz_ram) {
|
||||
r300->hiz_mm = u_mmInit(0, r300screen->caps.hiz_ram * frag_pipes);
|
||||
if (!r300->hiz_mm) {
|
||||
u_mmDestroy(r300->zmask_mm);
|
||||
r300->zmask_mm = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void r300_hyperz_destroy_mm(struct r300_context *r300)
|
||||
{
|
||||
struct r300_screen* r300screen = r300->screen;
|
||||
|
||||
if (r300screen->caps.hiz_ram)
|
||||
if (r300screen->caps.hiz_ram) {
|
||||
u_mmDestroy(r300->hiz_mm);
|
||||
r300->hiz_mm = NULL;
|
||||
}
|
||||
|
||||
u_mmDestroy(r300->zmask_mm);
|
||||
r300->zmask_mm = NULL;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,6 @@ void r300_update_hyperz_state(struct r300_context* r300);
|
||||
void r300_hiz_alloc_block(struct r300_context *r300, struct r300_surface *surf);
|
||||
void r300_zmask_alloc_block(struct r300_context *r300, struct r300_surface *surf, int compress);
|
||||
|
||||
void r300_hyperz_init_mm(struct r300_context *r300);
|
||||
boolean r300_hyperz_init_mm(struct r300_context *r300);
|
||||
void r300_hyperz_destroy_mm(struct r300_context *r300);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user