16a829a1b724ca0d960decee217d260b4de8a5463Adam Rak/*
26a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * Copyright 2011 Adam Rak <adam.rak@streamnovation.com>
36a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *
46a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * Permission is hereby granted, free of charge, to any person obtaining a
56a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * copy of this software and associated documentation files (the "Software"),
66a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * to deal in the Software without restriction, including without limitation
76a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * on the rights to use, copy, modify, merge, publish, distribute, sub
86a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * license, and/or sell copies of the Software, and to permit persons to whom
96a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * the Software is furnished to do so, subject to the following conditions:
106a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *
116a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * The above copyright notice and this permission notice (including the next
126a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * paragraph) shall be included in all copies or substantial portions of the
136a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * Software.
146a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *
156a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
166a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
176a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
186a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
196a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
206a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
216a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * USE OR OTHER DEALINGS IN THE SOFTWARE.
226a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *
236a829a1b724ca0d960decee217d260b4de8a5463Adam Rak * Authors:
246a829a1b724ca0d960decee217d260b4de8a5463Adam Rak *      Adam Rak <adam.rak@streamnovation.com>
256a829a1b724ca0d960decee217d260b4de8a5463Adam Rak */
266a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
276a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#ifndef EVERGREEN_COMPUTE_H
286a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#define EVERGREEN_COMPUTE_H
296a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#include "r600.h"
306a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#include "r600_pipe.h"
316a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
32d3b013049126fb44d65a0a67001b04acbe778613Tom Stellardstruct r600_atom;
336a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct evergreen_compute_resource;
346a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
356a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid *evergreen_create_compute_state(struct pipe_context *ctx, const const struct pipe_compute_state *cso);
366a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_delete_compute_state(struct pipe_context *ctx, void *state);
376a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_compute_upload_input(struct pipe_context *context, const uint *block_layout, const uint *grid_layout, const void *input);
385016fe2d47a08ce2cd7c597e67862086e7d63b64Tom Stellardvoid evergreen_init_atom_start_compute_cs(struct r600_context *rctx);
396a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid evergreen_init_compute_state_functions(struct r600_context *rctx);
40d3b013049126fb44d65a0a67001b04acbe778613Tom Stellardvoid evergreen_emit_cs_shader(struct r600_context *rctx, struct r600_atom * atom);
416a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
426a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct pipe_resource *r600_compute_global_buffer_create(struct pipe_screen *screen, const struct pipe_resource *templ);
436a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid r600_compute_global_buffer_destroy(struct pipe_screen *screen, struct pipe_resource *res);
446a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid* r600_compute_global_transfer_map(struct pipe_context *ctx, struct pipe_transfer* transfer);
456a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid r600_compute_global_transfer_unmap(struct pipe_context *ctx, struct pipe_transfer* transfer);
466a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstruct pipe_transfer * r600_compute_global_get_transfer(struct pipe_context *, struct pipe_resource *, unsigned level,
476a829a1b724ca0d960decee217d260b4de8a5463Adam Rak                                                        unsigned usage, const struct pipe_box *);
486a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid r600_compute_global_transfer_destroy(struct pipe_context *, struct pipe_transfer *);
496a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid r600_compute_global_transfer_flush_region( struct pipe_context *, struct pipe_transfer *, const struct pipe_box *);
506a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid r600_compute_global_transfer_inline_write( struct pipe_context *, struct pipe_resource *, unsigned level,
516a829a1b724ca0d960decee217d260b4de8a5463Adam Rak                                                unsigned usage, const struct pipe_box *, const void *data, unsigned stride, unsigned layer_stride);
526a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
536a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
546a829a1b724ca0d960decee217d260b4de8a5463Adam Rakstatic inline void COMPUTE_DBG(const char *fmt, ...)
556a829a1b724ca0d960decee217d260b4de8a5463Adam Rak{
566a829a1b724ca0d960decee217d260b4de8a5463Adam Rak   static bool check_debug = false, debug = false;
576a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
586a829a1b724ca0d960decee217d260b4de8a5463Adam Rak   if (!check_debug) {
596a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		debug = debug_get_bool_option("R600_COMPUTE_DEBUG", FALSE);
606a829a1b724ca0d960decee217d260b4de8a5463Adam Rak   }
616a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
626a829a1b724ca0d960decee217d260b4de8a5463Adam Rak   if (debug) {
636a829a1b724ca0d960decee217d260b4de8a5463Adam Rak      va_list ap;
646a829a1b724ca0d960decee217d260b4de8a5463Adam Rak      va_start(ap, fmt);
656a829a1b724ca0d960decee217d260b4de8a5463Adam Rak      _debug_vprintf(fmt, ap);
666a829a1b724ca0d960decee217d260b4de8a5463Adam Rak      va_end(ap);
676a829a1b724ca0d960decee217d260b4de8a5463Adam Rak   }
686a829a1b724ca0d960decee217d260b4de8a5463Adam Rak}
696a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
706a829a1b724ca0d960decee217d260b4de8a5463Adam Rak#endif
71