1a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* 2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Copyright 2010 Jerome Glisse <glisse@freedesktop.org> 3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Permission is hereby granted, free of charge, to any person obtaining a 5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * copy of this software and associated documentation files (the "Software"), 6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * to deal in the Software without restriction, including without limitation 7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * on the rights to use, copy, modify, merge, publish, distribute, sub 8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * license, and/or sell copies of the Software, and to permit persons to whom 9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * the Software is furnished to do so, subject to the following conditions: 10a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * The above copyright notice and this permission notice (including the next 12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * paragraph) shall be included in all copies or substantial portions of the 13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Software. 14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * USE OR OTHER DEALINGS IN THE SOFTWARE. 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Authors: 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * Jerome Glisse 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#ifndef RADEONSI_PIPE_H 27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define RADEONSI_PIPE_H 28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "../../winsys/radeon/drm/radeon_winsys.h" 30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "pipe/p_state.h" 32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "pipe/p_screen.h" 33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "pipe/p_context.h" 34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "util/u_format.h" 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "util/u_math.h" 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "util/u_slab.h" 37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "r600.h" 38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "radeonsi_public.h" 39bf7302a6e1f3aed4518498e90e8261a2b1f6afd7Christian König#include "radeonsi_pm4.h" 40bf7302a6e1f3aed4518498e90e8261a2b1f6afd7Christian König#include "si_state.h" 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "r600_resource.h" 42c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer#include "sid.h" 43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define R600_MAX_CONST_BUFFERS 1 45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define R600_MAX_CONST_BUFFER_SIZE 4096 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#ifdef PIPE_ARCH_BIG_ENDIAN 48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define R600_BIG_ENDIAN 1 49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#else 50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define R600_BIG_ENDIAN 0 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 52a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct r600_pipe_fences { 54fe41287ffa8cb35421cadfb16d4cc27c5fcb8b76Christian König struct si_resource *bo; 55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned *data; 56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned next_index; 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* linked list of preallocated blocks */ 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct list_head blocks; 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* linked list of freed fences */ 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct list_head pool; 61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard pipe_mutex mutex; 62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct r600_screen { 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_screen screen; 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct radeon_winsys *ws; 67a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned family; 68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard enum chip_class chip_class; 69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct radeon_info info; 70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_tiling_info tiling_info; 71a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct util_slab_mempool pool_buffers; 72a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_pipe_fences fences; 73a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 74a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct si_pipe_sampler_view { 76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_sampler_view base; 77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard uint32_t state[8]; 78a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct si_pipe_sampler_state { 81a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard uint32_t val[4]; 82a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 83a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 84a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* needed for blitter save */ 85a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define NUM_TEX_UNITS 16 86a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 87a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct r600_textures_info { 88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct si_pipe_sampler_view *views[NUM_TEX_UNITS]; 89a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct si_pipe_sampler_state *samplers[NUM_TEX_UNITS]; 90a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned n_views; 91a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned n_samplers; 92a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard bool samplers_dirty; 93a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard bool is_array_sampler[NUM_TEX_UNITS]; 94a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 95a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 96a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct r600_fence { 97a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_reference reference; 98a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned index; /* in the shared bo */ 99fe41287ffa8cb35421cadfb16d4cc27c5fcb8b76Christian König struct si_resource *sleep_bo; 100a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct list_head head; 101a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 102a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 103a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define FENCE_BLOCK_SIZE 16 104a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 105a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct r600_fence_block { 106a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_fence fences[FENCE_BLOCK_SIZE]; 107a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct list_head head; 108a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 109a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 110a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define R600_CONSTANT_ARRAY_SIZE 256 111a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define R600_RESOURCE_ARRAY_SIZE 160 112a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 113a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstruct r600_context { 114a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_context context; 115a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct blitter_context *blitter; 116a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard enum radeon_family family; 117a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard enum chip_class chip_class; 118a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard void *custom_dsa_flush; 119a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_screen *screen; 120a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct radeon_winsys *ws; 1213c09f11e5cefd437bb8185539430786dc245c96fChristian König struct si_vertex_element *vertex_elements; 122a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_framebuffer_state framebuffer; 123a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned pa_sc_line_stipple; 124a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned pa_su_sc_mode_cntl; 125a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned pa_cl_clip_cntl; 126a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned pa_cl_vs_out_cntl; 127a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* for saving when using blitter */ 128a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_stencil_ref stencil_ref; 129d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer struct si_pipe_shader_selector *ps_shader; 130d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer struct si_pipe_shader_selector *vs_shader; 131a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_query *current_render_cond; 132a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned current_render_cond_mode; 133a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_query *saved_render_cond; 134a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned saved_render_cond_mode; 135a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* shader information */ 136a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned sprite_coord_enable; 137f402acdbe244e5de9b2b616e0a908f5d1416ce89Michel Dänzer unsigned export_16bpc; 138f402acdbe244e5de9b2b616e0a908f5d1416ce89Michel Dänzer unsigned spi_shader_col_format; 139a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned alpha_ref; 140a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard boolean alpha_ref_dirty; 141a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_textures_info vs_samplers; 142a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_textures_info ps_samplers; 143a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard boolean shader_dirty; 144a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1452a311b18fce9ea6538b0997ad23d86a061fb273cMarek Olšák struct u_upload_mgr *uploader; 146a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct util_slab_mempool pool_transfers; 147a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard boolean have_depth_texture, have_depth_fb; 148a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 149a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned default_ps_gprs, default_vs_gprs; 150a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 151a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* Below are variables from the old r600_context. 152a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 153a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct radeon_winsys_cs *cs; 154a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 155a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned pm4_dirty_cdwords; 156a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 157a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* The list of active queries. Only one query of each type can be active. */ 158a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct list_head active_query_list; 159a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned num_cs_dw_queries_suspend; 160a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned num_cs_dw_streamout_end; 161a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 162a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned backend_mask; 163a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned max_db; /* for OQ */ 164a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned flags; 165a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard boolean predicate_drawing; 166a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 167a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned num_so_targets; 168a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_so_target *so_targets[PIPE_MAX_SO_BUFFERS]; 169a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard boolean streamout_start; 170a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned streamout_append_bitmask; 171a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned *vs_so_stride_in_dw; 172a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned *vs_shader_so_strides; 1732a311b18fce9ea6538b0997ad23d86a061fb273cMarek Olšák 1742a311b18fce9ea6538b0997ad23d86a061fb273cMarek Olšák /* Vertex and index buffers. */ 1752a311b18fce9ea6538b0997ad23d86a061fb273cMarek Olšák bool vertex_buffers_dirty; 1762a311b18fce9ea6538b0997ad23d86a061fb273cMarek Olšák struct pipe_index_buffer index_buffer; 1772a311b18fce9ea6538b0997ad23d86a061fb273cMarek Olšák struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS]; 1782a311b18fce9ea6538b0997ad23d86a061fb273cMarek Olšák unsigned nr_vertex_buffers; 179bf7302a6e1f3aed4518498e90e8261a2b1f6afd7Christian König 18082cd9c0fc2838a153006a646b0d356ed54b8680eMichel Dänzer /* With rasterizer discard, there doesn't have to be a pixel shader. 18182cd9c0fc2838a153006a646b0d356ed54b8680eMichel Dänzer * In that case, we bind this one: */ 18282cd9c0fc2838a153006a646b0d356ed54b8680eMichel Dänzer struct si_pipe_shader *dummy_pixel_shader; 18382cd9c0fc2838a153006a646b0d356ed54b8680eMichel Dänzer 184bf7302a6e1f3aed4518498e90e8261a2b1f6afd7Christian König /* SI state handling */ 185bf7302a6e1f3aed4518498e90e8261a2b1f6afd7Christian König union si_state queued; 186bf7302a6e1f3aed4518498e90e8261a2b1f6afd7Christian König union si_state emitted; 187a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 188a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 189a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* r600_blit.c */ 1901b11395a36a44a902cfb3e1783758544662df73fMichel Dänzervoid si_init_blit_functions(struct r600_context *rctx); 1911b11395a36a44a902cfb3e1783758544662df73fMichel Dänzervoid si_blit_uncompress_depth(struct pipe_context *ctx, struct r600_resource_texture *texture); 192a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardvoid r600_blit_push_depth(struct pipe_context *ctx, struct r600_resource_texture *texture); 1931b11395a36a44a902cfb3e1783758544662df73fMichel Dänzervoid si_flush_depth_textures(struct r600_context *rctx); 194a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 195a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* r600_buffer.c */ 1961b11395a36a44a902cfb3e1783758544662df73fMichel Dänzerbool si_init_resource(struct r600_screen *rscreen, 1971b11395a36a44a902cfb3e1783758544662df73fMichel Dänzer struct si_resource *res, 1981b11395a36a44a902cfb3e1783758544662df73fMichel Dänzer unsigned size, unsigned alignment, 1991b11395a36a44a902cfb3e1783758544662df73fMichel Dänzer unsigned bind, unsigned usage); 2001b11395a36a44a902cfb3e1783758544662df73fMichel Dänzerstruct pipe_resource *si_buffer_create(struct pipe_screen *screen, 2011b11395a36a44a902cfb3e1783758544662df73fMichel Dänzer const struct pipe_resource *templ); 202a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardvoid r600_upload_index_buffer(struct r600_context *rctx, 203a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_index_buffer *ib, unsigned count); 204a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 205a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 206a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* r600_pipe.c */ 207a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardvoid radeonsi_flush(struct pipe_context *ctx, struct pipe_fence_handle **fence, 208a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned flags); 209a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 210a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* r600_query.c */ 211a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardvoid r600_init_query_functions(struct r600_context *rctx); 212a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 213a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* r600_resource.c */ 214a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardvoid r600_init_context_resource_functions(struct r600_context *r600); 215a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 216a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* r600_texture.c */ 217a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardvoid r600_init_screen_texture_functions(struct pipe_screen *screen); 2181b11395a36a44a902cfb3e1783758544662df73fMichel Dänzervoid si_init_surface_functions(struct r600_context *r600); 219a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 220a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* r600_translate.c */ 221a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardvoid r600_translate_index_buffer(struct r600_context *r600, 222a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct pipe_index_buffer *ib, 223a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned count); 224a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 225a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* 226a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard * common helpers 227a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard */ 228a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic INLINE uint32_t S_FIXED(float value, uint32_t frac_bits) 229a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 230a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return value * (1 << frac_bits); 231a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 232a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define ALIGN_DIVUP(x, y) (((x) + (y) - 1) / (y)) 233a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 234c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzerstatic INLINE unsigned si_map_swizzle(unsigned swizzle) 235c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer{ 236c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer switch (swizzle) { 237c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer case UTIL_FORMAT_SWIZZLE_Y: 238c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer return V_008F0C_SQ_SEL_Y; 239c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer case UTIL_FORMAT_SWIZZLE_Z: 240c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer return V_008F0C_SQ_SEL_Z; 241c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer case UTIL_FORMAT_SWIZZLE_W: 242c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer return V_008F0C_SQ_SEL_W; 243c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer case UTIL_FORMAT_SWIZZLE_0: 244c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer return V_008F0C_SQ_SEL_0; 245c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer case UTIL_FORMAT_SWIZZLE_1: 246c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer return V_008F0C_SQ_SEL_1; 247c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer default: /* UTIL_FORMAT_SWIZZLE_X */ 248c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer return V_008F0C_SQ_SEL_X; 249c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer } 250c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer} 251c2f1fbf912c0b95e09cb64db10dfbe8abff9f5d6Michel Dänzer 252a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic inline unsigned r600_tex_aniso_filter(unsigned filter) 253a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 254a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (filter <= 1) return 0; 255a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (filter <= 2) return 1; 256a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (filter <= 4) return 2; 257a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (filter <= 8) return 3; 258a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard /* else */ return 4; 259a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 260a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 261a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* 12.4 fixed-point */ 262a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic INLINE unsigned r600_pack_float_12p4(float x) 263a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 264a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return x <= 0 ? 0 : 265a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard x >= 4096 ? 0xffff : x * 16; 266a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 267a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 268a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic INLINE uint64_t r600_resource_va(struct pipe_screen *screen, struct pipe_resource *resource) 269a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 270a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard struct r600_screen *rscreen = (struct r600_screen*)screen; 271fe41287ffa8cb35421cadfb16d4cc27c5fcb8b76Christian König struct si_resource *rresource = (struct si_resource*)resource; 272a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 273a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return rscreen->ws->buffer_get_virtual_address(rresource->cs_buf); 274a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 275a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 276a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 277