X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Filo%2Filo_gpe_gen7.c;h=6d3397f2d62df5b52f8c428b81a63fccf254ef2b;hb=d2a3de19c6aa5881228734c73df706483a4aecf9;hp=5dd427374f9269d0ccecffbfc837ac967059180b;hpb=6c6bd796adda4173ebaf494d6cd2a96d511f1ea3;p=mesa.git diff --git a/src/gallium/drivers/ilo/ilo_gpe_gen7.c b/src/gallium/drivers/ilo/ilo_gpe_gen7.c index 5dd427374f9..6d3397f2d62 100644 --- a/src/gallium/drivers/ilo/ilo_gpe_gen7.c +++ b/src/gallium/drivers/ilo/ilo_gpe_gen7.c @@ -33,6 +33,8 @@ #include "ilo_shader.h" #include "ilo_gpe_gen7.h" +#define SET_FIELD(value, field) (((value) << field ## __SHIFT) & field ## __MASK) + void ilo_gpe_init_gs_cso_gen7(const struct ilo_dev_info *dev, const struct ilo_shader_state *gs, @@ -63,14 +65,14 @@ ilo_gpe_init_gs_cso_gen7(const struct ilo_dev_info *dev, dw2 = (true) ? 0 : GEN6_THREADDISP_FP_MODE_ALT; - dw4 = vue_read_len << GEN6_GS_DW4_URB_READ_LEN__SHIFT | + dw4 = vue_read_len << GEN7_GS_DW4_URB_READ_LEN__SHIFT | GEN7_GS_DW4_INCLUDE_VERTEX_HANDLES | - 0 << GEN6_GS_DW4_URB_READ_OFFSET__SHIFT | - start_grf << GEN6_GS_DW4_URB_GRF_START__SHIFT; + 0 << GEN7_GS_DW4_URB_READ_OFFSET__SHIFT | + start_grf << GEN7_GS_DW4_URB_GRF_START__SHIFT; - dw5 = (max_threads - 1) << GEN6_GS_DW5_MAX_THREADS__SHIFT | - GEN6_GS_DW5_STATISTICS | - GEN6_GS_DW6_GS_ENABLE; + dw5 = (max_threads - 1) << GEN7_GS_DW5_MAX_THREADS__SHIFT | + GEN7_GS_DW5_STATISTICS | + GEN7_GS_DW5_GS_ENABLE; STATIC_ASSERT(Elements(cso->payload) >= 3); cso->payload[0] = dw2; @@ -275,16 +277,16 @@ ilo_gpe_init_view_surface_null_gen7(const struct ilo_dev_info *dev, STATIC_ASSERT(Elements(surf->payload) >= 8); dw = surf->payload; - dw[0] = GEN6_SURFTYPE_NULL << GEN6_SURFACE_DW0_TYPE__SHIFT | - GEN6_FORMAT_B8G8R8A8_UNORM << GEN6_SURFACE_DW0_FORMAT__SHIFT | + dw[0] = GEN6_SURFTYPE_NULL << GEN7_SURFACE_DW0_TYPE__SHIFT | + GEN6_FORMAT_B8G8R8A8_UNORM << GEN7_SURFACE_DW0_FORMAT__SHIFT | GEN6_TILING_X << 13; dw[1] = 0; - dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_HEIGHT) | - SET_FIELD(width - 1, GEN7_SURFACE_WIDTH); + dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_DW2_HEIGHT) | + SET_FIELD(width - 1, GEN7_SURFACE_DW2_WIDTH); - dw[3] = SET_FIELD(depth - 1, BRW_SURFACE_DEPTH); + dw[3] = SET_FIELD(depth - 1, GEN7_SURFACE_DW3_DEPTH); dw[4] = 0; dw[5] = level; @@ -314,7 +316,7 @@ ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev, ILO_GPE_VALID_GEN(dev, 7, 7.5); - surface_type = (structured) ? 5 : GEN6_SURFTYPE_BUFFER; + surface_type = (structured) ? GEN7_SURFTYPE_STRBUF : GEN6_SURFTYPE_BUFFER; surface_format = (typed) ? ilo_translate_color_format(elem_format) : GEN6_FORMAT_RAW; @@ -390,17 +392,17 @@ ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev, STATIC_ASSERT(Elements(surf->payload) >= 8); dw = surf->payload; - dw[0] = surface_type << GEN6_SURFACE_DW0_TYPE__SHIFT | - surface_format << GEN6_SURFACE_DW0_FORMAT__SHIFT; + dw[0] = surface_type << GEN7_SURFACE_DW0_TYPE__SHIFT | + surface_format << GEN7_SURFACE_DW0_FORMAT__SHIFT; if (render_cache_rw) - dw[0] |= GEN6_SURFACE_DW0_RENDER_CACHE_RW; + dw[0] |= GEN7_SURFACE_DW0_RENDER_CACHE_RW; dw[1] = offset; - dw[2] = SET_FIELD(height, GEN7_SURFACE_HEIGHT) | - SET_FIELD(width, GEN7_SURFACE_WIDTH); + dw[2] = SET_FIELD(height, GEN7_SURFACE_DW2_HEIGHT) | + SET_FIELD(width, GEN7_SURFACE_DW2_WIDTH); - dw[3] = SET_FIELD(depth, BRW_SURFACE_DEPTH) | + dw[3] = SET_FIELD(depth, GEN7_SURFACE_DW3_DEPTH) | pitch; dw[4] = 0; @@ -410,10 +412,10 @@ ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev, dw[7] = 0; if (dev->gen >= ILO_GEN(7.5)) { - dw[7] |= SET_FIELD(GEN75_SCS_RED, GEN7_SURFACE_SCS_R) | - SET_FIELD(GEN75_SCS_GREEN, GEN7_SURFACE_SCS_G) | - SET_FIELD(GEN75_SCS_BLUE, GEN7_SURFACE_SCS_B) | - SET_FIELD(GEN75_SCS_ALPHA, GEN7_SURFACE_SCS_A); + dw[7] |= SET_FIELD(GEN75_SCS_RED, GEN75_SURFACE_DW7_SCS_R) | + SET_FIELD(GEN75_SCS_GREEN, GEN75_SURFACE_DW7_SCS_G) | + SET_FIELD(GEN75_SCS_BLUE, GEN75_SURFACE_DW7_SCS_B) | + SET_FIELD(GEN75_SCS_ALPHA, GEN75_SURFACE_DW7_SCS_A); } /* do not increment reference count */ @@ -580,8 +582,8 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev, STATIC_ASSERT(Elements(surf->payload) >= 8); dw = surf->payload; - dw[0] = surface_type << GEN6_SURFACE_DW0_TYPE__SHIFT | - surface_format << GEN6_SURFACE_DW0_FORMAT__SHIFT | + dw[0] = surface_type << GEN7_SURFACE_DW0_TYPE__SHIFT | + surface_format << GEN7_SURFACE_DW0_FORMAT__SHIFT | ilo_gpe_gen6_translate_winsys_tiling(tex->tiling) << 13; /* @@ -614,17 +616,17 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev, dw[0] |= GEN7_SURFACE_DW0_ARYSPC_LOD0; if (is_rt) - dw[0] |= GEN6_SURFACE_DW0_RENDER_CACHE_RW; + dw[0] |= GEN7_SURFACE_DW0_RENDER_CACHE_RW; if (surface_type == GEN6_SURFTYPE_CUBE && !is_rt) - dw[0] |= GEN6_SURFACE_DW0_CUBE_FACE_ENABLES__MASK; + dw[0] |= GEN7_SURFACE_DW0_CUBE_FACE_ENABLES__MASK; dw[1] = layer_offset; - dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_HEIGHT) | - SET_FIELD(width - 1, GEN7_SURFACE_WIDTH); + dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_DW2_HEIGHT) | + SET_FIELD(width - 1, GEN7_SURFACE_DW2_WIDTH); - dw[3] = SET_FIELD(depth - 1, BRW_SURFACE_DEPTH) | + dw[3] = SET_FIELD(depth - 1, GEN7_SURFACE_DW3_DEPTH) | (pitch - 1); dw[4] = first_layer << 18 | @@ -650,164 +652,21 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev, else dw[4] |= GEN7_SURFACE_DW4_MULTISAMPLECOUNT_1; - dw[5] = x_offset << GEN6_SURFACE_DW5_X_OFFSET__SHIFT | - y_offset << GEN6_SURFACE_DW5_Y_OFFSET__SHIFT | - SET_FIELD(first_level, GEN7_SURFACE_MIN_LOD) | + dw[5] = x_offset << GEN7_SURFACE_DW5_X_OFFSET__SHIFT | + y_offset << GEN7_SURFACE_DW5_Y_OFFSET__SHIFT | + SET_FIELD(first_level, GEN7_SURFACE_DW5_MIN_LOD) | lod; dw[6] = 0; dw[7] = 0; if (dev->gen >= ILO_GEN(7.5)) { - dw[7] |= SET_FIELD(GEN75_SCS_RED, GEN7_SURFACE_SCS_R) | - SET_FIELD(GEN75_SCS_GREEN, GEN7_SURFACE_SCS_G) | - SET_FIELD(GEN75_SCS_BLUE, GEN7_SURFACE_SCS_B) | - SET_FIELD(GEN75_SCS_ALPHA, GEN7_SURFACE_SCS_A); + dw[7] |= SET_FIELD(GEN75_SCS_RED, GEN75_SURFACE_DW7_SCS_R) | + SET_FIELD(GEN75_SCS_GREEN, GEN75_SURFACE_DW7_SCS_G) | + SET_FIELD(GEN75_SCS_BLUE, GEN75_SURFACE_DW7_SCS_B) | + SET_FIELD(GEN75_SCS_ALPHA, GEN75_SURFACE_DW7_SCS_A); } /* do not increment reference count */ surf->bo = tex->bo; } - -int -ilo_gpe_gen7_estimate_command_size(const struct ilo_dev_info *dev, - enum ilo_gpe_gen7_command cmd, - int arg) -{ - static const struct { - int header; - int body; - } gen7_command_size_table[ILO_GPE_GEN7_COMMAND_COUNT] = { - [ILO_GPE_GEN7_MI_STORE_DATA_IMM] = { 0, 5 }, - [ILO_GPE_GEN7_MI_LOAD_REGISTER_IMM] = { 0, 3 }, - [ILO_GPE_GEN7_MI_STORE_REGISTER_MEM] = { 0, 3 }, - [ILO_GPE_GEN7_MI_REPORT_PERF_COUNT] = { 0, 3 }, - [ILO_GPE_GEN7_STATE_BASE_ADDRESS] = { 0, 10 }, - [ILO_GPE_GEN7_STATE_SIP] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_VF_STATISTICS] = { 0, 1 }, - [ILO_GPE_GEN7_PIPELINE_SELECT] = { 0, 1 }, - [ILO_GPE_GEN7_MEDIA_VFE_STATE] = { 0, 8 }, - [ILO_GPE_GEN7_MEDIA_CURBE_LOAD] = { 0, 4 }, - [ILO_GPE_GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD] = { 0, 4 }, - [ILO_GPE_GEN7_MEDIA_STATE_FLUSH] = { 0, 2 }, - [ILO_GPE_GEN7_GPGPU_WALKER] = { 0, 11 }, - [ILO_GPE_GEN7_3DSTATE_CLEAR_PARAMS] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_DEPTH_BUFFER] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_STENCIL_BUFFER] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_HIER_DEPTH_BUFFER] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_VERTEX_BUFFERS] = { 1, 4 }, - [ILO_GPE_GEN7_3DSTATE_VERTEX_ELEMENTS] = { 1, 2 }, - [ILO_GPE_GEN7_3DSTATE_INDEX_BUFFER] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_VF] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_CC_STATE_POINTERS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_SCISSOR_STATE_POINTERS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_VS] = { 0, 6 }, - [ILO_GPE_GEN7_3DSTATE_GS] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_CLIP] = { 0, 4 }, - [ILO_GPE_GEN7_3DSTATE_SF] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_WM] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_CONSTANT_VS] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_CONSTANT_GS] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_CONSTANT_PS] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_SAMPLE_MASK] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_CONSTANT_HS] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_CONSTANT_DS] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_HS] = { 0, 7 }, - [ILO_GPE_GEN7_3DSTATE_TE] = { 0, 4 }, - [ILO_GPE_GEN7_3DSTATE_DS] = { 0, 6 }, - [ILO_GPE_GEN7_3DSTATE_STREAMOUT] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_SBE] = { 0, 14 }, - [ILO_GPE_GEN7_3DSTATE_PS] = { 0, 8 }, - [ILO_GPE_GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_BLEND_STATE_POINTERS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_URB_VS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_URB_HS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_URB_DS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_URB_GS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_DRAWING_RECTANGLE] = { 0, 4 }, - [ILO_GPE_GEN7_3DSTATE_POLY_STIPPLE_OFFSET] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_POLY_STIPPLE_PATTERN] = { 0, 33, }, - [ILO_GPE_GEN7_3DSTATE_LINE_STIPPLE] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_AA_LINE_PARAMETERS] = { 0, 3 }, - [ILO_GPE_GEN7_3DSTATE_MULTISAMPLE] = { 0, 4 }, - [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS] = { 0, 2 }, - [ILO_GPE_GEN7_3DSTATE_SO_DECL_LIST] = { 3, 2 }, - [ILO_GPE_GEN7_3DSTATE_SO_BUFFER] = { 0, 4 }, - [ILO_GPE_GEN7_PIPE_CONTROL] = { 0, 5 }, - [ILO_GPE_GEN7_3DPRIMITIVE] = { 0, 7 }, - }; - const int header = gen7_command_size_table[cmd].header; - const int body = gen7_command_size_table[cmd].body; - const int count = arg; - - ILO_GPE_VALID_GEN(dev, 7, 7.5); - assert(cmd < ILO_GPE_GEN7_COMMAND_COUNT); - - return (likely(count)) ? header + body * count : 0; -} - -int -ilo_gpe_gen7_estimate_state_size(const struct ilo_dev_info *dev, - enum ilo_gpe_gen7_state state, - int arg) -{ - static const struct { - int alignment; - int body; - bool is_array; - } gen7_state_size_table[ILO_GPE_GEN7_STATE_COUNT] = { - [ILO_GPE_GEN7_INTERFACE_DESCRIPTOR_DATA] = { 8, 8, true }, - [ILO_GPE_GEN7_SF_CLIP_VIEWPORT] = { 16, 16, true }, - [ILO_GPE_GEN7_CC_VIEWPORT] = { 8, 2, true }, - [ILO_GPE_GEN7_COLOR_CALC_STATE] = { 16, 6, false }, - [ILO_GPE_GEN7_BLEND_STATE] = { 16, 2, true }, - [ILO_GPE_GEN7_DEPTH_STENCIL_STATE] = { 16, 3, false }, - [ILO_GPE_GEN7_SCISSOR_RECT] = { 8, 2, true }, - [ILO_GPE_GEN7_BINDING_TABLE_STATE] = { 8, 1, true }, - [ILO_GPE_GEN7_SURFACE_STATE] = { 8, 8, false }, - [ILO_GPE_GEN7_SAMPLER_STATE] = { 8, 4, true }, - [ILO_GPE_GEN7_SAMPLER_BORDER_COLOR_STATE] = { 8, 4, false }, - [ILO_GPE_GEN7_PUSH_CONSTANT_BUFFER] = { 8, 1, true }, - }; - const int alignment = gen7_state_size_table[state].alignment; - const int body = gen7_state_size_table[state].body; - const bool is_array = gen7_state_size_table[state].is_array; - const int count = arg; - int estimate; - - ILO_GPE_VALID_GEN(dev, 7, 7.5); - assert(state < ILO_GPE_GEN7_STATE_COUNT); - - if (likely(count)) { - if (is_array) { - estimate = (alignment - 1) + body * count; - } - else { - estimate = (alignment - 1) + body; - /* all states are aligned */ - if (count > 1) - estimate += util_align_npot(body, alignment) * (count - 1); - } - } - else { - estimate = 0; - } - - return estimate; -}