svga_state.h revision 2a5eeeaebe4f631e0f4e3dbe73f22d5f60a53db5
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**********************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright 2008-2009 VMware, Inc.  All rights reserved.
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Permission is hereby granted, free of charge, to any person
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * obtaining a copy of this software and associated documentation
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * files (the "Software"), to deal in the Software without
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * restriction, including without limitation the rights to use, copy,
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * modify, merge, publish, distribute, sublicense, and/or sell copies
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of the Software, and to permit persons to whom the Software is
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * furnished to do so, subject to the following conditions:
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The above copyright notice and this permission notice shall be
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * included in all copies or substantial portions of the Software.
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * SOFTWARE.
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org **********************************************************/
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef SVGA_STATE_H
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SVGA_STATE_H
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "pipe/p_compiler.h"
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "pipe/p_defines.h"
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct svga_context;
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid svga_init_state( struct svga_context *svga );
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid svga_destroy_state( struct svga_context *svga );
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct svga_tracked_state {
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   const char *name;
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   unsigned dirty;
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   enum pipe_error (*update)( struct svga_context *svga, unsigned dirty );
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* NEED_SWTNL
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_update_need_swvfetch;
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_update_need_pipeline;
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_update_need_swtnl;
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* HW_CLEAR
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_viewport;
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_scissor;
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_framebuffer;
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* HW_DRAW
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_vs;
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_fs;
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_rss;
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_tss;
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_tss_binding;
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_clip_planes;
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_vdecl;
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_fs_constants;
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_hw_vs_constants;
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* SWTNL_DRAW
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_update_swtnl_draw;
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern struct svga_tracked_state svga_update_swtnl_vdecl;
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Bring the hardware fully up-to-date so that we can emit draw
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * commands.
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SVGA_STATE_NEED_SWTNL        0
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SVGA_STATE_HW_CLEAR          1
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SVGA_STATE_HW_DRAW           2
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SVGA_STATE_SWTNL_DRAW        3
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SVGA_STATE_MAX               4
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum pipe_error svga_update_state( struct svga_context *svga,
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                   unsigned level );
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid svga_update_state_retry( struct svga_context *svga,
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                              unsigned level );
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum pipe_error svga_emit_initial_state( struct svga_context *svga );
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum pipe_error svga_reemit_framebuffer_bindings( struct svga_context *svga );
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum pipe_error svga_reemit_tss_bindings( struct svga_context *svga );
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org