@@ -497,6 +497,9 @@ struct nv04_surface* | |||
nv04_surface_wrap_for_render(struct pipe_screen *pscreen, | |||
struct nv04_surface_2d* eng2d, struct nv04_surface* ns) | |||
{ | |||
struct pipe_resource templ; | |||
struct pipe_resource* temp_tex; | |||
struct nv04_surface* temp_ns; | |||
int temp_flags; | |||
temp_flags = (ns->base.usage | | |||
@@ -506,7 +509,6 @@ nv04_surface_wrap_for_render(struct pipe_screen *pscreen, | |||
ns->base.usage = (PIPE_BIND_BLIT_SOURCE | | |||
PIPE_BIND_BLIT_DESTINATION); | |||
struct pipe_resource templ; | |||
memset(&templ, 0, sizeof(templ)); | |||
templ.format = ns->base.texture->format; | |||
templ.target = PIPE_TEXTURE_2D; | |||
@@ -520,8 +522,8 @@ nv04_surface_wrap_for_render(struct pipe_screen *pscreen, | |||
templ.bind = ns->base.texture->bind | PIPE_BIND_RENDER_TARGET; | |||
struct pipe_resource* temp_tex = pscreen->resource_create(pscreen, &templ); | |||
struct nv04_surface* temp_ns = (struct nv04_surface*)pscreen->get_tex_surface(pscreen, temp_tex, 0, 0, 0, temp_flags); | |||
temp_tex = pscreen->resource_create(pscreen, &templ); | |||
temp_ns = (struct nv04_surface*)pscreen->get_tex_surface(pscreen, temp_tex, 0, 0, 0, temp_flags); | |||
temp_ns->backing = ns; | |||
if(ns->base.usage & PIPE_BIND_BLIT_SOURCE) |
@@ -40,11 +40,14 @@ nvfx_fragtex_relocate(struct nvfx_context *nvfx) | |||
samplers = nvfx->hw_samplers; | |||
while (samplers) { | |||
struct nvfx_miptree* mt; | |||
struct nouveau_bo *bo; | |||
unit = ffs(samplers) - 1; | |||
samplers &= ~(1 << unit); | |||
struct nvfx_miptree* mt = (struct nvfx_miptree*)nvfx->fragment_sampler_views[unit]->texture; | |||
struct nouveau_bo *bo = mt->base.bo; | |||
mt = (struct nvfx_miptree*)nvfx->fragment_sampler_views[unit]->texture; | |||
bo = mt->base.bo; | |||
MARK_RING(chan, 3, 3); | |||
OUT_RELOC(chan, bo, RING_3D(NV34TCL_TX_OFFSET(unit), 2), tex_flags | NOUVEAU_BO_DUMMY, 0, 0); |
@@ -316,6 +316,7 @@ nvfx_screen_get_vertex_buffer_flags(struct nvfx_screen* screen) | |||
struct pipe_screen * | |||
nvfx_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev) | |||
{ | |||
static const unsigned query_sizes[] = {(4096 - 4 * 32) / 32, 3 * 1024 / 32, 2 * 1024 / 32, 1024 / 32}; | |||
struct nvfx_screen *screen = CALLOC_STRUCT(nvfx_screen); | |||
struct nouveau_channel *chan; | |||
struct pipe_screen *pscreen; | |||
@@ -401,7 +402,6 @@ nvfx_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev) | |||
} | |||
/* Query objects */ | |||
unsigned query_sizes[] = {(4096 - 4 * 32) / 32, 3 * 1024 / 32, 2 * 1024 / 32, 1024 / 32}; | |||
for(i = 0; i < sizeof(query_sizes) / sizeof(query_sizes[0]); ++i) | |||
{ | |||
ret = nouveau_notifier_alloc(chan, 0xbeef0302, query_sizes[i], &screen->query); |