1bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson/*
2bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * Copyright 2008 Corbin Simpson <MostAwesomeDude@gmail.com>
3bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson *
4bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * Permission is hereby granted, free of charge, to any person obtaining a
5bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * copy of this software and associated documentation files (the "Software"),
6bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * to deal in the Software without restriction, including without limitation
7bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * on the rights to use, copy, modify, merge, publish, distribute, sub
8bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * license, and/or sell copies of the Software, and to permit persons to whom
9bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * the Software is furnished to do so, subject to the following conditions:
10bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson *
11bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * The above copyright notice and this permission notice (including the next
12bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * paragraph) shall be included in all copies or substantial portions of the
13bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * Software.
14bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson *
15bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson * USE OR OTHER DEALINGS IN THE SOFTWARE. */
22bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson
23b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson#ifndef R300_EMIT_H
24b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson#define R300_EMIT_H
25b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson
262db46af8758bf77a2748460f617d0ead5b08a454Maciej Cencora#include "r300_context.h"
272db46af8758bf77a2748460f617d0ead5b08a454Maciej Cencora
28d0c398a8e2985b855f923aec3470cef8734a622aNicolai Hähnlestruct rX00_fragment_program_code;
29188f8c679254f193cdcfcd4ef338f3c8c5e1146dNicolai Hähnlestruct r300_vertex_program_code;
30188f8c679254f193cdcfcd4ef338f3c8c5e1146dNicolai Hähnle
313da6487115216c47ce1be56b45be654ddb879d6fMarek Olšákuint32_t pack_float24(float f);
323da6487115216c47ce1be56b45be654ddb879d6fMarek Olšák
3365482f2c2b1c3456d0ca58a38d82c02a5d6d362cMarek Olšákvoid r300_emit_vertex_arrays(struct r300_context* r300, int offset,
3465482f2c2b1c3456d0ca58a38d82c02a5d6d362cMarek Olšák                             boolean indexed, int instance_id);
353445f476977ae403cef9ca15661fa0f96ff50ecaMaciej Cencora
36841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_blend_state(struct r300_context* r300,
37841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                           unsigned size, void* state);
38bea0c5812bd2795b514725d2a3788add3dc209afCorbin Simpson
39841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_blend_color_state(struct r300_context* r300,
40841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                                 unsigned size, void* state);
412e635ef563e2bff50e7a2af4f505bbd066865723Corbin Simpson
42841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_clip_state(struct r300_context* r300,
43841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                          unsigned size, void* state);
441a359d983512b39783ce9f4eb842d3ea4ec012a6Corbin Simpson
45841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_dsa_state(struct r300_context* r300,
46841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                         unsigned size, void* state);
4770b508bffba723b58817e375447c1695d9d5602bCorbin Simpson
488c836f7f740c6f74511c727c7bed0680ddba9974Marek Olšákvoid r300_emit_hyperz_state(struct r300_context *r300,
498c836f7f740c6f74511c727c7bed0680ddba9974Marek Olšák                            unsigned size, void *state);
508c836f7f740c6f74511c727c7bed0680ddba9974Marek Olšák
518c836f7f740c6f74511c727c7bed0680ddba9974Marek Olšákvoid r300_emit_hyperz_end(struct r300_context *r300);
528c836f7f740c6f74511c727c7bed0680ddba9974Marek Olšák
5334092c55d63e24a4f326bd9bb90765ea4ec7e17eMarek Olšákvoid r300_emit_fs(struct r300_context* r300, unsigned size, void *state);
542db46af8758bf77a2748460f617d0ead5b08a454Maciej Cencora
55136bd184a29945ab7ae0636ecef65e9db97f8e4dMarek Olšákvoid r300_emit_fs_constants(struct r300_context* r300, unsigned size, void *state);
56fe7863f3f82cda290334cecfde816e21a0e9f5d3Corbin Simpson
575633392966f56a75cb2a675ef9594e987c4591b9Marek Olšákvoid r300_emit_fs_rc_constant_state(struct r300_context* r300, unsigned size, void *state);
58953a309de9204490edcd011e700c06c7c25c0b9eMarek Olšák
5934092c55d63e24a4f326bd9bb90765ea4ec7e17eMarek Olšákvoid r500_emit_fs(struct r300_context* r300, unsigned size, void *state);
602db46af8758bf77a2748460f617d0ead5b08a454Maciej Cencora
61136bd184a29945ab7ae0636ecef65e9db97f8e4dMarek Olšákvoid r500_emit_fs_constants(struct r300_context* r300, unsigned size, void *state);
62fe7863f3f82cda290334cecfde816e21a0e9f5d3Corbin Simpson
635633392966f56a75cb2a675ef9594e987c4591b9Marek Olšákvoid r500_emit_fs_rc_constant_state(struct r300_context* r300, unsigned size, void *state);
64953a309de9204490edcd011e700c06c7c25c0b9eMarek Olšák
65841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state);
66fe7863f3f82cda290334cecfde816e21a0e9f5d3Corbin Simpson
670a19d57b845b269601c862193ed801b19aa4c2f1Marek Olšákvoid r300_emit_fb_state_pipelined(struct r300_context *r300,
680a19d57b845b269601c862193ed801b19aa4c2f1Marek Olšák                                  unsigned size, void *state);
690a19d57b845b269601c862193ed801b19aa4c2f1Marek Olšák
7093bce03b275f66b6b2db410bbef38954de6a617cMarek Olšákvoid r300_emit_gpu_flush(struct r300_context *r300, unsigned size, void *state);
7193bce03b275f66b6b2db410bbef38954de6a617cMarek Olšák
7269adebf5945d994485c584c183c148fc2c1373edMarek Olšákvoid r300_emit_aa_state(struct r300_context *r300, unsigned size, void *state);
7369adebf5945d994485c584c183c148fc2c1373edMarek Olšák
74eb4e399ef0d7b4fbeee744e79abcb79263549f7eMarek Olšákvoid r300_emit_query_start(struct r300_context *r300, unsigned size, void *state);
7516a06fea73b1e6e8857f7568762bfc56dcfe2940Corbin Simpson
7651d1cf55da6f8b8a215814589a189b6e5e537fe5Dave Airlievoid r300_emit_query_end(struct r300_context* r300);
771ddb22675c123fc955ad3ab46bba45d3330d2ec4Nicolai Hähnle
78841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_rs_state(struct r300_context* r300, unsigned size, void* state);
79484858ae48fef039034cf43391883a432ac40c78Corbin Simpson
80841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_rs_block_state(struct r300_context* r300,
81841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                              unsigned size, void* state);
82b7219853af66085d859468e91606ae4ee5bae28eCorbin Simpson
83841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_scissor_state(struct r300_context* r300,
84841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                             unsigned size, void* state);
85b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson
86d2ac3d5e79bdf5a32a2dca135403d963ac6c83e4Marek Olšákvoid r300_emit_textures_state(struct r300_context *r300,
87d2ac3d5e79bdf5a32a2dca135403d963ac6c83e4Marek Olšák                              unsigned size, void *state);
88f3f5e04103d804a23cfbe8bd264c8e0db64bd31fCorbin Simpson
8933e0b726e8837a3456e224d169170ead25ee2fc5Marek Olšákvoid r300_emit_vertex_arrays_swtcl(struct r300_context *r300, boolean indexed);
904816764777485b46f360eb6f86dea243d1809221Corbin Simpson
91fcacc6a076ee5bc894eb7f5a7943715ff1ddf9eeMarek Olšákvoid r300_emit_vap_invariant_state(struct r300_context *r300,
92fcacc6a076ee5bc894eb7f5a7943715ff1ddf9eeMarek Olšák                                   unsigned size, void *state);
93fcacc6a076ee5bc894eb7f5a7943715ff1ddf9eeMarek Olšák
94942762cd973af0df75040de21d3321cd19829e70Marek Olšákvoid r300_emit_vertex_stream_state(struct r300_context* r300,
95841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                                   unsigned size, void* state);
96b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson
973da70606b3af1e907d56666d199957b6da0c73feMarek Olšákvoid r300_emit_vs_constants(struct r300_context* r300,
983da70606b3af1e907d56666d199957b6da0c73feMarek Olšák                            unsigned size, void *state);
99188f8c679254f193cdcfcd4ef338f3c8c5e1146dNicolai Hähnle
100841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_vs_state(struct r300_context* r300, unsigned size, void* state);
101ddd0c94f0440cebc5e63afc1ae0300e0f51bc0a3Corbin Simpson
102841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_viewport_state(struct r300_context* r300,
103841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                              unsigned size, void* state);
104f3f5e04103d804a23cfbe8bd264c8e0db64bd31fCorbin Simpson
105841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšákvoid r300_emit_ztop_state(struct r300_context* r300,
106841122d0e8025290ff2691e13ade1099d2c3351cMarek Olšák                          unsigned size, void* state);
1078a2c961798b4ab1f1095f14d814242422020d4f9Corbin Simpson
108fe6d3b9222ce184daab61ebb390a6af0b9889abfMarek Olšákvoid r300_emit_pvs_flush(struct r300_context* r300, unsigned size, void* state);
109fe6d3b9222ce184daab61ebb390a6af0b9889abfMarek Olšák
110279715e76e5385afaad2834191e8578cf3a5d233Marek Olšákvoid r300_emit_texture_cache_inval(struct r300_context* r300, unsigned size, void* state);
1112431a027c197c7172d6769eb616d4301cc6a0bcaCorbin Simpson
112bb47d1c26fa000735bd06751ba00a98354c921b7Marek Olšákvoid r300_emit_invariant_state(struct r300_context *r300,
113bb47d1c26fa000735bd06751ba00a98354c921b7Marek Olšák                               unsigned size, void *state);
114bb47d1c26fa000735bd06751ba00a98354c921b7Marek Olšák
1156eb2a7fbafd49e75b6cbbee57f23dda63eff73efDave Airlievoid r300_emit_hiz_clear(struct r300_context *r300, unsigned size, void *state);
1166eb2a7fbafd49e75b6cbbee57f23dda63eff73efDave Airlievoid r300_emit_zmask_clear(struct r300_context *r300, unsigned size, void *state);
1176eb2a7fbafd49e75b6cbbee57f23dda63eff73efDave Airlie
118e6632b4bf7cba5fe8a77d54635a3b617fa67185fMarek Olšákunsigned r300_get_num_dirty_dwords(struct r300_context *r300);
1190d699e8ee930c6c7e0f8abff14bf37e7f67807feMarek Olšákunsigned r300_get_num_cs_end_dwords(struct r300_context *r300);
120e6632b4bf7cba5fe8a77d54635a3b617fa67185fMarek Olšák
121b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson/* Emit all dirty state. */
122b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpsonvoid r300_emit_dirty_state(struct r300_context* r300);
123b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson
124c3c5646b93eb20013d2739c7966da7ddad532877Marek Olšákboolean r300_emit_buffer_validate(struct r300_context *r300,
125c3c5646b93eb20013d2739c7966da7ddad532877Marek Olšák                                  boolean do_validate_vertex_buffers,
126c3c5646b93eb20013d2739c7966da7ddad532877Marek Olšák                                  struct pipe_resource *index_buffer);
12776bc66b664c7e135aa9c06cedd94ee1961d68c70Dave Airlie
128b16d4399892dbf8ab2c72a60b46bbc03ee5cd9a6Corbin Simpson#endif /* R300_EMIT_H */
129