X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgallium%2Fdrivers%2Fradeonsi%2Fsi_pipe.h;h=4709454c9ddd8f86dc14585da4293b9aba5f4a35;hb=40b9812a761ce0745d9e17b92fd0abd27eb86bd7;hp=fc75854a83d478dab2c75d43d7edd8b5bf2b6487;hpb=9f5c037ab9e5dd8d5e10ccb6962de52927e677bd;p=mesa.git diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index fc75854a83d..4709454c9dd 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -26,18 +26,6 @@ #ifndef SI_PIPE_H #define SI_PIPE_H -#include "../radeon/r600_pipe_common.h" - -#include "pipe/p_screen.h" -#include "pipe/p_context.h" -#include "util/u_format.h" -#include "util/u_math.h" -#include "util/u_slab.h" -#include "si.h" -#include "sid.h" -#include "si_public.h" -#include "si_pm4.h" -#include "si_resource.h" #include "si_state.h" #ifdef PIPE_ARCH_BIG_ENDIAN @@ -83,7 +71,10 @@ struct si_textures_info { }; #define SI_NUM_ATOMS(sctx) (sizeof((sctx)->atoms)/sizeof((sctx)->atoms.array[0])) -#define SI_NUM_SHADERS (PIPE_SHADER_FRAGMENT+1) + +#define SI_NUM_SHADERS (PIPE_SHADER_GEOMETRY+1) + +#define SI_RW_SO 2 /* Streamout buffer descriptors after ring buffers */ struct si_context { struct r600_common_context b; @@ -100,8 +91,8 @@ struct si_context { struct { /* The order matters. */ struct r600_atom *const_buffers[SI_NUM_SHADERS]; + struct r600_atom *rw_buffers[SI_NUM_SHADERS]; struct r600_atom *sampler_views[SI_NUM_SHADERS]; - struct r600_atom *streamout_buffers; /* Caches must be flushed after resource descriptors are * updated in memory. */ struct r600_atom *cache_flush; @@ -120,13 +111,14 @@ struct si_context { /* for saving when using blitter */ struct pipe_stencil_ref stencil_ref; struct si_pipe_shader_selector *ps_shader; + struct si_pipe_shader_selector *gs_shader; struct si_pipe_shader_selector *vs_shader; struct si_cs_shader_state cs_shader_state; /* shader information */ unsigned sprite_coord_enable; unsigned export_16bpc; struct si_buffer_resources const_buffers[SI_NUM_SHADERS]; - struct si_buffer_resources streamout_buffers; + struct si_buffer_resources rw_buffers[SI_NUM_SHADERS]; struct si_textures_info samplers[SI_NUM_SHADERS]; struct r600_resource *border_color_table; unsigned border_color_offset; @@ -146,8 +138,13 @@ struct si_context { /* With rasterizer discard, there doesn't have to be a pixel shader. * In that case, we bind this one: */ void *dummy_pixel_shader; + struct si_pm4_state *gs_on; + struct si_pm4_state *gs_off; + struct si_pm4_state *gs_rings; struct r600_atom cache_flush; struct pipe_constant_buffer null_const_buf; /* used for set_constant_buffer(NULL) on CIK */ + struct pipe_constant_buffer esgs_ring; + struct pipe_constant_buffer gsvs_ring; /* SI state handling */ union si_state queued; @@ -161,6 +158,11 @@ void si_flush_depth_textures(struct si_context *sctx, void si_decompress_color_textures(struct si_context *sctx, struct si_textures_info *textures); +/* si_hw_context.c */ +void si_context_flush(struct si_context *ctx, unsigned flags); +void si_begin_new_cs(struct si_context *ctx); +void si_need_cs_space(struct si_context *ctx, unsigned num_dw, boolean count_draw_in); + /* si_pipe.c */ void si_flush(struct pipe_context *ctx, struct pipe_fence_handle **fence, unsigned flags); @@ -182,44 +184,14 @@ struct pipe_video_buffer *si_video_buffer_create(struct pipe_context *pipe, /* * common helpers */ -static INLINE uint32_t S_FIXED(float value, uint32_t frac_bits) -{ - return value * (1 << frac_bits); -} -#define ALIGN_DIVUP(x, y) (((x) + (y) - 1) / (y)) - -static INLINE unsigned si_map_swizzle(unsigned swizzle) -{ - switch (swizzle) { - case UTIL_FORMAT_SWIZZLE_Y: - return V_008F0C_SQ_SEL_Y; - case UTIL_FORMAT_SWIZZLE_Z: - return V_008F0C_SQ_SEL_Z; - case UTIL_FORMAT_SWIZZLE_W: - return V_008F0C_SQ_SEL_W; - case UTIL_FORMAT_SWIZZLE_0: - return V_008F0C_SQ_SEL_0; - case UTIL_FORMAT_SWIZZLE_1: - return V_008F0C_SQ_SEL_1; - default: /* UTIL_FORMAT_SWIZZLE_X */ - return V_008F0C_SQ_SEL_X; - } -} - -static inline unsigned si_tex_aniso_filter(unsigned filter) -{ - if (filter <= 1) return 0; - if (filter <= 2) return 1; - if (filter <= 4) return 2; - if (filter <= 8) return 3; - /* else */ return 4; -} -/* 12.4 fixed-point */ -static INLINE unsigned si_pack_float_12p4(float x) +static INLINE struct r600_resource * +si_resource_create_custom(struct pipe_screen *screen, + unsigned usage, unsigned size) { - return x <= 0 ? 0 : - x >= 4096 ? 0xffff : x * 16; + assert(size); + return r600_resource(pipe_buffer_create(screen, + PIPE_BIND_CUSTOM, usage, size)); } #endif