From 8ad9d42b338c6684930b7898734f9070b6368172 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 1 Dec 2012 22:40:00 +0100 Subject: [PATCH] r300g: refuse to create too large textures --- src/gallium/drivers/r300/r300_texture.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 33333ca51b5..c16bb03e702 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -980,6 +980,21 @@ r300_texture_create_object(struct r300_screen *rscreen, r300_texture_desc_init(rscreen, tex, base); + /* Figure out the ideal placement for the texture.. */ + if (tex->domain & RADEON_DOMAIN_VRAM && + tex->tex.size_in_bytes >= rscreen->info.vram_size) { + tex->domain &= ~RADEON_DOMAIN_VRAM; + tex->domain |= RADEON_DOMAIN_GTT; + } + if (tex->domain & RADEON_DOMAIN_GTT && + tex->tex.size_in_bytes >= rscreen->info.gart_size) { + tex->domain &= ~RADEON_DOMAIN_GTT; + } + /* Just fail if the texture is too large. */ + if (!tex->domain) { + goto fail; + } + /* Create the backing buffer if needed. */ if (!tex->buf) { tex->buf = rws->buffer_create(rws, tex->tex.size_in_bytes, 2048, -- 2.30.2