16a829a1b724ca0d960decee217d260b4de8a5463Adam Rak/*
26a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * Permission is hereby granted, free of charge, to any person obtaining a
36a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * copy of this software and associated documentation files (the "Software"),
46a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * to deal in the Software without restriction, including without limitation
56a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * on the rights to use, copy, modify, merge, publish, distribute, sub
66a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * license, and/or sell copies of the Software, and to permit persons to whom
76a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * the Software is furnished to do so, subject to the following conditions:
86a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *
96a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * The above copyright notice and this permission notice (including the next
106a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * paragraph) shall be included in all copies or substantial portions of the
116a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * Software.
126a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *
136a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
146a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
156a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
166a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
176a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
186a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
196a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * USE OR OTHER DEALINGS IN THE SOFTWARE.
206a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *
216a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * Authors:
226a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *      Adam Rak <adam.rak@streamnovation.com>
236a829a1b724ca0d960decee217d260b4de8a5463Adam Rak */
246a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
256a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#ifndef EVERGREEN_COMPUTE_INTERNAL_H
266a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define EVERGREEN_COMPUTE_INTERNAL_H
276a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
286a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#include "compute_memory_pool.h"
296a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
306a829a1b724ca0d960decee217d260b4de8a5463Adam Rakenum evergreen_compute_resources
316a829a1b724ca0d960decee217d260b4de8a5463Adam Rak{
326a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define DECL_COMPUTE_RESOURCE(name, n) COMPUTE_RESOURCE_ ## name ,
336a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#include "compute_resource.def"
346a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#undef DECL_COMPUTE_RESOURCE
356a829a1b724ca0d960decee217d260b4de8a5463Adam Rak__COMPUTE_RESOURCE_END__
366a829a1b724ca0d960decee217d260b4de8a5463Adam Rak};
376a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
386a829a1b724ca0d960decee217d260b4de8a5463Adam Raktypedef unsigned u32;
396a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
406a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define COMPUTE_RES_TC_FLUSH      0xF0001
416a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define COMPUTE_RES_VC_FLUSH      0xF0002
426a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define COMPUTE_RES_SH_FLUSH      0xF0004
436a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define COMPUTE_RES_CB_FLUSH(x)  (0xF0008 | x << 8)
446a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define COMPUTE_RES_FULL_FLUSH    0xF0010
456a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
466a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct evergreen_compute_resource {
476a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	int enabled;
486a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
496a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	int do_reloc[256];
506a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	u32 cs[256];
516a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	int cs_end;
526a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
536a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct r600_resource *bo;
546a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	int coher_bo_size;
556a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	enum radeon_bo_usage usage;
566a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	int flags; ///flags for COMPUTE_RES_*_FLUSH
576a829a1b724ca0d960decee217d260b4de8a5463Adam Rak};
586a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
596a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct compute_sampler_state {
606a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct r600_pipe_state base;
616a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct pipe_sampler_state state;
626a829a1b724ca0d960decee217d260b4de8a5463Adam Rak};
636a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
646a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct number_type_and_format {
656a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	unsigned format;
666a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	unsigned number_type;
676a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	unsigned num_format_all;
686a829a1b724ca0d960decee217d260b4de8a5463Adam Rak};
696a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
706a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct r600_pipe_compute {
716a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct r600_context *ctx;
726a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct r600_bytecode bc;
736a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct tgsi_token *tokens;
746a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
756a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct evergreen_compute_resource *resources;
766a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
776a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	unsigned local_size;
786a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	unsigned private_size;
796a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	unsigned input_size;
806a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#ifdef HAVE_OPENCL
816a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	LLVMModuleRef mod;
826a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#endif
836a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct r600_resource *kernel_param;
846a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	struct r600_resource *shader_code_bo;
856a829a1b724ca0d960decee217d260b4de8a5463Adam Rak};
866a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
876a829a1b724ca0d960decee217d260b4de8a5463Adam Rakint evergreen_compute_get_gpu_format(struct number_type_and_format* fmt, struct r600_resource *bo); ///get hw format from resource, return 0 on faliure, nonzero on success
886a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
896a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
906a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_emit_raw_reg_set(struct evergreen_compute_resource* res, unsigned index, int num);
916a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_emit_ctx_reg_set(struct r600_context *ctx, unsigned index, int num);
926a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_emit_raw_value(struct evergreen_compute_resource* res, unsigned value);
936a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_emit_ctx_value(struct r600_context *ctx, unsigned value);
946a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_mult_reg_set_(struct evergreen_compute_resource* res,  int index, u32* array, int size);
956a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_emit_ctx_reloc(struct r600_context *ctx, struct r600_resource *bo, enum radeon_bo_usage usage);
966a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_reg_set(struct evergreen_compute_resource* res, unsigned index, unsigned value);
976a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_emit_force_reloc(struct evergreen_compute_resource* res);
986a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
996a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct evergreen_compute_resource* get_empty_res(struct r600_pipe_compute*, enum evergreen_compute_resources res_code, int index);
1006a829a1b724ca0d960decee217d260b4de8a5463Adam Rakint get_compute_resource_num(void);
1016a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
1026a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define evergreen_mult_reg_set(res, index, array) evergreen_mult_reg_set_(res, index, array, sizeof(array))
1036a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
1046a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_rat(struct r600_pipe_compute *pipe, int id, struct r600_resource* bo, int start, int size);
1056a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_gds(struct r600_pipe_compute *pipe, uint32_t addr, uint32_t size);
1066a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_export(struct r600_pipe_compute *pipe, struct r600_resource* bo, int offset, int size);
1076a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_loop_const(struct r600_pipe_compute *pipe, int id, int count, int init, int inc);
1086a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_tmp_ring(struct r600_pipe_compute *pipe, struct r600_resource* bo, int offset, int size, int se);
1096a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_tex_resource(struct r600_pipe_compute *pipe, struct r600_pipe_sampler_view* view, int id);
1106a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_sampler_resource(struct r600_pipe_compute *pipe, struct compute_sampler_state *sampler, int id);
1116a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_set_const_cache(struct r600_pipe_compute *pipe, int cache_id, struct r600_resource* cbo, int size, int offset);
1126a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
1136a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct r600_resource* r600_compute_buffer_alloc_vram(struct r600_screen *screen, unsigned size);
1146a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
1156a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#endif
116