1fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse/*
2fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
3fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse *
4fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a
5fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * copy of this software and associated documentation files (the "Software"),
6fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * to deal in the Software without restriction, including without limitation
7fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * on the rights to use, copy, modify, merge, publish, distribute, sub
8fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * license, and/or sell copies of the Software, and to permit persons to whom
9fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * the Software is furnished to do so, subject to the following conditions:
10fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse *
11fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * The above copyright notice and this permission notice (including the next
12fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * paragraph) shall be included in all copies or substantial portions of the
13fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Software.
14fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse *
15fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * USE OR OTHER DEALINGS IN THE SOFTWARE.
22fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse *
23fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Authors:
24fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse *      Jerome Glisse
25fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse */
26fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#ifndef R600_H
27fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#define R600_H
28fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
2947dcfb8dab517e2c92af2f4813b0f5ad200b8b07Marek Olšák#include "../../winsys/radeon/drm/radeon_winsys.h"
30354f76f386afd980e8c1564c0b0502f9768007b5Marek Olšák#include "util/u_double_list.h"
31a52b3338c6e51421e3836ae210cd98d9c1ec337bMarek Olšák#include "util/u_transfer.h"
32fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
33fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#define R600_ERR(fmt, args...) \
341039f36c47bf8c5db93b1d39c912c86fc3b1eb2fVinson Lee	fprintf(stderr, "EE %s:%d %s - "fmt, __FILE__, __LINE__, __func__, ##args)
35fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
3646c19700676e17bfaa0a88346d512449fbeede79Benjamin Franzkestruct winsys_handle;
37fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
38fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisseenum radeon_family {
39fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_UNKNOWN,
40fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_R600,
41fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV610,
42fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV630,
43fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV670,
44fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV620,
45fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV635,
46fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RS780,
47fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RS880,
48fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV770,
49fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV730,
50fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV710,
51fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_RV740,
52fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_CEDAR,
53fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_REDWOOD,
54fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_JUNIPER,
55fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_CYPRESS,
56fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_HEMLOCK,
570e4c5f63b9023b292b88b2f0d5d0f6154e8ad263Alex Deucher	CHIP_PALM,
58414cd5df50435f475d92b02c229453d037369c0fAlex Deucher	CHIP_SUMO,
59414cd5df50435f475d92b02c229453d037369c0fAlex Deucher	CHIP_SUMO2,
60f54366bcf61a414885abb9f7f47e897598a80859Alex Deucher	CHIP_BARTS,
61f54366bcf61a414885abb9f7f47e897598a80859Alex Deucher	CHIP_TURKS,
62f54366bcf61a414885abb9f7f47e897598a80859Alex Deucher	CHIP_CAICOS,
637779f6d1dffde2c0501e44adc342e52803de08d4Dave Airlie	CHIP_CAYMAN,
64b4082f492b4b55df4c636445e47b97d1f1e4b5b2Alex Deucher	CHIP_ARUBA,
65fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	CHIP_LAST,
66fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse};
67fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
68363dfb83f1ca7f1ab09eec30aeb89732c5ce3e02Jerome Glisseenum chip_class {
69363dfb83f1ca7f1ab09eec30aeb89732c5ce3e02Jerome Glisse	R600,
70363dfb83f1ca7f1ab09eec30aeb89732c5ce3e02Jerome Glisse	R700,
71363dfb83f1ca7f1ab09eec30aeb89732c5ce3e02Jerome Glisse	EVERGREEN,
727779f6d1dffde2c0501e44adc342e52803de08d4Dave Airlie	CAYMAN,
73363dfb83f1ca7f1ab09eec30aeb89732c5ce3e02Jerome Glisse};
74363dfb83f1ca7f1ab09eec30aeb89732c5ce3e02Jerome Glisse
757b3fa038830663de9bceded1b0dd2d64b8cf39c4Dave Airliestruct r600_tiling_info {
767b3fa038830663de9bceded1b0dd2d64b8cf39c4Dave Airlie	unsigned num_channels;
777b3fa038830663de9bceded1b0dd2d64b8cf39c4Dave Airlie	unsigned num_banks;
787b3fa038830663de9bceded1b0dd2d64b8cf39c4Dave Airlie	unsigned group_bytes;
797b3fa038830663de9bceded1b0dd2d64b8cf39c4Dave Airlie};
807b3fa038830663de9bceded1b0dd2d64b8cf39c4Dave Airlie
816101b6d442b06a347c001fe85848d636ab7df260Marek Olšákstruct r600_resource {
82a52b3338c6e51421e3836ae210cd98d9c1ec337bMarek Olšák	struct u_resource		b;
832ce783d8ddec1b1fcadc0798af0ebb045bba1cc4Marek Olšák
846101b6d442b06a347c001fe85848d636ab7df260Marek Olšák	/* Winsys objects. */
856101b6d442b06a347c001fe85848d636ab7df260Marek Olšák	struct pb_buffer		*buf;
866101b6d442b06a347c001fe85848d636ab7df260Marek Olšák	struct radeon_winsys_cs_handle	*cs_buf;
8793f4e3cb6c1ca303ee1f5c2a2491a8eff33f2633Marek Olšák
8893f4e3cb6c1ca303ee1f5c2a2491a8eff33f2633Marek Olšák	/* Resource state. */
8993f4e3cb6c1ca303ee1f5c2a2491a8eff33f2633Marek Olšák	unsigned			domains;
906101b6d442b06a347c001fe85848d636ab7df260Marek Olšák};
91fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
92fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#define R600_BLOCK_MAX_BO		32
93fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#define R600_BLOCK_MAX_REG		128
94fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
95991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie/* each range covers 9 bits of dword space = 512 dwords = 2k bytes */
96991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie/* there is a block entry for each register so 512 blocks */
97991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie/* we have no registers to read/write below 0x8000 (0x2000 in dw space) */
98991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie/* we use some fake offsets at 0x40000 to do evergreen sampler borders so take 0x42000 as a max bound*/
99991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie#define RANGE_OFFSET_START 0x8000
100991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie#define HASH_SHIFT 9
101991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie#define NUM_RANGES (0x42000 - RANGE_OFFSET_START) / (4 << HASH_SHIFT) /* 128 << 9 = 64k */
102991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie
103991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie#define CTX_RANGE_ID(offset) ((((offset - RANGE_OFFSET_START) >> 2) >> HASH_SHIFT) & 255)
104991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie#define CTX_BLOCK_ID(offset) (((offset - RANGE_OFFSET_START) >> 2) & ((1 << HASH_SHIFT) - 1))
105991dbd71fdcc95e42bc56097d2fef3a7df0e8eaaDave Airlie
106fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glissestruct r600_pipe_reg {
10778293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			value;
1084423c79ddf6853d1d4594afda3e1262c1b9af4f5Dave Airlie	struct r600_block 		*block;
1096101b6d442b06a347c001fe85848d636ab7df260Marek Olšák	struct r600_resource		*bo;
11047dcfb8dab517e2c92af2f4813b0f5ad200b8b07Marek Olšák	enum radeon_bo_usage		bo_usage;
11178293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			id;
112fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse};
113fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
114fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glissestruct r600_pipe_state {
115fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	unsigned			id;
116fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	unsigned			nregs;
117fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	struct r600_pipe_reg		regs[R600_BLOCK_MAX_REG];
118fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse};
119fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
120fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#define R600_BLOCK_STATUS_ENABLED	(1 << 0)
121fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#define R600_BLOCK_STATUS_DIRTY		(1 << 1)
122ba78a5a679b3f6b00d0f2070bb1ab6d56443ab16Dave Airlie
123fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glissestruct r600_block_reloc {
1246101b6d442b06a347c001fe85848d636ab7df260Marek Olšák	struct r600_resource	*bo;
12547dcfb8dab517e2c92af2f4813b0f5ad200b8b07Marek Olšák	enum radeon_bo_usage	bo_usage;
1262cf3199ee3b0014bc426bc3163dfa279c00eabb3Jerome Glisse	unsigned		bo_pm4_index;
127fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse};
128fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
1295646964b1360883b6254e2ebacc198f43869d36fJerome Glissestruct r600_block {
130ac8a1ebe55b08180945ffaebcff6b3bed336c9ecBas Nieuwenhuizen	struct list_head	list;
13163184bc8b278ba82f5462798b323774c67a019e6Dave Airlie	struct list_head	enable_list;
132fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	unsigned		status;
133c058067e578e4426f56f9b23e33e3d3fac4562f7Dave Airlie	unsigned                flags;
134fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	unsigned		start_offset;
135fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	unsigned		pm4_ndwords;
136fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	unsigned		nbo;
13778293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint16_t 		nreg;
13878293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint16_t                nreg_dirty;
13978293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t		*reg;
14078293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t		pm4[R600_BLOCK_MAX_REG];
141fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	unsigned		pm4_bo_index[R600_BLOCK_MAX_REG];
142fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	struct r600_block_reloc	reloc[R600_BLOCK_MAX_BO];
143fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse};
144fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
1455646964b1360883b6254e2ebacc198f43869d36fJerome Glissestruct r600_range {
1465646964b1360883b6254e2ebacc198f43869d36fJerome Glisse	struct r600_block	**blocks;
147fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse};
148fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
149df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšákstruct r600_query_buffer {
150df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	/* The buffer where query results are stored. */
151df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	struct r600_resource			*buf;
152ef29bfee031cdab3dbb0f9a79828c4b0d0405991Vadim Girlin	/* Offset of the next free result after current query data */
153ef29bfee031cdab3dbb0f9a79828c4b0d0405991Vadim Girlin	unsigned				results_end;
154df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	/* If a query buffer is full, a new buffer is created and the old one
155df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	 * is put in here. When we calculate the result, we sum up the samples
156df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	 * from all buffers. */
157df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	struct r600_query_buffer		*previous;
158df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák};
159df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák
160df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšákstruct r600_query {
161df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	/* The query buffer and how many results are in it. */
162df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	struct r600_query_buffer		buffer;
163df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	/* The type of query */
164df00dc3c817771ac5034a44dff2b14cd7759b207Marek Olšák	unsigned				type;
1651b375f8413d898a18c989c20d0dc16d3b1be33bcMarek Olšák	/* Size of the result in memory for both begin_query and end_query,
1661b375f8413d898a18c989c20d0dc16d3b1be33bcMarek Olšák	 * this can be one or two numbers, or it could even be a size of a structure. */
167ef29bfee031cdab3dbb0f9a79828c4b0d0405991Vadim Girlin	unsigned				result_size;
168cb7c6c30d02ab46efc4ed711b2a632de50157347Marek Olšák	/* The number of dwords for begin_query or end_query. */
169cb7c6c30d02ab46efc4ed711b2a632de50157347Marek Olšák	unsigned				num_cs_dw;
170ca35292a4456fec1c584d40bf9b4197fe733f609Jerome Glisse	/* linked list of queries */
171ca35292a4456fec1c584d40bf9b4197fe733f609Jerome Glisse	struct list_head			list;
172ca35292a4456fec1c584d40bf9b4197fe733f609Jerome Glisse};
173ca35292a4456fec1c584d40bf9b4197fe733f609Jerome Glisse
174543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšákstruct r600_so_target {
175543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	struct pipe_stream_output_target b;
176543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák
177543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	/* The buffer where BUFFER_FILLED_SIZE is stored. */
178543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	struct r600_resource	*filled_size;
1792449695e822421fdcaf1c66dffc12d7d705ea69dMarek Olšák	unsigned		stride_in_dw;
180543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	unsigned		so_index;
181543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák};
182543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák
1836067a2a67f9a7aab2aee051469bea8af03747a95Fredrik Höglund#define R600_CONTEXT_DRAW_PENDING	(1 << 0)
1846067a2a67f9a7aab2aee051469bea8af03747a95Fredrik Höglund#define R600_CONTEXT_DST_CACHES_DIRTY	(1 << 1)
1852df399c34bb39122a45bdd5b430b48346542e1cbJerome Glisse#define R600_PARTIAL_FLUSH		(1 << 2)
1866048be89697fe27e30ef0f45594daba4e896362cJerome Glisse
187e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšákstruct r600_context;
188e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšákstruct r600_screen;
189e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšák
1906eb94fc3444a300a0419c40cfcf356fdd88bc304Vadim Girlinvoid r600_get_backend_mask(struct r600_context *ctx);
191bc70bcfc6915883bd5c60712b70e9ed7e1d80ea8Marek Olšákint r600_context_init(struct r600_context *ctx);
192fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glissevoid r600_context_fini(struct r600_context *ctx);
1933d3194e93cbfe0fc42dd96218e8e999f5ccfe726Tom Stellardvoid r600_context_pipe_state_emit(struct r600_context *ctx, struct r600_pipe_state *state, unsigned pkt_flags);
194fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glissevoid r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_state *state);
195e2e1dc9e66ff348caa97b7b35e558d75c6cc6899Marek Olšákvoid r600_context_flush(struct r600_context *ctx, unsigned flags);
196fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse
1976101b6d442b06a347c001fe85848d636ab7df260Marek Olšákvoid r600_context_emit_fence(struct r600_context *ctx, struct r600_resource *fence,
198948e1eb8e9c166ad5b74abc630d0760768ce78c9Fredrik Höglund                             unsigned offset, unsigned value);
1990813e58a3e41faf6f2072d034dfdc6198a3a1feeMarek Olšákvoid r600_inval_shader_cache(struct r600_context *ctx);
2000813e58a3e41faf6f2072d034dfdc6198a3a1feeMarek Olšákvoid r600_inval_texture_cache(struct r600_context *ctx);
2010813e58a3e41faf6f2072d034dfdc6198a3a1feeMarek Olšákvoid r600_inval_vertex_cache(struct r600_context *ctx);
2020813e58a3e41faf6f2072d034dfdc6198a3a1feeMarek Olšákvoid r600_flush_framebuffer(struct r600_context *ctx, bool flush_now);
203ca35292a4456fec1c584d40bf9b4197fe733f609Jerome Glisse
204543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšákvoid r600_context_streamout_begin(struct r600_context *ctx);
205543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšákvoid r600_context_streamout_end(struct r600_context *ctx);
2063b0467192057cc561b6d495d6445b2ed04fc3ebfMarek Olšákvoid r600_need_cs_space(struct r600_context *ctx, unsigned num_dw, boolean count_draw_in);
207e00e1586dd94c1bbcd1ecfd9649fde9281be1977Tom Stellardvoid r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block, unsigned pkt_flags);
208543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák
209bc70bcfc6915883bd5c60712b70e9ed7e1d80ea8Marek Olšákint evergreen_context_init(struct r600_context *ctx);
2107eab5ef425e1e08c0dc0ea8d161c33610a91586fDave Airlie
21162b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlievoid _r600_pipe_state_add_reg_bo(struct r600_context *ctx,
21262b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie				 struct r600_pipe_state *state,
21362b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie				 uint32_t offset, uint32_t value,
21462b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie				 uint32_t range_id, uint32_t block_id,
21562b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie				 struct r600_resource *bo,
21662b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie				 enum radeon_bo_usage usage);
21762b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie
21842502b6f03230b828121f60143190c39bc5c8ddaDave Airlievoid _r600_pipe_state_add_reg(struct r600_context *ctx,
21942502b6f03230b828121f60143190c39bc5c8ddaDave Airlie			      struct r600_pipe_state *state,
22078293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák			      uint32_t offset, uint32_t value,
22162b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie			      uint32_t range_id, uint32_t block_id);
2227f6672f6a737bc1c47e36c9567bd6d908855ce4dDave Airlie
22351d0892ee2daaa442a48abff2329e1485dd337e8Dave Airlievoid r600_pipe_state_add_reg_noblock(struct r600_pipe_state *state,
22478293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák				     uint32_t offset, uint32_t value,
2256101b6d442b06a347c001fe85848d636ab7df260Marek Olšák				     struct r600_resource *bo,
22647dcfb8dab517e2c92af2f4813b0f5ad200b8b07Marek Olšák				     enum radeon_bo_usage usage);
22747dcfb8dab517e2c92af2f4813b0f5ad200b8b07Marek Olšák
22862b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie#define r600_pipe_state_add_reg_bo(state, offset, value, bo, usage) _r600_pipe_state_add_reg_bo(rctx, state, offset, value, CTX_RANGE_ID(offset), CTX_BLOCK_ID(offset), bo, usage)
22962b0323cf6af90aa2be89ec76ec3693213b0de5eDave Airlie#define r600_pipe_state_add_reg(state, offset, value) _r600_pipe_state_add_reg(rctx, state, offset, value, CTX_RANGE_ID(offset), CTX_BLOCK_ID(offset))
2307f6672f6a737bc1c47e36c9567bd6d908855ce4dDave Airlie
231573758fd094431c8b3220786cea28dfdb4cfad1cDave Airliestatic inline void r600_pipe_state_mod_reg(struct r600_pipe_state *state,
23278293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák					   uint32_t value)
233573758fd094431c8b3220786cea28dfdb4cfad1cDave Airlie{
234573758fd094431c8b3220786cea28dfdb4cfad1cDave Airlie	state->regs[state->nregs].value = value;
235573758fd094431c8b3220786cea28dfdb4cfad1cDave Airlie	state->nregs++;
236573758fd094431c8b3220786cea28dfdb4cfad1cDave Airlie}
237573758fd094431c8b3220786cea28dfdb4cfad1cDave Airlie
238fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse#endif
239