svga_context.c revision 4c7001462607e6e99e474d6271dd481d3f8f201c
13192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/********************************************************** 23192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Copyright 2008-2009 VMware, Inc. All rights reserved. 33192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 43192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person 53192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * obtaining a copy of this software and associated documentation 63192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * files (the "Software"), to deal in the Software without 73192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * restriction, including without limitation the rights to use, copy, 83192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * modify, merge, publish, distribute, sublicense, and/or sell copies 93192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the Software, and to permit persons to whom the Software is 103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * furnished to do so, subject to the following conditions: 113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The above copyright notice and this permission notice shall be 133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * included in all copies or substantial portions of the Software. 143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SOFTWARE. 233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz **********************************************************/ 253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_cmd.h" 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_defines.h" 2928486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_screen.h" 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "util/u_memory.h" 32cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca#include "util/u_bitmask.h" 333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "util/u_upload_mgr.h" 343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_context.h" 363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_screen.h" 37287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "svga_resource_texture.h" 38287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "svga_resource_buffer.h" 39287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "svga_resource.h" 403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_winsys.h" 413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_swtnl.h" 423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_draw.h" 433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_debug.h" 443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_state.h" 453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic void svga_destroy( struct pipe_context *pipe ) 483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_context *svga = svga_context( pipe ); 503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned shader; 513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_cleanup_framebuffer( svga ); 533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_cleanup_tss_binding( svga ); 543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_hwtnl_destroy( svga->hwtnl ); 563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_cleanup_vertex_state(svga); 583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->swc->destroy(svga->swc); 603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_destroy_swtnl( svga ); 623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz u_upload_destroy( svga->upload_vb ); 643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz u_upload_destroy( svga->upload_ib ); 653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 66cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca util_bitmask_destroy( svga->vs_bm ); 67cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca util_bitmask_destroy( svga->fs_bm ); 68cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca 693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz for(shader = 0; shader < PIPE_SHADER_TYPES; ++shader) 70287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell pipe_resource_reference( &svga->curr.cb[shader], NULL ); 713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz FREE( svga ); 733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 777f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context *svga_context_create( struct pipe_screen *screen, 787f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell void *priv ) 793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_screen *svgascreen = svga_screen(screen); 813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_context *svga = NULL; 823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz enum pipe_error ret; 833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga = CALLOC_STRUCT(svga_context); 853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga == NULL) 86da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonseca goto no_svga; 873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->pipe.winsys = screen->winsys; 893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->pipe.screen = screen; 907f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell svga->pipe.priv = priv; 913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->pipe.destroy = svga_destroy; 923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->pipe.clear = svga_clear; 933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->swc = svgascreen->sws->context_create(svgascreen->sws); 953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if(!svga->swc) 96da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonseca goto no_swc; 973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 98287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell svga_init_resource_functions(svga); 993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_blend_functions(svga); 1003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_blit_functions(svga); 1013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_depth_stencil_functions(svga); 1023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_draw_functions(svga); 1033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_flush_functions(svga); 1043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_misc_functions(svga); 1053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_rasterizer_functions(svga); 1063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_sampler_functions(svga); 1073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_fs_functions(svga); 1083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_vs_functions(svga); 1093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_vertex_functions(svga); 1103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_constbuffer_functions(svga); 1113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_init_query_functions(svga); 1124c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger svga_init_surface_functions(svga); 1133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11413a13fcb8054ed2d1138f6754fc67b014cc5cd5dMichel Dänzer 1153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* debug */ 1163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->debug.no_swtnl = debug_get_bool_option("SVGA_NO_SWTNL", FALSE); 1173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->debug.force_swtnl = debug_get_bool_option("SVGA_FORCE_SWTNL", FALSE); 1183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->debug.use_min_mipmap = debug_get_bool_option("SVGA_USE_MIN_MIPMAP", FALSE); 1193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->debug.disable_shader = debug_get_num_option("SVGA_DISABLE_SHADER", ~0); 1203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (!svga_init_swtnl(svga)) 122da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonseca goto no_swtnl; 1233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 124cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca svga->fs_bm = util_bitmask_create(); 125cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca if (svga->fs_bm == NULL) 126cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca goto no_fs_bm; 127cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca 128cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca svga->vs_bm = util_bitmask_create(); 129cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca if (svga->vs_bm == NULL) 130cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca goto no_vs_bm; 131cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca 132287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell svga->upload_ib = u_upload_create( &svga->pipe, 1333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 32 * 1024, 1343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 16, 135287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell PIPE_BIND_INDEX_BUFFER ); 1363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga->upload_ib == NULL) 137da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonseca goto no_upload_ib; 1383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 139287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell svga->upload_vb = u_upload_create( &svga->pipe, 1403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 128 * 1024, 1413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 16, 142287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell PIPE_BIND_VERTEX_BUFFER ); 1433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga->upload_vb == NULL) 144da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonseca goto no_upload_vb; 1453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->hwtnl = svga_hwtnl_create( svga, 1473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->upload_ib, 1483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->swc ); 1493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (svga->hwtnl == NULL) 150da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonseca goto no_hwtnl; 1513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz ret = svga_emit_initial_state( svga ); 1543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (ret) 155da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonseca goto no_state; 1563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Avoid shortcircuiting state with initial value of zero. 1583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz memset(&svga->state.hw_clear, 0xcd, sizeof(svga->state.hw_clear)); 1603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz memset(&svga->state.hw_clear.framebuffer, 0x0, 1613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz sizeof(svga->state.hw_clear.framebuffer)); 1623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz memset(&svga->state.hw_draw, 0xcd, sizeof(svga->state.hw_draw)); 1643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz memset(&svga->state.hw_draw.views, 0x0, sizeof(svga->state.hw_draw.views)); 1653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->state.hw_draw.num_views = 0; 1663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->dirty = ~0; 1683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz LIST_INITHEAD(&svga->dirty_buffers); 1703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return &svga->pipe; 1723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 173da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonsecano_state: 1743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_hwtnl_destroy( svga->hwtnl ); 175da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonsecano_hwtnl: 1763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz u_upload_destroy( svga->upload_vb ); 177da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonsecano_upload_vb: 1783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz u_upload_destroy( svga->upload_ib ); 179da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonsecano_upload_ib: 180cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca util_bitmask_destroy( svga->vs_bm ); 181cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonsecano_vs_bm: 182cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonseca util_bitmask_destroy( svga->fs_bm ); 183cdb445f3a9285e2d8f042a07021ade78b94e0156José Fonsecano_fs_bm: 1843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_destroy_swtnl(svga); 185da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonsecano_swtnl: 1863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->swc->destroy(svga->swc); 187da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonsecano_swc: 1883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz FREE(svga); 189da6a80301b2cfdc6902198e3fef5ec78e86e39cfJosé Fonsecano_svga: 1903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return NULL; 1913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 1923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzvoid svga_context_flush( struct svga_context *svga, 1953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct pipe_fence_handle **pfence ) 1963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 1973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_screen *svgascreen = svga_screen(svga->pipe.screen); 198b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca struct pipe_fence_handle *fence = NULL; 199b84b7f19dfdc0ac02175847065b39110db7ad98fKeith Whitwell 200b84b7f19dfdc0ac02175847065b39110db7ad98fKeith Whitwell svga->curr.nr_fbs = 0; 201b84b7f19dfdc0ac02175847065b39110db7ad98fKeith Whitwell 2023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Unmap upload manager buffers: 2033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 2043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz u_upload_flush(svga->upload_vb); 2053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz u_upload_flush(svga->upload_ib); 2063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 207b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca /* Ensure that texture dma uploads are processed 2083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * before submitting commands. 2093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 2103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_context_flush_buffers(svga); 2113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Flush pending commands to hardware: 2133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 214b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca svga->swc->flush(svga->swc, &fence); 215b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca 216b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca svga_screen_cache_flush(svgascreen, fence); 2173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2185a70db643295e99ca3f821a34abe474d56a6c872José Fonseca /* To force the reemission of rendertargets and texture bindings at 2195a70db643295e99ca3f821a34abe474d56a6c872José Fonseca * the beginning of every command buffer. 2205a70db643295e99ca3f821a34abe474d56a6c872José Fonseca */ 2215a70db643295e99ca3f821a34abe474d56a6c872José Fonseca svga->dirty |= SVGA_NEW_COMMAND_BUFFER; 2225a70db643295e99ca3f821a34abe474d56a6c872José Fonseca 2233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (SVGA_DEBUG & DEBUG_SYNC) { 224b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca if (fence) 225b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca svga->pipe.screen->fence_finish( svga->pipe.screen, fence, 0); 2263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 227b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca 228b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca if(pfence) 229b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca *pfence = fence; 230b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca else 231b84590994c4261d85485357263146d5e3d8827ebJosé Fonseca svgascreen->sws->fence_reference(svgascreen->sws, &fence, NULL); 2323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzvoid svga_hwtnl_flush_retry( struct svga_context *svga ) 2363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 2373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz enum pipe_error ret = PIPE_OK; 2383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz ret = svga_hwtnl_flush( svga->hwtnl ); 2403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (ret == PIPE_ERROR_OUT_OF_MEMORY) { 2413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga_context_flush( svga, NULL ); 2423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz ret = svga_hwtnl_flush( svga->hwtnl ); 2433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 2443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz assert(ret == 0); 2463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 248cd151effe654c460c46ba55780eb89b3072077c0Thomas Hellstromstruct svga_winsys_context * 249cd151effe654c460c46ba55780eb89b3072077c0Thomas Hellstromsvga_winsys_context( struct pipe_context *pipe ) 250cd151effe654c460c46ba55780eb89b3072077c0Thomas Hellstrom{ 251cd151effe654c460c46ba55780eb89b3072077c0Thomas Hellstrom return svga_context( pipe )->swc; 252cd151effe654c460c46ba55780eb89b3072077c0Thomas Hellstrom} 253