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