g3dvl: Work around SP tex cache bug, specify resource usage flags.
authorYounes Manton <younes.m@gmail.com>
Thu, 19 Jun 2008 02:21:11 +0000 (22:21 -0400)
committerYounes Manton <younes.m@gmail.com>
Mon, 30 Jun 2008 14:11:02 +0000 (10:11 -0400)
src/gallium/state_trackers/g3dvl/vl_context.c
src/gallium/state_trackers/g3dvl/vl_surface.c

index 59a1ccd152ba19a2f3719298a7b7602ef222196e..3b9afabbb845a9b3da994d4dcc1d2981fd6e55f8 100644 (file)
@@ -2218,7 +2218,6 @@ int vlDestroyContext(struct VL_CONTEXT *context)
        
        vlDestroy(context);
        
-       context->pipe->screen->destroy(context->pipe->screen);
        context->pipe->destroy(context->pipe);
        
        free(context);
index 3f59d0f1551c8144ba56992be2585b3dcb0f99d4..6451e54953d2209cf5f847b2bb3775c6ce6e1413 100644 (file)
@@ -31,7 +31,7 @@ static int vlGrabBlocks
                0, 0, 0, PIPE_BUFFER_USAGE_CPU_WRITE
        );
        
-       texels = pipe_surface_map(tex_surface, 0);
+       texels = pipe_surface_map(tex_surface, PIPE_BUFFER_USAGE_CPU_WRITE);
        
        for (b = 0; b < 4; ++b)
        {
@@ -131,7 +131,7 @@ static int vlGrabBlocks
                        0, 0, 0, PIPE_BUFFER_USAGE_CPU_WRITE
                );
        
-               texels = pipe_surface_map(tex_surface, 0);
+               texels = pipe_surface_map(tex_surface, PIPE_BUFFER_USAGE_CPU_WRITE);
                
                if ((coded_block_pattern >> (b + 4)) & 1)
                {
@@ -165,6 +165,9 @@ static int vlGrabBlocks
                pipe_surface_unmap(tex_surface);
        }
        
+       /* XXX: Texture cache is not invalidated when texture contents change */
+       context->pipe->flush(context->pipe, PIPE_FLUSH_TEXTURE_CACHE, NULL);
+       
        return 0;
 }
 
@@ -265,7 +268,7 @@ int vlRenderIMacroBlock
        (
                pipe->screen,
                surface->texture,
-               0, 0, 0, PIPE_BUFFER_USAGE_CPU_READ | PIPE_BUFFER_USAGE_CPU_WRITE
+               0, 0, 0, PIPE_BUFFER_USAGE_GPU_READ | PIPE_BUFFER_USAGE_GPU_WRITE
        );
        pipe->set_framebuffer_state(pipe, &surface->context->states.mc.render_target);
        pipe->set_sampler_textures(pipe, 3, surface->context->states.mc.textures);
@@ -346,7 +349,7 @@ int vlRenderPMacroBlock
        (
                pipe->screen,
                surface->texture,
-               0, 0, 0, PIPE_BUFFER_USAGE_CPU_READ | PIPE_BUFFER_USAGE_CPU_WRITE
+               0, 0, 0, PIPE_BUFFER_USAGE_GPU_READ | PIPE_BUFFER_USAGE_GPU_WRITE
        );
        pipe->set_framebuffer_state(pipe, &surface->context->states.mc.render_target);
        
@@ -434,7 +437,7 @@ int vlRenderBMacroBlock
        (
                pipe->screen,
                surface->texture,
-               0, 0, 0, PIPE_BUFFER_USAGE_CPU_READ | PIPE_BUFFER_USAGE_CPU_WRITE
+               0, 0, 0, PIPE_BUFFER_USAGE_GPU_READ | PIPE_BUFFER_USAGE_GPU_WRITE
        );
        pipe->set_framebuffer_state(pipe, &surface->context->states.mc.render_target);
        
@@ -510,6 +513,7 @@ int vlPutSurface
                        destw,
                        desth,
                        PIPE_FORMAT_A8R8G8B8_UNORM,
+                       /*XXX: SoftPipe doesn't change GPU usage to CPU like it does for textures */
                        PIPE_BUFFER_USAGE_CPU_READ | PIPE_BUFFER_USAGE_CPU_WRITE,
                        0
                );