aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeonsi/si_state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state.c')
-rw-r--r--src/gallium/drivers/radeonsi/si_state.c127
1 files changed, 62 insertions, 65 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 6410e45a5cd..b4370dad1f8 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -36,6 +36,7 @@
#include "radeonsi_pipe.h"
#include "radeonsi_shader.h"
#include "si_state.h"
+#include "../radeon/r600_cs.h"
#include "sid.h"
static uint32_t cik_num_banks(uint32_t nbanks)
@@ -795,7 +796,7 @@ static void *si_create_db_flush_dsa(struct r600_context *rctx, bool copy_depth,
memset(&dsa, 0, sizeof(dsa));
- state = rctx->context.create_depth_stencil_alpha_state(&rctx->context, &dsa);
+ state = rctx->b.b.create_depth_stencil_alpha_state(&rctx->b.b, &dsa);
if (copy_depth || copy_stencil) {
si_pm4_set_reg(&state->pm4, R_028000_DB_RENDER_CONTROL,
S_028000_DEPTH_COPY(copy_depth) |
@@ -1302,7 +1303,7 @@ static uint32_t si_translate_texformat(struct pipe_screen *screen,
int first_non_void)
{
struct r600_screen *rscreen = (struct r600_screen*)screen;
- bool enable_s3tc = rscreen->info.drm_minor >= 31;
+ bool enable_s3tc = rscreen->b.info.drm_minor >= 31;
boolean uniform = TRUE;
int i;
@@ -1689,7 +1690,7 @@ boolean si_is_format_supported(struct pipe_screen *screen,
return FALSE;
if (sample_count > 1) {
- if (HAVE_LLVM < 0x0304 || rscreen->chip_class != SI)
+ if (HAVE_LLVM < 0x0304 || rscreen->b.chip_class != SI)
return FALSE;
switch (sample_count) {
@@ -1871,7 +1872,7 @@ static void si_cb(struct r600_context *rctx, struct si_pm4_state *pm4,
color_info |= S_028C70_FAST_CLEAR(1);
}
- offset += r600_resource_va(rctx->context.screen, state->cbufs[cb]->texture);
+ offset += r600_resource_va(rctx->b.b.screen, state->cbufs[cb]->texture);
offset >>= 8;
/* FIXME handle enabling of CB beyond BASE8 which has different offset */
@@ -1950,7 +1951,7 @@ static void si_db(struct r600_context *rctx, struct si_pm4_state *pm4,
}
assert(format != V_028040_Z_INVALID);
- s_offs = z_offs = r600_resource_va(rctx->context.screen, surf->base.texture);
+ s_offs = z_offs = r600_resource_va(rctx->b.b.screen, surf->base.texture);
z_offs += rtex->surface.level[level].offset;
s_offs += rtex->surface.stencil_level[level].offset;
@@ -1975,7 +1976,7 @@ static void si_db(struct r600_context *rctx, struct si_pm4_state *pm4,
else
s_info = S_028044_FORMAT(V_028044_STENCIL_INVALID);
- if (rctx->chip_class >= CIK) {
+ if (rctx->b.chip_class >= CIK) {
switch (rtex->surface.level[level].mode) {
case RADEON_SURF_MODE_2D:
array_mode = V_02803C_ARRAY_2D_TILED_THIN1;
@@ -1998,8 +1999,8 @@ static void si_db(struct r600_context *rctx, struct si_pm4_state *pm4,
bankw = cik_bank_wh(bankw);
bankh = cik_bank_wh(bankh);
nbanks = cik_num_banks(rscreen->tiling_info.num_banks);
- pipe_config = cik_db_pipe_config(rscreen->info.r600_num_tile_pipes,
- rscreen->info.r600_num_backends);
+ pipe_config = cik_db_pipe_config(rscreen->b.info.r600_num_tile_pipes,
+ rscreen->b.info.r600_num_backends);
db_depth_info |= S_02803C_ARRAY_MODE(array_mode) |
S_02803C_PIPE_CONFIG(pipe_config) |
@@ -2924,19 +2925,19 @@ static struct si_pm4_state *si_bind_sampler_states(struct r600_context *rctx, un
if (!rctx->border_color_table ||
((rctx->border_color_offset + count - i) &
C_008F3C_BORDER_COLOR_PTR)) {
- si_resource_reference(&rctx->border_color_table, NULL);
+ r600_resource_reference(&rctx->border_color_table, NULL);
rctx->border_color_offset = 0;
rctx->border_color_table =
- si_resource_create_custom(&rctx->screen->screen,
+ r600_resource_create_custom(&rctx->screen->b.b,
PIPE_USAGE_STAGING,
4096 * 4 * 4);
}
if (!border_color_table) {
border_color_table =
- rctx->ws->buffer_map(rctx->border_color_table->cs_buf,
- rctx->cs,
+ rctx->b.ws->buffer_map(rctx->border_color_table->cs_buf,
+ rctx->b.rings.gfx.cs,
PIPE_TRANSFER_WRITE |
PIPE_TRANSFER_UNSYNCHRONIZED);
}
@@ -2958,13 +2959,13 @@ static struct si_pm4_state *si_bind_sampler_states(struct r600_context *rctx, un
if (border_color_table) {
uint64_t va_offset =
- r600_resource_va(&rctx->screen->screen,
+ r600_resource_va(&rctx->screen->b.b,
(void*)rctx->border_color_table);
si_pm4_set_reg(pm4, R_028080_TA_BC_BASE_ADDR, va_offset >> 8);
- if (rctx->chip_class >= CIK)
+ if (rctx->b.chip_class >= CIK)
si_pm4_set_reg(pm4, R_028084_TA_BC_BASE_ADDR_HI, va_offset >> 40);
- rctx->ws->buffer_unmap(rctx->border_color_table->cs_buf);
+ rctx->b.ws->buffer_unmap(rctx->border_color_table->cs_buf);
si_pm4_add_bo(pm4, rctx->border_color_table, RADEON_USAGE_READ);
}
@@ -3043,7 +3044,7 @@ static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint i
if (ptr) {
r600_upload_const_buffer(rctx,
- (struct si_resource**)&cb->buffer, ptr,
+ (struct r600_resource**)&cb->buffer, ptr,
cb->buffer_size, &cb->buffer_offset);
} else {
/* Setup the hw buffer. */
@@ -3184,25 +3185,25 @@ static void *si_create_blend_custom(struct r600_context *rctx, unsigned mode)
memset(&blend, 0, sizeof(blend));
blend.independent_blend_enable = true;
blend.rt[0].colormask = 0xf;
- return si_create_blend_state_mode(&rctx->context, &blend, mode);
+ return si_create_blend_state_mode(&rctx->b.b, &blend, mode);
}
void si_init_state_functions(struct r600_context *rctx)
{
int i;
- rctx->context.create_blend_state = si_create_blend_state;
- rctx->context.bind_blend_state = si_bind_blend_state;
- rctx->context.delete_blend_state = si_delete_blend_state;
- rctx->context.set_blend_color = si_set_blend_color;
+ rctx->b.b.create_blend_state = si_create_blend_state;
+ rctx->b.b.bind_blend_state = si_bind_blend_state;
+ rctx->b.b.delete_blend_state = si_delete_blend_state;
+ rctx->b.b.set_blend_color = si_set_blend_color;
- rctx->context.create_rasterizer_state = si_create_rs_state;
- rctx->context.bind_rasterizer_state = si_bind_rs_state;
- rctx->context.delete_rasterizer_state = si_delete_rs_state;
+ rctx->b.b.create_rasterizer_state = si_create_rs_state;
+ rctx->b.b.bind_rasterizer_state = si_bind_rs_state;
+ rctx->b.b.delete_rasterizer_state = si_delete_rs_state;
- rctx->context.create_depth_stencil_alpha_state = si_create_dsa_state;
- rctx->context.bind_depth_stencil_alpha_state = si_bind_dsa_state;
- rctx->context.delete_depth_stencil_alpha_state = si_delete_dsa_state;
+ rctx->b.b.create_depth_stencil_alpha_state = si_create_dsa_state;
+ rctx->b.b.bind_depth_stencil_alpha_state = si_bind_dsa_state;
+ rctx->b.b.delete_depth_stencil_alpha_state = si_delete_dsa_state;
for (i = 0; i < 8; i++) {
rctx->custom_dsa_flush_depth_stencil[i] = si_create_db_flush_dsa(rctx, true, true, i);
@@ -3213,49 +3214,45 @@ void si_init_state_functions(struct r600_context *rctx)
rctx->custom_blend_resolve = si_create_blend_custom(rctx, V_028808_CB_RESOLVE);
rctx->custom_blend_decompress = si_create_blend_custom(rctx, V_028808_CB_FMASK_DECOMPRESS);
- rctx->context.set_clip_state = si_set_clip_state;
- rctx->context.set_scissor_states = si_set_scissor_states;
- rctx->context.set_viewport_states = si_set_viewport_states;
- rctx->context.set_stencil_ref = si_set_pipe_stencil_ref;
+ rctx->b.b.set_clip_state = si_set_clip_state;
+ rctx->b.b.set_scissor_states = si_set_scissor_states;
+ rctx->b.b.set_viewport_states = si_set_viewport_states;
+ rctx->b.b.set_stencil_ref = si_set_pipe_stencil_ref;
- rctx->context.set_framebuffer_state = si_set_framebuffer_state;
- rctx->context.get_sample_position = si_get_sample_position;
+ rctx->b.b.set_framebuffer_state = si_set_framebuffer_state;
+ rctx->b.b.get_sample_position = si_get_sample_position;
- rctx->context.create_vs_state = si_create_vs_state;
- rctx->context.create_fs_state = si_create_fs_state;
- rctx->context.bind_vs_state = si_bind_vs_shader;
- rctx->context.bind_fs_state = si_bind_ps_shader;
- rctx->context.delete_vs_state = si_delete_vs_shader;
- rctx->context.delete_fs_state = si_delete_ps_shader;
+ rctx->b.b.create_vs_state = si_create_vs_state;
+ rctx->b.b.create_fs_state = si_create_fs_state;
+ rctx->b.b.bind_vs_state = si_bind_vs_shader;
+ rctx->b.b.bind_fs_state = si_bind_ps_shader;
+ rctx->b.b.delete_vs_state = si_delete_vs_shader;
+ rctx->b.b.delete_fs_state = si_delete_ps_shader;
- rctx->context.create_sampler_state = si_create_sampler_state;
- rctx->context.bind_vertex_sampler_states = si_bind_vs_sampler_states;
- rctx->context.bind_fragment_sampler_states = si_bind_ps_sampler_states;
- rctx->context.delete_sampler_state = si_delete_sampler_state;
+ rctx->b.b.create_sampler_state = si_create_sampler_state;
+ rctx->b.b.bind_vertex_sampler_states = si_bind_vs_sampler_states;
+ rctx->b.b.bind_fragment_sampler_states = si_bind_ps_sampler_states;
+ rctx->b.b.delete_sampler_state = si_delete_sampler_state;
- rctx->context.create_sampler_view = si_create_sampler_view;
- rctx->context.set_vertex_sampler_views = si_set_vs_sampler_views;
- rctx->context.set_fragment_sampler_views = si_set_ps_sampler_views;
- rctx->context.sampler_view_destroy = si_sampler_view_destroy;
+ rctx->b.b.create_sampler_view = si_create_sampler_view;
+ rctx->b.b.set_vertex_sampler_views = si_set_vs_sampler_views;
+ rctx->b.b.set_fragment_sampler_views = si_set_ps_sampler_views;
+ rctx->b.b.sampler_view_destroy = si_sampler_view_destroy;
- rctx->context.set_sample_mask = si_set_sample_mask;
+ rctx->b.b.set_sample_mask = si_set_sample_mask;
- rctx->context.set_constant_buffer = si_set_constant_buffer;
+ rctx->b.b.set_constant_buffer = si_set_constant_buffer;
- rctx->context.create_vertex_elements_state = si_create_vertex_elements;
- rctx->context.bind_vertex_elements_state = si_bind_vertex_elements;
- rctx->context.delete_vertex_elements_state = si_delete_vertex_element;
- rctx->context.set_vertex_buffers = si_set_vertex_buffers;
- rctx->context.set_index_buffer = si_set_index_buffer;
+ rctx->b.b.create_vertex_elements_state = si_create_vertex_elements;
+ rctx->b.b.bind_vertex_elements_state = si_bind_vertex_elements;
+ rctx->b.b.delete_vertex_elements_state = si_delete_vertex_element;
+ rctx->b.b.set_vertex_buffers = si_set_vertex_buffers;
+ rctx->b.b.set_index_buffer = si_set_index_buffer;
- rctx->context.create_stream_output_target = si_create_so_target;
- rctx->context.stream_output_target_destroy = si_so_target_destroy;
- rctx->context.set_stream_output_targets = si_set_so_targets;
+ rctx->b.b.texture_barrier = si_texture_barrier;
+ rctx->b.b.set_polygon_stipple = si_set_polygon_stipple;
- rctx->context.texture_barrier = si_texture_barrier;
- rctx->context.set_polygon_stipple = si_set_polygon_stipple;
-
- rctx->context.draw_vbo = si_draw_vbo;
+ rctx->b.b.draw_vbo = si_draw_vbo;
}
void si_init_config(struct r600_context *rctx)
@@ -3292,7 +3289,7 @@ void si_init_config(struct r600_context *rctx)
S_028AA8_PRIMGROUP_SIZE(63));
si_pm4_set_reg(pm4, R_028AB4_VGT_REUSE_OFF, 0x00000000);
si_pm4_set_reg(pm4, R_028AB8_VGT_VTX_CNT_EN, 0x0);
- if (rctx->chip_class < CIK)
+ if (rctx->b.chip_class < CIK)
si_pm4_set_reg(pm4, R_008A14_PA_CL_ENHANCE, S_008A14_NUM_CLIP_SEQ(3) |
S_008A14_CLIP_VTX_REORDER_ENA(1));
@@ -3302,8 +3299,8 @@ void si_init_config(struct r600_context *rctx)
si_pm4_set_reg(pm4, R_02882C_PA_SU_PRIM_FILTER_CNTL, 0);
- if (rctx->chip_class >= CIK) {
- switch (rctx->screen->family) {
+ if (rctx->b.chip_class >= CIK) {
+ switch (rctx->screen->b.family) {
case CHIP_BONAIRE:
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x16000012);
si_pm4_set_reg(pm4, R_028354_PA_SC_RASTER_CONFIG_1, 0x00000000);
@@ -3318,7 +3315,7 @@ void si_init_config(struct r600_context *rctx)
break;
}
} else {
- switch (rctx->screen->family) {
+ switch (rctx->screen->b.family) {
case CHIP_TAHITI:
case CHIP_PITCAIRN:
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x2a00126a);