diff options
Diffstat (limited to 'lib/mesa/src')
47 files changed, 455 insertions, 527 deletions
diff --git a/lib/mesa/src/amd/common/ac_nir_lower_ngg.c b/lib/mesa/src/amd/common/ac_nir_lower_ngg.c index 9bf628381..8836c91d6 100644 --- a/lib/mesa/src/amd/common/ac_nir_lower_ngg.c +++ b/lib/mesa/src/amd/common/ac_nir_lower_ngg.c @@ -45,6 +45,7 @@ typedef struct nir_variable *prim_exp_arg_var; nir_variable *es_accepted_var; nir_variable *gs_accepted_var; + nir_variable *gs_vtx_indices_vars[3]; struct u_vector saved_uniforms; @@ -317,11 +318,16 @@ emit_pack_ngg_prim_exp_arg(nir_builder *b, unsigned num_vertices_per_primitives, return arg; } -static nir_ssa_def * -ngg_input_primitive_vertex_index(nir_builder *b, unsigned vertex) +static void +ngg_nogs_init_vertex_indices_vars(nir_builder *b, nir_function_impl *impl, lower_ngg_nogs_state *st) { - return nir_ubfe(b, nir_build_load_gs_vertex_offset_amd(b, .base = vertex / 2u), - nir_imm_int(b, (vertex & 1u) * 16u), nir_imm_int(b, 16u)); + for (unsigned v = 0; v < st->num_vertices_per_primitives; ++v) { + st->gs_vtx_indices_vars[v] = nir_local_variable_create(impl, glsl_uint_type(), "gs_vtx_addr"); + + nir_ssa_def *vtx = nir_ubfe(b, nir_build_load_gs_vertex_offset_amd(b, .base = v / 2u), + nir_imm_int(b, (v & 1u) * 16u), nir_imm_int(b, 16u)); + nir_store_var(b, st->gs_vtx_indices_vars[v], vtx, 0x1); + } } static nir_ssa_def * @@ -333,13 +339,8 @@ emit_ngg_nogs_prim_exp_arg(nir_builder *b, lower_ngg_nogs_state *st) } else { nir_ssa_def *vtx_idx[3] = {0}; - vtx_idx[0] = ngg_input_primitive_vertex_index(b, 0); - vtx_idx[1] = st->num_vertices_per_primitives >= 2 - ? ngg_input_primitive_vertex_index(b, 1) - : nir_imm_zero(b, 1, 32); - vtx_idx[2] = st->num_vertices_per_primitives >= 3 - ? ngg_input_primitive_vertex_index(b, 2) - : nir_imm_zero(b, 1, 32); + for (unsigned v = 0; v < st->num_vertices_per_primitives; ++v) + vtx_idx[v] = nir_load_var(b, st->gs_vtx_indices_vars[v]); return emit_pack_ngg_prim_exp_arg(b, st->num_vertices_per_primitives, vtx_idx, NULL, st->use_edgeflags); } @@ -358,12 +359,20 @@ emit_ngg_nogs_prim_export(nir_builder *b, lower_ngg_nogs_state *st, nir_ssa_def arg = emit_ngg_nogs_prim_exp_arg(b, st); if (st->export_prim_id && b->shader->info.stage == MESA_SHADER_VERTEX) { - /* Copy Primitive IDs from GS threads to the LDS address corresponding to the ES thread of the provoking vertex. */ - nir_ssa_def *prim_id = nir_build_load_primitive_id(b); - nir_ssa_def *provoking_vtx_idx = ngg_input_primitive_vertex_index(b, st->provoking_vtx_idx); - nir_ssa_def *addr = pervertex_lds_addr(b, provoking_vtx_idx, 4u); - - nir_build_store_shared(b, prim_id, addr, .write_mask = 1u, .align_mul = 4u); + nir_ssa_def *prim_valid = nir_ieq_imm(b, nir_ushr_imm(b, arg, 31), 0); + nir_if *if_prim_valid = nir_push_if(b, prim_valid); + { + /* Copy Primitive IDs from GS threads to the LDS address + * corresponding to the ES thread of the provoking vertex. + * It will be exported as a per-vertex attribute. + */ + nir_ssa_def *prim_id = nir_build_load_primitive_id(b); + nir_ssa_def *provoking_vtx_idx = nir_load_var(b, st->gs_vtx_indices_vars[st->provoking_vtx_idx]); + nir_ssa_def *addr = pervertex_lds_addr(b, provoking_vtx_idx, 4u); + + nir_build_store_shared(b, prim_id, addr, .write_mask = 1u, .align_mul = 4u); + } + nir_pop_if(b, if_prim_valid); } nir_build_export_primitive_amd(b, arg); @@ -747,6 +756,7 @@ compact_vertices_after_culling(nir_builder *b, nir_ssa_def *vtx_addr = nir_load_var(b, gs_vtxaddr_vars[v]); nir_ssa_def *exporter_vtx_idx = nir_build_load_shared(b, 1, 8, vtx_addr, .base = lds_es_exporter_tid, .align_mul = 1u); exporter_vtx_indices[v] = nir_u2u32(b, exporter_vtx_idx); + nir_store_var(b, nogs_state->gs_vtx_indices_vars[v], exporter_vtx_indices[v], 0x1); } nir_ssa_def *prim_exp_arg = emit_pack_ngg_prim_exp_arg(b, 3, exporter_vtx_indices, NULL, nogs_state->use_edgeflags); @@ -1142,7 +1152,7 @@ add_deferred_attribute_culling(nir_builder *b, nir_cf_list *original_extracted_c /* Load vertex indices from input VGPRs */ nir_ssa_def *vtx_idx[3] = {0}; for (unsigned vertex = 0; vertex < 3; ++vertex) - vtx_idx[vertex] = ngg_input_primitive_vertex_index(b, vertex); + vtx_idx[vertex] = nir_load_var(b, nogs_state->gs_vtx_indices_vars[vertex]); nir_ssa_def *vtx_addr[3] = {0}; nir_ssa_def *pos[3][4] = {0}; @@ -1320,6 +1330,8 @@ ac_nir_lower_ngg_nogs(nir_shader *shader, nir_cf_extract(&extracted, nir_before_cf_list(&impl->body), nir_after_cf_list(&impl->body)); b->cursor = nir_before_cf_list(&impl->body); + ngg_nogs_init_vertex_indices_vars(b, impl, &state); + if (!can_cull) { /* Allocate export space on wave 0 - confirm to the HW that we want to use all possible space */ nir_if *if_wave_0 = nir_push_if(b, nir_ieq(b, nir_build_load_subgroup_id(b), nir_imm_int(b, 0))); diff --git a/lib/mesa/src/amd/vulkan/00-radv-defaults.conf b/lib/mesa/src/amd/vulkan/00-radv-defaults.conf new file mode 100644 index 000000000..4cf35218d --- /dev/null +++ b/lib/mesa/src/amd/vulkan/00-radv-defaults.conf @@ -0,0 +1,148 @@ +<?xml version="1.0" standalone="yes"?> +<!-- + +============================================ +Application bugs worked around in this file: +============================================ + +--> + +<!DOCTYPE driconf [ + <!ELEMENT driconf (device+)> + <!ELEMENT device (application | engine)+> + <!ATTLIST device driver CDATA #IMPLIED + device CDATA #IMPLIED> + <!ELEMENT application (option+)> + <!ATTLIST application name CDATA #REQUIRED + executable CDATA #IMPLIED + executable_regexp CDATA #IMPLIED + sha1 CDATA #IMPLIED + application_name_match CDATA #IMPLIED + application_versions CDATA #IMPLIED> + <!ELEMENT engine (option+)> + + <!-- engine_name_match: A regexp matching the engine name --> + <!-- engine_versions: A version in range format + (version 1 to 4 : "1:4") --> + + <!ATTLIST engine engine_name_match CDATA #REQUIRED + engine_versions CDATA #IMPLIED> + + <!ELEMENT option EMPTY> + <!ATTLIST option name CDATA #REQUIRED + value CDATA #REQUIRED> +]> + +<driconf> + <device driver="radv"> + <!-- Engine workarounds --> + <engine engine_name_match="vkd3d"> + <option name="radv_zero_vram" value="true" /> + </engine> + + <engine engine_name_match="Quantic Dream Engine"> + <option name="radv_zero_vram" value="true" /> + <option name="radv_lower_discard_to_demote" value="true" /> + <option name="radv_disable_tc_compat_htile_general" value="true" /> + </engine> + + <!-- Game workarounds --> + <application name="Shadow Of The Tomb Raider (Native)" application_name_match="ShadowOfTheTomb"> + <option name="radv_report_llvm9_version_string" value="true" /> + <option name="radv_invariant_geom" value="true" /> + </application> + + <application name="Shadow Of The Tomb Raider (DX11/DX12)" application_name_match="SOTTR.exe"> + <option name="radv_invariant_geom" value="true" /> + <option name="radv_split_fma" value="true" /> + </application> + + <application name="RAGE 2" executable="RAGE2.exe"> + <option name="radv_enable_mrt_output_nan_fixup" value="true" /> + </application> + + <application name="Path of Exile (64-bit, Steam)" executable="PathOfExile_x64Steam.exe"> + <option name="radv_no_dynamic_bounds" value="true" /> + <option name="radv_absolute_depth_bias" value="true" /> + </application> + <application name="Path of Exile (32-bit, Steam)" executable="PathOfExileSteam.exe"> + <option name="radv_no_dynamic_bounds" value="true" /> + <option name="radv_absolute_depth_bias" value="true" /> + </application> + <application name="Path of Exile (64-bit)" executable="PathOfExile_x64.exe"> + <option name="radv_no_dynamic_bounds" value="true" /> + <option name="radv_absolute_depth_bias" value="true" /> + </application> + <application name="Path of Exile (32-bit)" executable="PathOfExile.exe"> + <option name="radv_no_dynamic_bounds" value="true" /> + <option name="radv_absolute_depth_bias" value="true" /> + </application> + + <application name="The Surge 2" application_name_match="Fledge"> + <option name="radv_disable_shrink_image_store" value="true" /> + <option name="radv_zero_vram" value="true" /> + </application> + + <application name="World War Z (and World War Z: Aftermath)" application_name_match="WWZ|wwz"> + <option name="radv_override_uniform_offset_alignment" value="16" /> + <option name="radv_disable_shrink_image_store" value="true" /> + <option name="radv_invariant_geom" value="true" /> + </application> + + <application name="DOOM VFR" application_name_match="DOOM_VFR"> + <option name="radv_no_dynamic_bounds" value="true" /> + </application> + + <application name="DOOM Eternal" application_name_match="DOOMEternal"> + <option name="radv_zero_vram" value="true" /> + </application> + + <application name="No Man's Sky" application_name_match="No Man's Sky"> + <option name="radv_lower_discard_to_demote" value="true" /> + </application> + + <application name="Monster Hunter World" application_name_match="MonsterHunterWorld.exe"> + <option name="radv_invariant_geom" value="true" /> + </application> + + <application name="DOOM (2016)" application_name_match="DOOM$"> + <option name="radv_disable_dcc" value="true" /> + </application> + + <application name="Wolfenstein II" application_name_match="Wolfenstein II The New Colossus"> + <option name="radv_disable_dcc" value="true" /> + </application> + + <application name="RDR2" application_name_match="Red Dead Redemption 2"> + <option name="radv_report_apu_as_dgpu" value="true" /> + </application> + + <application name="Resident Evil Village" application_name_match="re8.exe"> + <option name="radv_invariant_geom" value="true" /> + </application> + + <application name="F1 2021" application_name_match="F1_2021_dx12.exe"> + <option name="radv_disable_htile_layers" value="true" /> + </application> + + <application name="Fable Anniversary" application_name_match="Fable Anniversary.exe"> + <option name="radv_disable_dcc" value="true" /> + </application> + + <application name="Dragon's Dogma Dark Ariser" application_name_match="DDDA.exe"> + <option name="radv_disable_dcc" value="true" /> + </application> + + <application name="Grand Theft Auto IV" application_name_match="GTAIV.exe"> + <option name="radv_disable_dcc" value="true" /> + </application> + + <application name="Star Wars: The Force Unleashed II" application_name_match="SWTFU2.exe"> + <option name="radv_disable_dcc" value="true" /> + </application> + + <application name="Starcraft 2" application_name_match="SC2_x64.exe"> + <option name="radv_disable_dcc" value="true" /> + </application> + </device> +</driconf> diff --git a/lib/mesa/src/amd/vulkan/meson.build b/lib/mesa/src/amd/vulkan/meson.build index 186f19606..942cb7114 100644 --- a/lib/mesa/src/amd/vulkan/meson.build +++ b/lib/mesa/src/amd/vulkan/meson.build @@ -87,6 +87,10 @@ libradv_files = files( 'vk_format.h', ) +files_drirc = files('00-radv-defaults.conf') + +install_data(files_drirc, install_dir : join_paths(get_option('datadir'), 'drirc.d')) + if not with_platform_windows libradv_files += files( 'winsys/amdgpu/radv_amdgpu_bo.c', diff --git a/lib/mesa/src/amd/vulkan/radv_shader.h b/lib/mesa/src/amd/vulkan/radv_shader.h index 9cabbfc21..29c1b3b00 100644 --- a/lib/mesa/src/amd/vulkan/radv_shader.h +++ b/lib/mesa/src/amd/vulkan/radv_shader.h @@ -60,6 +60,7 @@ struct radv_pipeline_key { uint32_t optimisations_disabled : 1; uint32_t invariant_geom : 1; uint32_t use_ngg : 1; + uint32_t adjust_frag_coord_z : 1; struct { uint32_t instance_rate_inputs; diff --git a/lib/mesa/src/egl/main/egldefines.h b/lib/mesa/src/egl/main/egldefines.h index c925e0ca5..791f44354 100644 --- a/lib/mesa/src/egl/main/egldefines.h +++ b/lib/mesa/src/egl/main/egldefines.h @@ -46,7 +46,11 @@ extern "C" { #define _EGL_MAX_PBUFFER_WIDTH 4096 #define _EGL_MAX_PBUFFER_HEIGHT 4096 +#ifdef AMBER +#define _EGL_VENDOR_STRING "Mesa Project (Amber)" +#else #define _EGL_VENDOR_STRING "Mesa Project" +#endif #ifdef __cplusplus } diff --git a/lib/mesa/src/egl/meson.build b/lib/mesa/src/egl/meson.build index 65faf6077..b6f7d1cf3 100644 --- a/lib/mesa/src/egl/meson.build +++ b/lib/mesa/src/egl/meson.build @@ -165,7 +165,7 @@ else files_egl += [g_egldispatchstubs_h, g_egldispatchstubs_c] files_egl += files('main/eglglvnd.c', 'main/egldispatchstubs.c') glvnd_config = configuration_data() - glvnd_config.set('glvnd_vendor_name', get_option('glvnd-vendor-name')) + glvnd_config.set('glvnd_vendor_name', glvnd_vendor_name) configure_file( configuration: glvnd_config, input : 'main/50_mesa.json', diff --git a/lib/mesa/src/freedreno/ci/freedreno-a630-fails.txt b/lib/mesa/src/freedreno/ci/freedreno-a630-fails.txt index 43aa7b469..cdcb762dd 100644 --- a/lib/mesa/src/freedreno/ci/freedreno-a630-fails.txt +++ b/lib/mesa/src/freedreno/ci/freedreno-a630-fails.txt @@ -262,8 +262,6 @@ spec@arb_texture_rg@texwrap formats-int bordercolor-swizzled@GL_RG32UI- swizzled spec@arb_texture_rg@texwrap formats-int bordercolor-swizzled@GL_RG8I- swizzled- border color only,Fail spec@arb_texture_rg@texwrap formats-int bordercolor-swizzled@GL_RG8UI- swizzled- border color only,Fail -spec@arb_texture_view@rendering-layers-image,Fail -spec@arb_texture_view@rendering-layers-image@layers rendering of image1DArray,Fail spec@arb_timer_query@timestamp-get,Fail spec@arb_transform_feedback3@arb_transform_feedback3-ext_interleaved_two_bufs_vs,Fail spec@arb_transform_feedback3@gl_skipcomponents1-1,Fail diff --git a/lib/mesa/src/freedreno/ir3/ir3_compiler_nir.c b/lib/mesa/src/freedreno/ir3/ir3_compiler_nir.c index 62c6e8494..9451b7789 100644 --- a/lib/mesa/src/freedreno/ir3/ir3_compiler_nir.c +++ b/lib/mesa/src/freedreno/ir3/ir3_compiler_nir.c @@ -1130,10 +1130,10 @@ get_image_samp_tex_src(struct ir3_context *ctx, nir_intrinsic_instr *intr) struct ir3_block *b = ctx->block; struct tex_src_info info = {0}; nir_intrinsic_instr *bindless_tex = ir3_bindless_resource(intr->src[0]); - ctx->so->bindless_tex = true; if (bindless_tex) { /* Bindless case */ + ctx->so->bindless_tex = true; info.flags |= IR3_INSTR_B; /* Gather information required to determine which encoding to @@ -1235,11 +1235,20 @@ emit_intrinsic_load_image(struct ir3_context *ctx, nir_intrinsic_instr *intr, } info.flags |= flags; - for (unsigned i = 0; i < ncoords; i++) - coords[i] = src0[i]; - - if (ncoords == 1) - coords[ncoords++] = create_immed(b, 0); + /* hw doesn't do 1d, so we treat it as 2d with height of 1, and patch up the + * y coord. Note that the array index must come after the fake y coord. + */ + enum glsl_sampler_dim dim = nir_intrinsic_image_dim(intr); + if (dim == GLSL_SAMPLER_DIM_1D || dim == GLSL_SAMPLER_DIM_BUF) { + coords[0] = src0[0]; + coords[1] = create_immed(b, 0); + for (unsigned i = 1; i < ncoords; i++) + coords[i + 1] = src0[i]; + ncoords++; + } else { + for (unsigned i = 0; i < ncoords; i++) + coords[i] = src0[i]; + } sam = emit_sam(ctx, OPC_ISAM, info, type, 0b1111, ir3_create_collect(b, coords, ncoords), NULL); diff --git a/lib/mesa/src/freedreno/ir3/ir3_ra.c b/lib/mesa/src/freedreno/ir3/ir3_ra.c index 0c8ece6f0..813d0affc 100644 --- a/lib/mesa/src/freedreno/ir3/ir3_ra.c +++ b/lib/mesa/src/freedreno/ir3/ir3_ra.c @@ -1328,7 +1328,8 @@ insert_parallel_copy_instr(struct ra_ctx *ctx, struct ir3_instruction *instr) struct ra_parallel_copy *entry = &ctx->parallel_copies[i]; struct ir3_register *reg = ir3_dst_create(pcopy, INVALID_REG, - entry->interval->interval.reg->flags & ~IR3_REG_SSA); + entry->interval->interval.reg->flags & + (IR3_REG_HALF | IR3_REG_ARRAY)); reg->size = entry->interval->interval.reg->size; reg->wrmask = entry->interval->interval.reg->wrmask; assign_reg(pcopy, reg, ra_interval_get_num(entry->interval)); @@ -1338,7 +1339,8 @@ insert_parallel_copy_instr(struct ra_ctx *ctx, struct ir3_instruction *instr) struct ra_parallel_copy *entry = &ctx->parallel_copies[i]; struct ir3_register *reg = ir3_src_create(pcopy, INVALID_REG, - entry->interval->interval.reg->flags & ~IR3_REG_SSA); + entry->interval->interval.reg->flags & + (IR3_REG_HALF | IR3_REG_ARRAY)); reg->size = entry->interval->interval.reg->size; reg->wrmask = entry->interval->interval.reg->wrmask; assign_reg(pcopy, reg, ra_physreg_to_num(entry->src, reg->flags)); @@ -1774,8 +1776,9 @@ insert_liveout_copy(struct ir3_block *block, physreg_t dst, physreg_t src, pcopy->dsts[pcopy->dsts_count++] = old_pcopy->dsts[i]; } - struct ir3_register *dst_reg = - ir3_dst_create(pcopy, INVALID_REG, reg->flags & ~IR3_REG_SSA); + unsigned flags = reg->flags & (IR3_REG_HALF | IR3_REG_ARRAY); + + struct ir3_register *dst_reg = ir3_dst_create(pcopy, INVALID_REG, flags); dst_reg->wrmask = reg->wrmask; dst_reg->size = reg->size; assign_reg(pcopy, dst_reg, ra_physreg_to_num(dst, reg->flags)); @@ -1784,8 +1787,7 @@ insert_liveout_copy(struct ir3_block *block, physreg_t dst, physreg_t src, pcopy->srcs[pcopy->srcs_count++] = old_pcopy->srcs[i]; } - struct ir3_register *src_reg = - ir3_src_create(pcopy, INVALID_REG, reg->flags & ~IR3_REG_SSA); + struct ir3_register *src_reg = ir3_src_create(pcopy, INVALID_REG, flags); src_reg->wrmask = reg->wrmask; src_reg->size = reg->size; assign_reg(pcopy, src_reg, ra_physreg_to_num(src, reg->flags)); diff --git a/lib/mesa/src/freedreno/vulkan/tu_cmd_buffer.c b/lib/mesa/src/freedreno/vulkan/tu_cmd_buffer.c index 0d9ab2328..81fee2edf 100644 --- a/lib/mesa/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/lib/mesa/src/freedreno/vulkan/tu_cmd_buffer.c @@ -293,7 +293,7 @@ tu6_emit_mrt(struct tu_cmd_buffer *cmd, * setting the SINGLE_PRIM_MODE field to the same value that the blob does * for advanced_blend in sysmem mode if a feedback loop is detected. */ - if (subpass->feedback) { + if (subpass->feedback_loop_color || subpass->feedback_loop_ds) { tu_cond_exec_start(cs, CP_COND_EXEC_0_RENDER_MODE_SYSMEM); tu_cs_emit_write_reg(cs, REG_A6XX_GRAS_SC_CNTL, A6XX_GRAS_SC_CNTL_CCUSINGLECACHELINESIZE(2) | @@ -3831,7 +3831,8 @@ tu6_build_depth_plane_z_mode(struct tu_cmd_buffer *cmd) bool depth_write = tu6_writes_depth(cmd, depth_test_enable); bool stencil_write = tu6_writes_stencil(cmd); - if (cmd->state.pipeline->lrz.fs_has_kill && + if ((cmd->state.pipeline->lrz.fs_has_kill || + cmd->state.pipeline->subpass_feedback_loop_ds) && (depth_write || stencil_write)) { zmode = cmd->state.lrz.valid ? A6XX_EARLY_LRZ_LATE_Z : A6XX_LATE_Z; } diff --git a/lib/mesa/src/freedreno/vulkan/tu_pass.c b/lib/mesa/src/freedreno/vulkan/tu_pass.c index d7bb48374..ed4f816c2 100644 --- a/lib/mesa/src/freedreno/vulkan/tu_pass.c +++ b/lib/mesa/src/freedreno/vulkan/tu_pass.c @@ -448,7 +448,7 @@ tu_render_pass_check_feedback_loop(struct tu_render_pass *pass) continue; for (unsigned k = 0; k < subpass->input_count; k++) { if (subpass->input_attachments[k].attachment == a) { - subpass->feedback = true; + subpass->feedback_loop_color = true; break; } } @@ -458,7 +458,7 @@ tu_render_pass_check_feedback_loop(struct tu_render_pass *pass) for (unsigned k = 0; k < subpass->input_count; k++) { if (subpass->input_attachments[k].attachment == subpass->depth_stencil_attachment.attachment) { - subpass->feedback = true; + subpass->feedback_loop_ds = true; break; } } diff --git a/lib/mesa/src/freedreno/vulkan/tu_pipeline.c b/lib/mesa/src/freedreno/vulkan/tu_pipeline.c index a4a9f9202..d55fcfb51 100644 --- a/lib/mesa/src/freedreno/vulkan/tu_pipeline.c +++ b/lib/mesa/src/freedreno/vulkan/tu_pipeline.c @@ -273,6 +273,8 @@ struct tu_pipeline_builder VkFormat depth_attachment_format; uint32_t render_components; uint32_t multiview_mask; + + bool subpass_feedback_loop_ds; }; static bool @@ -3077,6 +3079,7 @@ tu_pipeline_builder_build(struct tu_pipeline_builder *builder, return VK_ERROR_OUT_OF_HOST_MEMORY; (*pipeline)->layout = builder->layout; + (*pipeline)->subpass_feedback_loop_ds = builder->subpass_feedback_loop_ds; (*pipeline)->executables_mem_ctx = ralloc_context(NULL); util_dynarray_init(&(*pipeline)->executables, (*pipeline)->executables_mem_ctx); @@ -3190,6 +3193,8 @@ tu_pipeline_builder_init_graphics( const struct tu_subpass *subpass = &pass->subpasses[create_info->subpass]; + builder->subpass_feedback_loop_ds = subpass->feedback_loop_ds; + builder->multiview_mask = subpass->multiview_mask; builder->rasterizer_discard = diff --git a/lib/mesa/src/freedreno/vulkan/tu_private.h b/lib/mesa/src/freedreno/vulkan/tu_private.h index cd45a6bc9..20f47d36e 100644 --- a/lib/mesa/src/freedreno/vulkan/tu_private.h +++ b/lib/mesa/src/freedreno/vulkan/tu_private.h @@ -1262,6 +1262,8 @@ struct tu_pipeline struct tu_lrz_pipeline lrz; + bool subpass_feedback_loop_ds; + void *executables_mem_ctx; /* tu_pipeline_executable */ struct util_dynarray executables; @@ -1610,8 +1612,8 @@ struct tu_subpass uint32_t resolve_count; bool resolve_depth_stencil; - /* True if there is any feedback loop at all. */ - bool feedback; + bool feedback_loop_color; + bool feedback_loop_ds; /* True if we must invalidate UCHE thanks to a feedback loop. */ bool feedback_invalidate; diff --git a/lib/mesa/src/gallium/auxiliary/driver_trace/tr_context.c b/lib/mesa/src/gallium/auxiliary/driver_trace/tr_context.c index 7e28a4028..b3a367a5e 100644 --- a/lib/mesa/src/gallium/auxiliary/driver_trace/tr_context.c +++ b/lib/mesa/src/gallium/auxiliary/driver_trace/tr_context.c @@ -2191,7 +2191,7 @@ trace_context_create(struct trace_screen *tr_scr, if (!trace_enabled()) goto error1; - tr_ctx = ralloc(NULL, struct trace_context); + tr_ctx = rzalloc(NULL, struct trace_context); if (!tr_ctx) goto error1; diff --git a/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c b/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c index b771b7cc7..daed647ba 100644 --- a/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c +++ b/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c @@ -1438,6 +1438,7 @@ static void emit_tex(struct lp_build_nir_context *bld_base, { struct lp_build_nir_soa_context *bld = (struct lp_build_nir_soa_context *)bld_base; struct gallivm_state *gallivm = bld_base->base.gallivm; + LLVMBuilderRef builder = bld_base->base.gallivm->builder; params->type = bld_base->base.type; params->context_ptr = bld->context_ptr; @@ -1491,10 +1492,25 @@ static void emit_tex(struct lp_build_nir_context *bld_base, return; } - if (params->texture_index_offset) - params->texture_index_offset = LLVMBuildExtractElement(bld_base->base.gallivm->builder, - params->texture_index_offset, - lp_build_const_int32(bld_base->base.gallivm, 0), ""); + if (params->texture_index_offset) { + struct lp_build_loop_state loop_state; + LLVMValueRef exec_mask = mask_vec(bld_base); + LLVMValueRef outer_cond = LLVMBuildICmp(builder, LLVMIntNE, exec_mask, bld_base->uint_bld.zero, ""); + LLVMValueRef res_store = lp_build_alloca(gallivm, bld_base->uint_bld.elem_type, ""); + lp_build_loop_begin(&loop_state, gallivm, lp_build_const_int32(gallivm, 0)); + LLVMValueRef if_cond = LLVMBuildExtractElement(gallivm->builder, outer_cond, loop_state.counter, ""); + + struct lp_build_if_state ifthen; + lp_build_if(&ifthen, gallivm, if_cond); + LLVMValueRef value_ptr = LLVMBuildExtractElement(gallivm->builder, params->texture_index_offset, + loop_state.counter, ""); + LLVMBuildStore(builder, value_ptr, res_store); + lp_build_endif(&ifthen); + lp_build_loop_end_cond(&loop_state, lp_build_const_int32(gallivm, bld_base->uint_bld.type.length), + NULL, LLVMIntUGE); + LLVMValueRef idx_val = LLVMBuildLoad(builder, res_store, ""); + params->texture_index_offset = idx_val; + } params->type = bld_base->base.type; bld->sampler->emit_tex_sample(bld->sampler, diff --git a/lib/mesa/src/gallium/drivers/crocus/crocus_state.c b/lib/mesa/src/gallium/drivers/crocus/crocus_state.c index 4c3574216..61820ed22 100644 --- a/lib/mesa/src/gallium/drivers/crocus/crocus_state.c +++ b/lib/mesa/src/gallium/drivers/crocus/crocus_state.c @@ -1983,9 +1983,9 @@ get_line_width(const struct pipe_rasterizer_state *state) * "Grid Intersection Quantization" rules as specified by the * "Zero-Width (Cosmetic) Line Rasterization" section of the docs. */ - line_width = 0.0f; + /* hack around this for gfx4/5 fps counters in hud. */ + line_width = GFX_VER < 6 ? 1.5f : 0.0f; } - return line_width; } diff --git a/lib/mesa/src/gallium/drivers/iris/iris_program.c b/lib/mesa/src/gallium/drivers/iris/iris_program.c index a5e1dc137..973999bcc 100644 --- a/lib/mesa/src/gallium/drivers/iris/iris_program.c +++ b/lib/mesa/src/gallium/drivers/iris/iris_program.c @@ -2820,7 +2820,8 @@ iris_bind_vs_state(struct pipe_context *ctx, void *state) if (ice->state.vs_uses_draw_params != uses_draw_params || ice->state.vs_uses_derived_draw_params != uses_derived_draw_params || - ice->state.vs_needs_edge_flag != info->vs.needs_edge_flag) { + ice->state.vs_needs_edge_flag != info->vs.needs_edge_flag || + ice->state.vs_needs_sgvs_element != needs_sgvs_element) { ice->state.dirty |= IRIS_DIRTY_VERTEX_BUFFERS | IRIS_DIRTY_VERTEX_ELEMENTS; } diff --git a/lib/mesa/src/gallium/drivers/iris/iris_state.c b/lib/mesa/src/gallium/drivers/iris/iris_state.c index 40dc2d062..de553f320 100644 --- a/lib/mesa/src/gallium/drivers/iris/iris_state.c +++ b/lib/mesa/src/gallium/drivers/iris/iris_state.c @@ -6922,10 +6922,9 @@ iris_upload_compute_walker(struct iris_context *ice, iris_emit_cmd(batch, GENX(CFE_STATE), cfe) { cfe.MaximumNumberofThreads = devinfo->max_cs_threads * devinfo->subslice_total - 1; - if (prog_data->total_scratch > 0) { - cfe.ScratchSpaceBuffer = - iris_get_scratch_surf(ice, prog_data->total_scratch)->offset >> 4; - } + uint32_t scratch_addr = pin_scratch_space(ice, batch, prog_data, + MESA_SHADER_COMPUTE); + cfe.ScratchSpaceBuffer = scratch_addr >> 4; } } diff --git a/lib/mesa/src/gallium/drivers/llvmpipe/lp_state_surface.c b/lib/mesa/src/gallium/drivers/llvmpipe/lp_state_surface.c index 9c698383e..58aea7bed 100644 --- a/lib/mesa/src/gallium/drivers/llvmpipe/lp_state_surface.c +++ b/lib/mesa/src/gallium/drivers/llvmpipe/lp_state_surface.c @@ -67,13 +67,13 @@ llvmpipe_set_framebuffer_state(struct pipe_context *pipe, const struct util_format_description *depth_desc = util_format_description(depth_format); - if (lp->framebuffer.zsbuf && lp->framebuffer.zsbuf->context != pipe) { + if (fb->zsbuf && fb->zsbuf->context != pipe) { debug_printf("Illegal setting of fb state with zsbuf created in " "another context\n"); } for (i = 0; i < fb->nr_cbufs; i++) { - if (lp->framebuffer.cbufs[i] && - lp->framebuffer.cbufs[i]->context != pipe) { + if (fb->cbufs[i] && + fb->cbufs[i]->context != pipe) { debug_printf("Illegal setting of fb state with cbuf %d created in " "another context\n", i); } diff --git a/lib/mesa/src/gallium/drivers/panfrost/pan_context.c b/lib/mesa/src/gallium/drivers/panfrost/pan_context.c index 69bbc43f8..81722f05c 100644 --- a/lib/mesa/src/gallium/drivers/panfrost/pan_context.c +++ b/lib/mesa/src/gallium/drivers/panfrost/pan_context.c @@ -628,32 +628,35 @@ panfrost_set_sampler_views( struct panfrost_context *ctx = pan_context(pctx); ctx->dirty_shader[shader] |= PAN_DIRTY_STAGE_TEXTURE; - unsigned new_nr = 0; unsigned i; - assert(start_slot == 0); - - if (!views) - num_views = 0; - for (i = 0; i < num_views; ++i) { - if (views[i]) - new_nr = i + 1; + struct pipe_sampler_view *view = views ? views[i] : NULL; + unsigned p = i + start_slot; + if (take_ownership) { - pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][i], + pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][p], NULL); - ctx->sampler_views[shader][i] = (struct panfrost_sampler_view *)views[i]; + ctx->sampler_views[shader][i] = (struct panfrost_sampler_view *)view; } else { - pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][i], - views[i]); + pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][p], + view); } } - for (; i < ctx->sampler_view_count[shader]; i++) { - pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][i], + for (; i < num_views + unbind_num_trailing_slots; i++) { + unsigned p = i + start_slot; + pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][p], NULL); } - ctx->sampler_view_count[shader] = new_nr; + + /* Recalculate sampler view count */ + ctx->sampler_view_count[shader] = 0; + + for (i = 0; i < ARRAY_SIZE(ctx->sampler_views[shader]); ++i) { + if (ctx->sampler_views[shader][i]) + ctx->sampler_view_count[shader] = i + 1; + } } static void @@ -668,6 +671,8 @@ panfrost_set_shader_buffers( util_set_shader_buffers_mask(ctx->ssbo[shader], &ctx->ssbo_mask[shader], buffers, start, count); + + ctx->dirty_shader[shader] |= PAN_DIRTY_STAGE_SSBO; } static void diff --git a/lib/mesa/src/gallium/drivers/panfrost/pan_resource.c b/lib/mesa/src/gallium/drivers/panfrost/pan_resource.c index 5cf783945..f12f1c19c 100644 --- a/lib/mesa/src/gallium/drivers/panfrost/pan_resource.c +++ b/lib/mesa/src/gallium/drivers/panfrost/pan_resource.c @@ -153,31 +153,15 @@ panfrost_resource_get_handle(struct pipe_screen *pscreen, return true; } } else if (handle->type == WINSYS_HANDLE_TYPE_FD) { - if (scanout) { - struct drm_prime_handle args = { - .handle = scanout->handle, - .flags = DRM_CLOEXEC, - }; + int fd = panfrost_bo_export(rsrc->image.data.bo); - int ret = drmIoctl(dev->ro->kms_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args); - if (ret == -1) - return false; - - handle->stride = scanout->stride; - handle->handle = args.fd; - - return true; - } else { - int fd = panfrost_bo_export(rsrc->image.data.bo); - - if (fd < 0) - return false; + if (fd < 0) + return false; - handle->handle = fd; - handle->stride = rsrc->image.layout.slices[0].line_stride; - handle->offset = rsrc->image.layout.slices[0].offset; - return true; - } + handle->handle = fd; + handle->stride = rsrc->image.layout.slices[0].line_stride; + handle->offset = rsrc->image.layout.slices[0].offset; + return true; } return false; @@ -917,6 +901,9 @@ panfrost_ptr_map(struct pipe_context *pctx, } if (create_new_bo) { + /* Make sure we re-emit any descriptors using this resource */ + panfrost_dirty_state_all(ctx); + /* If the BO is used by one of the pending batches or if it's * not ready yet (still accessed by one of the already flushed * batches), we try to allocate a new one to avoid waiting. @@ -943,6 +930,12 @@ panfrost_ptr_map(struct pipe_context *pctx, panfrost_bo_unreference(bo); rsrc->image.data.bo = newbo; + /* Swapping out the BO will invalidate batches + * accessing this resource, flush them but do + * not wait for them. + */ + panfrost_flush_batches_accessing_rsrc(ctx, rsrc, "Resource shadowing"); + if (!copy_resource && drm_is_afbc(rsrc->image.layout.modifier)) panfrost_resource_init_afbc_headers(rsrc); diff --git a/lib/mesa/src/gallium/drivers/panfrost/pan_screen.c b/lib/mesa/src/gallium/drivers/panfrost/pan_screen.c index 3633ad366..8d39cac21 100644 --- a/lib/mesa/src/gallium/drivers/panfrost/pan_screen.c +++ b/lib/mesa/src/gallium/drivers/panfrost/pan_screen.c @@ -121,6 +121,7 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_SAMPLE_SHADING: case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES: case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT: + case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: return 1; case PIPE_CAP_MAX_RENDER_TARGETS: diff --git a/lib/mesa/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv b/lib/mesa/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv index b937a49fa..d560732b6 100644 --- a/lib/mesa/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv +++ b/lib/mesa/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv @@ -115,10 +115,6 @@ spec@egl_chromium_sync_control@conformance,Fail spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail spec@egl_ext_protected_content@conformance,Fail spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail -spec@ext_framebuffer_multisample@turn-on-off 2,Fail -spec@ext_framebuffer_multisample@turn-on-off 4,Fail -spec@ext_framebuffer_multisample@turn-on-off 6,Fail -spec@ext_framebuffer_multisample@turn-on-off 8,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_uyvy,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_yuyv,Fail spec@ext_texture_integer@fbo-integer,Fail diff --git a/lib/mesa/src/gallium/drivers/radeonsi/ci/radeonsi-stoney-fails.txt b/lib/mesa/src/gallium/drivers/radeonsi/ci/radeonsi-stoney-fails.txt index f56ce121a..6311e2f78 100644 --- a/lib/mesa/src/gallium/drivers/radeonsi/ci/radeonsi-stoney-fails.txt +++ b/lib/mesa/src/gallium/drivers/radeonsi/ci/radeonsi-stoney-fails.txt @@ -54,10 +54,6 @@ spec@egl_ext_protected_content@conformance,Fail spec@egl_khr_surfaceless_context@viewport,Fail spec@egl_mesa_configless_context@basic,Fail spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail -spec@ext_framebuffer_multisample@turn-on-off 2,Fail -spec@ext_framebuffer_multisample@turn-on-off 4,Fail -spec@ext_framebuffer_multisample@turn-on-off 6,Fail -spec@ext_framebuffer_multisample@turn-on-off 8,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y216,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_yuyv,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_uyvy,Fail diff --git a/lib/mesa/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv b/lib/mesa/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv index fe4bde09b..03d97002b 100644 --- a/lib/mesa/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv +++ b/lib/mesa/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv @@ -201,10 +201,6 @@ spec@egl_chromium_sync_control@conformance,Fail spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail spec@egl_ext_protected_content@conformance,Fail spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail -spec@ext_framebuffer_multisample@turn-on-off 2,Fail -spec@ext_framebuffer_multisample@turn-on-off 4,Fail -spec@ext_framebuffer_multisample@turn-on-off 6,Fail -spec@ext_framebuffer_multisample@turn-on-off 8,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_uyvy,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_yuyv,Fail spec@ext_texture_integer@fbo-integer,Fail diff --git a/lib/mesa/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv b/lib/mesa/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv index 6a8e45a45..b35f7db44 100644 --- a/lib/mesa/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv +++ b/lib/mesa/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv @@ -116,10 +116,6 @@ spec@egl_chromium_sync_control@conformance,Fail spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail spec@egl_ext_protected_content@conformance,Fail spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail -spec@ext_framebuffer_multisample@turn-on-off 2,Fail -spec@ext_framebuffer_multisample@turn-on-off 4,Fail -spec@ext_framebuffer_multisample@turn-on-off 6,Fail -spec@ext_framebuffer_multisample@turn-on-off 8,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_uyvy,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_yuyv,Fail spec@ext_texture_integer@fbo-integer,Fail diff --git a/lib/mesa/src/gallium/drivers/radeonsi/ci/traces-radeonsi.yml b/lib/mesa/src/gallium/drivers/radeonsi/ci/traces-radeonsi.yml index cbf5d0974..a9b47090e 100644 --- a/lib/mesa/src/gallium/drivers/radeonsi/ci/traces-radeonsi.yml +++ b/lib/mesa/src/gallium/drivers/radeonsi/ci/traces-radeonsi.yml @@ -5,19 +5,19 @@ traces: - path: glmark2/desktop:windows=4:effect=blur:blur-radius=5:passes=1:separable=true.trace expectations: - device: gl-radeonsi-stoney - checksum: d8c9bf6295525e65e318adeff02520e2 + checksum: 740fa8f8e9a9d815cf160b1893370755 - path: glmark2/jellyfish.trace expectations: - device: gl-radeonsi-stoney - checksum: f68bf374e535ad4a43a08786b0d536d8 + checksum: 5bc7d5c250b7d568313c4afd064082f6 - path: glxgears/glxgears-2.trace expectations: - device: gl-radeonsi-stoney - checksum: eb9b3d497be567f02a6e039fa32f2b13 + checksum: ef3653f50d4853d3e9cb3244c799565a - path: 0ad/0ad.trace expectations: - device: gl-radeonsi-stoney - checksum: 8fb8cd54f1ff908952fe0b6dd9f28999 + checksum: 1a089d8584a9e68e7ab08eada954741b - path: pathfinder/demo.trace expectations: - device: gl-radeonsi-stoney @@ -33,7 +33,7 @@ traces: - path: gputest/furmark.trace expectations: - device: gl-radeonsi-stoney - checksum: 84c499203944cdc59e70450c324bb8df + checksum: 4ceea12000bb5995b915228d2d4b49c7 - path: gputest/pixmark-piano.trace expectations: - device: gl-radeonsi-stoney @@ -45,47 +45,47 @@ traces: - path: humus/Portals.trace expectations: - device: gl-radeonsi-stoney - checksum: fc7d00efe380cacbd4e9ef9b231aea2f + checksum: 5b96333495b794691e4ed071ae92ff19 - path: glmark2/buffer:update-fraction=0.5:update-dispersion=0.9:columns=200:update-method=map:interleave=false.trace expectations: - device: gl-radeonsi-stoney - checksum: 5af6e31cc78320cb3f9db483c7a426e0 + checksum: 5db05161041946e8971f39f12bbd847c - path: glmark2/buffer:update-fraction=0.5:update-dispersion=0.9:columns=200:update-method=map:interleave=true.trace expectations: - device: gl-radeonsi-stoney - checksum: 6e9dc5a7dc5a9cbb2b396bfce88a2084 + checksum: e2154c522fcdb4f43b31b31c17adda74 - path: glmark2/buffer:update-fraction=0.5:update-dispersion=0.9:columns=200:update-method=subdata:interleave=false.trace expectations: - device: gl-radeonsi-stoney - checksum: 35e384f833f37411f15bf8ef80ca1914 + checksum: 70298e48479147af2d848a5441fb5f47 - path: glmark2/bump:bump-render=height.trace expectations: - device: gl-radeonsi-stoney - checksum: 526cf3805b9b64bb8edea1b7d86b9cae + checksum: f5129b06e401a5fefa18a9895b18deec - path: glmark2/bump:bump-render=high-poly.trace expectations: - device: gl-radeonsi-stoney - checksum: e026d36eaa71ecd957b47c7e6a5a100b + checksum: 3fc1adf0caa289b3296a80c2c13834ca - path: glmark2/bump:bump-render=normals.trace expectations: - device: gl-radeonsi-stoney - checksum: 4508a1be8c33a63fbfa695b141edf48b + checksum: 596fd7a084d3a7a6b61b322593385f45 - path: glmark2/conditionals:vertex-steps=0:fragment-steps=0.trace expectations: - device: gl-radeonsi-stoney - checksum: d12ecac5894705295e4fa076d77a72ab + checksum: fb2eda378ace8ca8b81d73d20cbfbbf7 - path: glmark2/conditionals:vertex-steps=0:fragment-steps=5.trace expectations: - device: gl-radeonsi-stoney - checksum: 8999ff7eda7d7cf25440b96ab0efd4ee + checksum: b8575de0e043f540b12f13209054d000 - path: glmark2/conditionals:vertex-steps=5:fragment-steps=0.trace expectations: - device: gl-radeonsi-stoney - checksum: e65fdae9fe7bbd95c5cc0fb0c3eb7bf4 + checksum: f70625a1f9bd9d2c211e330032b86f85 - path: glmark2/desktop:windows=4:effect=shadow.trace expectations: - device: gl-radeonsi-stoney - checksum: 2aff87605464dd3f61aefd4e1dc0bffd + checksum: 384015de55daf7dd406c9463576018e9 - path: glmark2/effect2d:kernel=0,1,0;1,-4,1;0,1,0;.trace expectations: - device: gl-radeonsi-stoney @@ -97,87 +97,87 @@ traces: - path: glmark2/function:fragment-steps=5:fragment-complexity=low.trace expectations: - device: gl-radeonsi-stoney - checksum: 13149880306d2183703a5c327f4d750a + checksum: 9efd8bb5df15f9483a18a00f9650caa9 - path: glmark2/function:fragment-steps=5:fragment-complexity=medium.trace expectations: - device: gl-radeonsi-stoney - checksum: c6983ffb3a74e234f84e5d817f876f54 + checksum: 9bdd506c0404cb11a7148cb08b429d1b - path: glmark2/build:use-vbo=false.trace expectations: - device: gl-radeonsi-stoney - checksum: 203a0205580b2c39ed8dcbed57b18f3c + checksum: 506b1910317b04e5d32aacf2bd70bd0d - path: glmark2/build:use-vbo=true.trace expectations: - device: gl-radeonsi-stoney - checksum: 437034f264c469757683e51e3e25beca + checksum: 793dc29115ae442b279276adb89d0999 - path: glmark2/ideas:speed=10000.trace expectations: - device: gl-radeonsi-stoney - checksum: 381d973b00b46fcc15f72808eabb6237 + checksum: 1ae057093620f868aad846167f04c6e0 - path: glmark2/loop:vertex-steps=5:fragment-steps=5:fragment-loop=false.trace expectations: - device: gl-radeonsi-stoney - checksum: 5a32f7917c130581fae23e58b71fd740 + checksum: 6fb2f9bce414879e3751bb51d1a8d481 - path: glmark2/loop:vertex-steps=5:fragment-steps=5:fragment-uniform=false.trace expectations: - device: gl-radeonsi-stoney - checksum: 20586c936a7051ce63503df6f9785d01 + checksum: 27fabda45ca2a989c21b4ec386a2e8f6 - path: glmark2/loop:vertex-steps=5:fragment-steps=5:fragment-uniform=true.trace expectations: - device: gl-radeonsi-stoney - checksum: 255e412701afdc4a7b62654e93b92cc9 + checksum: 05ac8be6e2e0c03ea1caec85f037cddd - path: glmark2/pulsar:quads=5:texture=false:light=false.trace expectations: - device: gl-radeonsi-stoney - checksum: 42f913c6119a685da4450ea116060614 + checksum: 0b62b9c04e4c00f44eba64b366c47783 - path: glmark2/refract.trace expectations: - device: gl-radeonsi-stoney - checksum: 9d0a2d2fce0b80a265fbcee5107c9e82 + checksum: c711f3a07f6aa9e0f19c544c6d7c2000 - path: glmark2/shading:shading=blinn-phong-inf.trace expectations: - device: gl-radeonsi-stoney - checksum: 4a2cf8a13b248f470e58f785d0a9207d + checksum: 429c6bbdf99d573cc4eaaee3c0471257 - path: glmark2/shading:shading=cel.trace expectations: - device: gl-radeonsi-stoney - checksum: 8325ce4073135c03eec241087e51a584 + checksum: 330d9a8375970e42ba5ddc3142dc6477 - path: glmark2/shading:shading=gouraud.trace expectations: - device: gl-radeonsi-stoney - checksum: fbe5b7d038866f6cd4fc801b062e4ce5 + checksum: e22908309d41af8c9753c5c7cae73b29 - path: glmark2/shading:shading=phong.trace expectations: - device: gl-radeonsi-stoney - checksum: 65f9468a37d683b4c1f38d34f09a97db + checksum: 2ac9f1b6ba39f8924b374d18181edeeb - path: glmark2/shadow.trace expectations: - device: gl-radeonsi-stoney - checksum: abd705b0ae76cf6f19905bfea1d3db76 + checksum: 9215a1525dfe5b12999652b3a3ba05d8 - path: glmark2/terrain.trace expectations: - device: gl-radeonsi-stoney - checksum: 59690f1438a1e44fc655d16ce8bb348b + checksum: 80a1bba6ff969c9a82c68de0306f2b61 - path: glmark2/texture:texture-filter=linear.trace expectations: - device: gl-radeonsi-stoney - checksum: 54bf32b499f3ebfe0e727e5716e54b1a + checksum: 928479421abda4823a673393cd59ff81 - path: glmark2/texture:texture-filter=mipmap.trace expectations: - device: gl-radeonsi-stoney - checksum: 3a3abce164eef2be10f58604b22583f2 + checksum: cb94bca58ed8f41c5f6f6dda3fb15600 - path: glmark2/texture:texture-filter=nearest.trace expectations: - device: gl-radeonsi-stoney - checksum: 311c394eb4afd48bd8330d0e69470b87 + checksum: 63762536d93048c0dadb19b22381cb90 - path: godot/Material Testers.x86_64_2020.04.08_13.38_frame799.rdc expectations: - device: gl-radeonsi-stoney - checksum: 02f654ad77c0c1106e1b31e1c86c93bb + checksum: 0e7441a7f2c86c75eeac72269786e7a1 - path: gputest/gimark.trace expectations: - device: gl-radeonsi-stoney - checksum: 4442dbd44a9704c499da4817fffce306 + checksum: 3e021c1c5f2900e53c3375e0366eeda9 - path: gputest/pixmark-julia-fp32.trace expectations: - device: gl-radeonsi-stoney @@ -193,44 +193,44 @@ traces: - path: gputest/plot3d.trace expectations: - device: gl-radeonsi-stoney - checksum: 667078b0f51ac8e0469ef9a20326c616 + checksum: 2832d2190df232bcbde71a4b720303e1 - path: gputest/tessmark.trace expectations: - device: gl-radeonsi-stoney - checksum: cdcf984e81f2cda9ca7f56e3a4addaa7 + checksum: b4bc7998ff804bf25aac9f9609b8acbf - path: humus/AmbientAperture.trace expectations: - device: gl-radeonsi-stoney - checksum: 664ea58a62b27737b7d0ae9e86ab85c0 + checksum: 679dc88e5f0d3b3608e0490b4b39fbea - path: humus/CelShading.trace expectations: - device: gl-radeonsi-stoney - checksum: 7d30dbe3470873c327464ea7ebe6bcf0 + checksum: ebd3f460386b9461aab6adef04dc0547 - path: humus/DynamicBranching3.trace expectations: - device: gl-radeonsi-stoney - checksum: 5a5addfb1c7acc22104c0ecb29f45174 + checksum: 9f932808ccce10a2bf7568ddafe1a1cf - path: humus/HDR.trace expectations: - device: gl-radeonsi-stoney - checksum: b44ce4cb377321f6423a5a62a9083794 + checksum: fddf642f7a4e3946f1975e33cf773220 - path: humus/RaytracedShadows.trace expectations: - device: gl-radeonsi-stoney - checksum: 2e2e58e0b32329d6cf90ab0ec71108fd + checksum: 743ce9c218b87404cfe615ed7951d5b8 - path: humus/VolumetricFogging2.trace expectations: - device: gl-radeonsi-stoney - checksum: 1a9b3aa90d2c4a0d3937ecacca2da052 + checksum: e3eb8d6934c23cbef7133ba501821698 - path: supertuxkart/supertuxkart-antediluvian-abyss.rdc expectations: - device: gl-radeonsi-stoney - checksum: fd717f0214c2e5d08538d2de30bfe180 + checksum: 112f203971d0f1ae46bc8268683480a2 - path: supertuxkart/supertuxkart-menu.rdc expectations: - device: gl-radeonsi-stoney - checksum: bc851bb8808b311c2df9c36a6c289e6e + checksum: e17f3125683d8b2acac8bc0b4b8e1b44 - path: supertuxkart/supertuxkart-ravenbridge-mansion.rdc expectations: - device: gl-radeonsi-stoney - checksum: f2e730f7378af65abbf82cc30e4ba64d + checksum: 60f74020451e9beaf586b4551541b763 diff --git a/lib/mesa/src/gallium/drivers/radeonsi/si_state_viewport.c b/lib/mesa/src/gallium/drivers/radeonsi/si_state_viewport.c index 3c753c618..3a7df5d95 100644 --- a/lib/mesa/src/gallium/drivers/radeonsi/si_state_viewport.c +++ b/lib/mesa/src/gallium/drivers/radeonsi/si_state_viewport.c @@ -366,7 +366,7 @@ static void si_emit_guardband(struct si_context *ctx) S_028234_HW_SCREEN_OFFSET_Y(hw_screen_offset_y >> 4)); radeon_opt_set_context_reg( ctx, R_028BE4_PA_SU_VTX_CNTL, SI_TRACKED_PA_SU_VTX_CNTL, - S_028BE4_PIX_CENTER(rs->half_pixel_center) | + S_028BE4_PIX_CENTER(rs->half_pixel_center) | S_028BE4_ROUND_MODE(V_028BE4_X_ROUND_TO_EVEN) | S_028BE4_QUANT_MODE(V_028BE4_X_16_8_FIXED_POINT_1_256TH + vp_as_scissor.quant_mode)); radeon_end_update_context_roll(ctx); } diff --git a/lib/mesa/src/gallium/drivers/zink/zink_compiler.c b/lib/mesa/src/gallium/drivers/zink/zink_compiler.c index d34c7a47a..bbb7bde24 100644 --- a/lib/mesa/src/gallium/drivers/zink/zink_compiler.c +++ b/lib/mesa/src/gallium/drivers/zink/zink_compiler.c @@ -379,7 +379,7 @@ zink_screen_init_compiler(struct zink_screen *screen) .lower_unpack_32_2x16_split = true, .lower_vector_cmp = true, .lower_int64_options = 0, - .lower_doubles_options = ~nir_lower_fp64_full_software, + .lower_doubles_options = 0, .lower_uniforms_to_ubo = true, .has_fsub = true, .has_isub = true, @@ -397,6 +397,21 @@ zink_screen_init_compiler(struct zink_screen *screen) screen->nir_options.lower_flrp64 = true; screen->nir_options.lower_ffma64 = true; } + + /* + The OpFRem and OpFMod instructions use cheap approximations of remainder, + and the error can be large due to the discontinuity in trunc() and floor(). + This can produce mathematically unexpected results in some cases, such as + FMod(x,x) computing x rather than 0, and can also cause the result to have + a different sign than the infinitely precise result. + + -Table 84. Precision of core SPIR-V Instructions + * for drivers that are known to have imprecise fmod for doubles, lower dmod + */ + if (screen->info.driver_props.driverID == VK_DRIVER_ID_MESA_RADV || + screen->info.driver_props.driverID == VK_DRIVER_ID_AMD_OPEN_SOURCE || + screen->info.driver_props.driverID == VK_DRIVER_ID_AMD_PROPRIETARY) + screen->nir_options.lower_doubles_options = nir_lower_dmod; } const void * diff --git a/lib/mesa/src/gallium/drivers/zink/zink_context.c b/lib/mesa/src/gallium/drivers/zink/zink_context.c index 2babcf3b2..e29d2c810 100644 --- a/lib/mesa/src/gallium/drivers/zink/zink_context.c +++ b/lib/mesa/src/gallium/drivers/zink/zink_context.c @@ -745,10 +745,24 @@ zink_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *pres, ivci.subresourceRange.aspectMask = sampler_aspect_from_format(state->format); /* samplers for stencil aspects of packed formats need to always use stencil swizzle */ if (ivci.subresourceRange.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { - ivci.components.r = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_r)); - ivci.components.g = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_g)); - ivci.components.b = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_b)); - ivci.components.a = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_a)); + if (sampler_view->base.swizzle_r == PIPE_SWIZZLE_0 && + sampler_view->base.swizzle_g == PIPE_SWIZZLE_0 && + sampler_view->base.swizzle_b == PIPE_SWIZZLE_0 && + sampler_view->base.swizzle_a == PIPE_SWIZZLE_X) { + /* + * When the state tracker asks for 000x swizzles, this is depth mode GL_ALPHA, + * however with the single dref fetch this will fail, so just spam all the channels. + */ + ivci.components.r = VK_COMPONENT_SWIZZLE_R; + ivci.components.g = VK_COMPONENT_SWIZZLE_R; + ivci.components.b = VK_COMPONENT_SWIZZLE_R; + ivci.components.a = VK_COMPONENT_SWIZZLE_R; + } else { + ivci.components.r = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_r)); + ivci.components.g = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_g)); + ivci.components.b = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_b)); + ivci.components.a = zink_component_mapping(clamp_zs_swizzle(sampler_view->base.swizzle_a)); + } } else { /* if we have e.g., R8G8B8X8, then we have to ignore alpha since we're just emulating * these formats diff --git a/lib/mesa/src/gallium/drivers/zink/zink_descriptors.c b/lib/mesa/src/gallium/drivers/zink/zink_descriptors.c index 6fd529009..0ec3a73ca 100644 --- a/lib/mesa/src/gallium/drivers/zink/zink_descriptors.c +++ b/lib/mesa/src/gallium/drivers/zink/zink_descriptors.c @@ -696,13 +696,13 @@ allocate_desc_set(struct zink_context *ctx, struct zink_program *pg, enum zink_d #endif switch (type) { case ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW: - zds->sampler_states = (struct zink_sampler_state**)&samplers[i * pool->key.layout->num_descriptors]; + zds->sampler_states = (struct zink_sampler_state**)&samplers[i * num_resources]; FALLTHROUGH; case ZINK_DESCRIPTOR_TYPE_IMAGE: - zds->surfaces = &surfaces[i * pool->key.layout->num_descriptors]; + zds->surfaces = &surfaces[i * num_resources]; break; default: - zds->res_objs = (struct zink_resource_object**)&res_objs[i * pool->key.layout->num_descriptors]; + zds->res_objs = (struct zink_resource_object**)&res_objs[i * num_resources]; break; } zds->desc_set = desc_set[i]; @@ -790,20 +790,28 @@ zink_descriptor_set_get(struct zink_context *ctx, simple_mtx_lock(&pool->mtx); if (last_set && last_set->hash == hash && desc_state_equal(&last_set->key, &key)) { + bool was_recycled = false; zds = last_set; *cache_hit = !zds->invalid; if (zds->recycled) { struct hash_entry *he = _mesa_hash_table_search_pre_hashed(pool->free_desc_sets, hash, &key); - if (he) + if (he) { + was_recycled = true; _mesa_hash_table_remove(pool->free_desc_sets, he); + } zds->recycled = false; } if (zds->invalid) { if (zink_batch_usage_exists(zds->batch_uses)) punt_invalid_set(zds, NULL); - else + else { + if (was_recycled) { + descriptor_set_invalidate(zds); + goto out; + } /* this set is guaranteed to be in pool->alloc_desc_sets */ goto skip_hash_tables; + } zds = NULL; } if (zds) @@ -828,6 +836,8 @@ zink_descriptor_set_get(struct zink_context *ctx, zds = (void*)he->data; *cache_hit = !zds->invalid; if (recycled) { + if (zds->invalid) + descriptor_set_invalidate(zds); /* need to migrate this entry back to the in-use hash */ _mesa_hash_table_remove(pool->free_desc_sets, he); goto out; @@ -1419,6 +1429,7 @@ zink_descriptors_update(struct zink_context *ctx, bool is_compute) if (pg->dd->push_usage) { if (pg->dd->fbfetch) { /* fbfetch is not cacheable: grab a lazy set because it's faster */ + cache_hit = false; desc_set = zink_descriptors_alloc_lazy_push(ctx); } else { zds = zink_descriptor_set_get(ctx, ZINK_DESCRIPTOR_TYPES, is_compute, &cache_hit); diff --git a/lib/mesa/src/gallium/drivers/zink/zink_draw.cpp b/lib/mesa/src/gallium/drivers/zink/zink_draw.cpp index e97713e99..e7c6af72a 100644 --- a/lib/mesa/src/gallium/drivers/zink/zink_draw.cpp +++ b/lib/mesa/src/gallium/drivers/zink/zink_draw.cpp @@ -193,6 +193,8 @@ update_gfx_program(struct zink_context *ctx) prog = (struct zink_gfx_program*)entry->data; u_foreach_bit(stage, prog->stages_present & ~ctx->dirty_shader_stages) ctx->gfx_pipeline_state.modules[stage] = prog->modules[stage]->shader; + /* ensure variants are always updated if keys have changed since last use */ + ctx->dirty_shader_stages |= prog->stages_present; } else { ctx->dirty_shader_stages |= bits; prog = zink_create_gfx_program(ctx, ctx->gfx_stages, ctx->gfx_pipeline_state.vertices_per_patch + 1); diff --git a/lib/mesa/src/gallium/drivers/zink/zink_program.c b/lib/mesa/src/gallium/drivers/zink/zink_program.c index 6e69c0cb4..a6c697979 100644 --- a/lib/mesa/src/gallium/drivers/zink/zink_program.c +++ b/lib/mesa/src/gallium/drivers/zink/zink_program.c @@ -557,6 +557,7 @@ void zink_destroy_gfx_program(struct zink_screen *screen, struct zink_gfx_program *prog) { + util_queue_fence_wait(&prog->base.cache_fence); if (prog->base.layout) VKSCR(DestroyPipelineLayout)(screen->dev, prog->base.layout, NULL); @@ -601,6 +602,7 @@ void zink_destroy_compute_program(struct zink_screen *screen, struct zink_compute_program *comp) { + util_queue_fence_wait(&comp->base.cache_fence); if (comp->base.layout) VKSCR(DestroyPipelineLayout)(screen->dev, comp->base.layout, NULL); diff --git a/lib/mesa/src/gallium/drivers/zink/zink_screen.c b/lib/mesa/src/gallium/drivers/zink/zink_screen.c index 042c63fd3..9530202c0 100644 --- a/lib/mesa/src/gallium/drivers/zink/zink_screen.c +++ b/lib/mesa/src/gallium/drivers/zink/zink_screen.c @@ -184,7 +184,7 @@ zink_screen_update_pipeline_cache(struct zink_screen *screen, struct zink_progra if (!screen->disk_cache) return; - util_queue_add_job(&screen->cache_put_thread, pg, NULL, cache_put_job, NULL, 0); + util_queue_add_job(&screen->cache_put_thread, pg, &pg->cache_fence, cache_put_job, NULL, 0); } static void diff --git a/lib/mesa/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c b/lib/mesa/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c index cb2d58226..152283ae5 100644 --- a/lib/mesa/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c +++ b/lib/mesa/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c @@ -265,6 +265,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_TrimCommandPool( &pool->free_cmd_buffers, pool_link) { lvp_cmd_buffer_destroy(cmd_buffer); } + list_inithead(&pool->free_cmd_buffers); } VKAPI_ATTR void VKAPI_CALL lvp_CmdDrawMultiEXT( diff --git a/lib/mesa/src/gallium/frontends/lavapipe/lvp_execute.c b/lib/mesa/src/gallium/frontends/lavapipe/lvp_execute.c index 30d7bf3c0..1ca094ad8 100644 --- a/lib/mesa/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/lib/mesa/src/gallium/frontends/lavapipe/lvp_execute.c @@ -573,40 +573,6 @@ static void handle_graphics_pipeline(struct vk_cmd_queue_entry *cmd, state->rs_dirty = true; } - state->disable_multisample = pipeline->disable_multisample; - if (pipeline->graphics_create_info.pMultisampleState) { - const VkPipelineMultisampleStateCreateInfo *ms = pipeline->graphics_create_info.pMultisampleState; - state->rs_state.multisample = ms->rasterizationSamples > 1; - state->sample_mask = ms->pSampleMask ? ms->pSampleMask[0] : 0xffffffff; - state->blend_state.alpha_to_coverage = ms->alphaToCoverageEnable; - state->blend_state.alpha_to_one = ms->alphaToOneEnable; - state->blend_dirty = true; - state->rs_dirty = true; - state->min_samples = 1; - state->sample_mask_dirty = true; - fb_samples = ms->rasterizationSamples; - if (ms->sampleShadingEnable) { - state->min_samples = ceil(ms->rasterizationSamples * ms->minSampleShading); - if (state->min_samples > 1) - state->min_samples = ms->rasterizationSamples; - if (state->min_samples < 1) - state->min_samples = 1; - } - if (pipeline->force_min_sample) - state->min_samples = ms->rasterizationSamples; - state->min_samples_dirty = true; - } else { - state->rs_state.multisample = false; - state->sample_mask_dirty = state->sample_mask != 0xffffffff; - state->sample_mask = 0xffffffff; - state->min_samples_dirty = state->min_samples; - state->min_samples = 0; - state->blend_dirty |= state->blend_state.alpha_to_coverage || state->blend_state.alpha_to_one; - state->blend_state.alpha_to_coverage = false; - state->blend_state.alpha_to_one = false; - state->rs_dirty = true; - } - if (pipeline->graphics_create_info.pDepthStencilState) { const VkPipelineDepthStencilStateCreateInfo *dsa = pipeline->graphics_create_info.pDepthStencilState; @@ -710,6 +676,40 @@ static void handle_graphics_pipeline(struct vk_cmd_queue_entry *cmd, state->blend_dirty = true; } + state->disable_multisample = pipeline->disable_multisample; + if (pipeline->graphics_create_info.pMultisampleState) { + const VkPipelineMultisampleStateCreateInfo *ms = pipeline->graphics_create_info.pMultisampleState; + state->rs_state.multisample = ms->rasterizationSamples > 1; + state->sample_mask = ms->pSampleMask ? ms->pSampleMask[0] : 0xffffffff; + state->blend_state.alpha_to_coverage = ms->alphaToCoverageEnable; + state->blend_state.alpha_to_one = ms->alphaToOneEnable; + state->blend_dirty = true; + state->rs_dirty = true; + state->min_samples = 1; + state->sample_mask_dirty = true; + fb_samples = ms->rasterizationSamples; + if (ms->sampleShadingEnable) { + state->min_samples = ceil(ms->rasterizationSamples * ms->minSampleShading); + if (state->min_samples > 1) + state->min_samples = ms->rasterizationSamples; + if (state->min_samples < 1) + state->min_samples = 1; + } + if (pipeline->force_min_sample) + state->min_samples = ms->rasterizationSamples; + state->min_samples_dirty = true; + } else { + state->rs_state.multisample = false; + state->sample_mask_dirty = state->sample_mask != 0xffffffff; + state->sample_mask = 0xffffffff; + state->min_samples_dirty = state->min_samples; + state->min_samples = 0; + state->blend_dirty |= state->blend_state.alpha_to_coverage || state->blend_state.alpha_to_one; + state->blend_state.alpha_to_coverage = false; + state->blend_state.alpha_to_one = false; + state->rs_dirty = true; + } + if (!dynamic_states[conv_dynamic_state_idx(VK_DYNAMIC_STATE_VERTEX_INPUT_EXT)]) { const VkPipelineVertexInputStateCreateInfo *vi = pipeline->graphics_create_info.pVertexInputState; int i; @@ -1011,8 +1011,6 @@ static void fill_sampler_view_stage(struct rendering_state *state, */ if (iv->subresourceRange.aspectMask == VK_IMAGE_ASPECT_DEPTH_BIT || iv->subresourceRange.aspectMask == VK_IMAGE_ASPECT_STENCIL_BIT) { - if (templ.swizzle_a == PIPE_SWIZZLE_X) - templ.swizzle_r = PIPE_SWIZZLE_X; fix_depth_swizzle(templ.swizzle_r); fix_depth_swizzle(templ.swizzle_g); fix_depth_swizzle(templ.swizzle_b); diff --git a/lib/mesa/src/gallium/frontends/lavapipe/lvp_formats.c b/lib/mesa/src/gallium/frontends/lavapipe/lvp_formats.c index b30853a9d..6831a6587 100644 --- a/lib/mesa/src/gallium/frontends/lavapipe/lvp_formats.c +++ b/lib/mesa/src/gallium/frontends/lavapipe/lvp_formats.c @@ -230,6 +230,9 @@ static VkResult lvp_get_image_format_properties(struct lvp_physical_device *phys break; } + if (info->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT) + goto skip_checks; + if (info->usage & VK_IMAGE_USAGE_SAMPLED_BIT) { if (!(format_feature_flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) { goto unsupported; @@ -273,6 +276,7 @@ static VkResult lvp_get_image_format_properties(struct lvp_physical_device *phys } } +skip_checks: *pImageFormatProperties = (VkImageFormatProperties) { .maxExtent = maxExtent, .maxMipLevels = maxMipLevels, diff --git a/lib/mesa/src/gallium/frontends/lavapipe/lvp_pipeline.c b/lib/mesa/src/gallium/frontends/lavapipe/lvp_pipeline.c index 80551d4c4..6a4ed65a7 100644 --- a/lib/mesa/src/gallium/frontends/lavapipe/lvp_pipeline.c +++ b/lib/mesa/src/gallium/frontends/lavapipe/lvp_pipeline.c @@ -602,6 +602,8 @@ lvp_shader_compile_to_ir(struct lvp_pipeline *pipeline, NIR_PASS(progress, nir, nir_opt_deref); NIR_PASS(progress, nir, nir_lower_vars_to_ssa); + NIR_PASS(progress, nir, nir_opt_copy_prop_vars); + NIR_PASS(progress, nir, nir_copy_prop); NIR_PASS(progress, nir, nir_opt_dce); NIR_PASS(progress, nir, nir_opt_peephole_select, 8, true, true); diff --git a/lib/mesa/src/loader/meson.build b/lib/mesa/src/loader/meson.build index 927f4af11..15818c070 100644 --- a/lib/mesa/src/loader/meson.build +++ b/lib/mesa/src/loader/meson.build @@ -41,11 +41,19 @@ loader_c_args = [ '-DDEFAULT_DRIVER_DIR="@0@"'.format(dri_search_path), ] -if get_option('prefer-iris') +_prefer_iris = get_option('prefer-iris') +if _prefer_iris == 'auto' + _prefer_iris = amber ? 'false' : 'true' +endif +if _prefer_iris == 'true' loader_c_args += ['-DPREFER_IRIS'] endif -if get_option('prefer-crocus') +_prefer_crocus = get_option('prefer-crocus') +if _prefer_crocus == 'auto' + _prefer_crocus = 'false' +endif +if _prefer_crocus == 'true' loader_c_args += ['-DPREFER_CROCUS'] endif diff --git a/lib/mesa/src/mesa/drivers/dri/meson.build b/lib/mesa/src/mesa/drivers/dri/meson.build index 239ca962c..b4d22a61c 100644 --- a/lib/mesa/src/mesa/drivers/dri/meson.build +++ b/lib/mesa/src/mesa/drivers/dri/meson.build @@ -51,7 +51,7 @@ endif if _dri_drivers != [] libmesa_dri_drivers = shared_library( - 'mesa_dri_drivers', + '@0@_dri_drivers'.format(glvnd_vendor_name), [], link_whole : _dri_drivers, link_with : [ diff --git a/lib/mesa/src/panfrost/bifrost/bifrost_compile.c b/lib/mesa/src/panfrost/bifrost/bifrost_compile.c index fabdb2bd6..35c0b1853 100644 --- a/lib/mesa/src/panfrost/bifrost/bifrost_compile.c +++ b/lib/mesa/src/panfrost/bifrost/bifrost_compile.c @@ -3834,7 +3834,7 @@ bifrost_compile_shader_nir(nir_shader *nir, /* TODO: pack flat */ } - info->ubo_mask = ctx->ubo_mask & BITSET_MASK(ctx->nir->info.num_ubos); + info->ubo_mask = ctx->ubo_mask & ((1 << ctx->nir->info.num_ubos) - 1); if (bifrost_debug & BIFROST_DBG_SHADERS && !skip_internal) { disassemble_bifrost(stdout, binary->data, binary->size, diff --git a/lib/mesa/src/panfrost/bifrost/gen_disasm.py b/lib/mesa/src/panfrost/bifrost/gen_disasm.py index 01ab6290c..505c61cc0 100644 --- a/lib/mesa/src/panfrost/bifrost/gen_disasm.py +++ b/lib/mesa/src/panfrost/bifrost/gen_disasm.py @@ -238,7 +238,7 @@ def build_lut(mnemonic, desc, test): key_set = find_context_keys(desc, test) ordered = 'ordering' in key_set key_set.discard('ordering') - keys = list(key_set) + keys = sorted(list(key_set)) # Evaluate the deriveds for every possible state, forming a (state -> deriveds) map testf = compile_derived(test, keys) diff --git a/lib/mesa/src/panfrost/ci/panfrost-g52-fails.txt b/lib/mesa/src/panfrost/ci/panfrost-g52-fails.txt index 7518f80fe..0d507eda7 100644 --- a/lib/mesa/src/panfrost/ci/panfrost-g52-fails.txt +++ b/lib/mesa/src/panfrost/ci/panfrost-g52-fails.txt @@ -87,7 +87,6 @@ spec@arb_depth_texture@texwrap formats bordercolor-swizzled@GL_DEPTH_COMPONENT24 spec@arb_depth_texture@texwrap formats bordercolor-swizzled@GL_DEPTH_COMPONENT32- swizzled- border color only,Fail spec@arb_direct_state_access@gettextureimage-formats,Crash spec@arb_direct_state_access@gettextureimage-formats init-by-rendering,Fail -spec@arb_direct_state_access@texture-buffer,Fail spec@arb_draw_buffers@fbo-mrt-new-bind,Crash spec@arb_es2_compatibility@fbo-blending-formats,Fail spec@arb_es2_compatibility@fbo-blending-formats@GL_RGB565,Fail @@ -95,8 +94,6 @@ spec@arb_es2_compatibility@texwrap formats bordercolor,Fail spec@arb_es2_compatibility@texwrap formats bordercolor@GL_RGB565- border color only,Fail spec@arb_es2_compatibility@texwrap formats bordercolor-swizzled,Fail spec@arb_es2_compatibility@texwrap formats bordercolor-swizzled@GL_RGB565- swizzled- border color only,Fail -spec@arb_fragment_program@fp-fragment-position,Crash -spec@arb_fragment_program@sparse-samplers,Crash spec@arb_framebuffer_object@arb_framebuffer_object-depth-stencil-blit depth gl_depth32f_stencil8,Fail spec@arb_framebuffer_object@arb_framebuffer_object-depth-stencil-blit depth_stencil gl_depth32f_stencil8,Fail spec@arb_framebuffer_object@arb_framebuffer_object-depth-stencil-blit stencil gl_depth32f_stencil8,Fail @@ -110,7 +107,6 @@ spec@arb_pixel_buffer_object@texsubimage array pbo,Fail spec@arb_pixel_buffer_object@texsubimage cube_map_array pbo,Fail spec@arb_point_sprite@arb_point_sprite-checkerboard,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail -spec@arb_provoking_vertex@arb-provoking-vertex-render,Fail spec@arb_sample_shading@samplemask 2@0.250000 mask_in_one,Fail spec@arb_sample_shading@samplemask 2@0.500000 mask_in_one,Fail spec@arb_sample_shading@samplemask 2@1.000000 mask_in_one,Fail @@ -135,7 +131,6 @@ spec@arb_sample_shading@samplemask 4 all@sample mask_in_one,Fail spec@arb_sample_shading@samplemask 4,Fail spec@arb_sample_shading@samplemask 4@noms mask_in_one,Fail spec@arb_sample_shading@samplemask 4@sample mask_in_one,Fail -spec@arb_shader_atomic_counters@respecify-buffer,Fail spec@arb_shader_draw_parameters@drawid-indirect-baseinstance,Fail spec@arb_shader_draw_parameters@drawid-indirect-basevertex,Fail spec@arb_shader_draw_parameters@drawid-indirect,Fail @@ -147,11 +142,9 @@ spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drect spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drect_projvec4,Crash spec@arb_shader_texture_lod@execution@tex-miplevel-selection *projgradarb 2drectshadow,Crash spec@arb_shading_language_420pack@active sampler conflict,Crash -spec@arb_texture_buffer_object@data-sync,Fail spec@arb_texture_buffer_object@formats (fs- arb),Crash spec@arb_texture_buffer_object@formats (vs- arb),Crash spec@arb_texture_buffer_object@render-no-bo,Crash -spec@arb_texture_buffer_object@subdata-sync,Fail spec@arb_texture_compression@texwrap formats bordercolor,Fail spec@arb_texture_compression@texwrap formats bordercolor@GL_COMPRESSED_ALPHA- border color only,Fail spec@arb_texture_compression@texwrap formats bordercolor@GL_COMPRESSED_LUMINANCE_ALPHA- border color only,Fail @@ -391,9 +384,7 @@ spec@arb_texture_rg@texwrap formats-float bordercolor-swizzled@GL_RG32F- swizzle spec@arb_texture_view@sampling-2d-array-as-cubemap-array,Crash spec@arb_texture_view@sampling-2d-array-as-cubemap,Crash spec@arb_transform_feedback_instanced@draw-auto instanced,Fail -spec@arb_uniform_buffer_object@rendering-dsa,Fail spec@arb_uniform_buffer_object@rendering-dsa-offset,Fail -spec@arb_uniform_buffer_object@rendering,Fail spec@arb_uniform_buffer_object@rendering-offset,Fail spec@arb_vertex_program@clip-plane-transformation arb,Fail spec@egl 1.4@egl-copy-buffers,Crash @@ -923,223 +914,6 @@ spec@!opengl 1.0@gl-1.0-no-op-paths,Fail spec@!opengl 1.0@gl-1.0-spot-light,Fail spec@!opengl 1.0@gl-1.0-user-clip-all-planes,Fail spec@!opengl 1.0@rasterpos,Crash -spec@!opengl 1.1@clipflat,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glBegin/End(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawArrays(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUADS)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CCW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_FILL)- quadrant: right top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: center top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: left top PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right bottom PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right middle PV: FIRST,Fail -spec@!opengl 1.1@clipflat@glDrawElements(GL_QUAD_STRIP)- glFrontFace(GL_CW)- glPolygonMode(GL_LINE)- quadrant: right top PV: FIRST,Fail spec@!opengl 1.1@getteximage-formats,Crash spec@!opengl 1.1@linestipple@Factor 2x,Fail spec@!opengl 1.1@linestipple@Factor 3x,Fail diff --git a/lib/mesa/src/panfrost/midgard/midgard_compile.c b/lib/mesa/src/panfrost/midgard/midgard_compile.c index 69e60f00f..cb007c00c 100644 --- a/lib/mesa/src/panfrost/midgard/midgard_compile.c +++ b/lib/mesa/src/panfrost/midgard/midgard_compile.c @@ -3231,7 +3231,7 @@ midgard_compile_shader_nir(nir_shader *nir, /* Report the very first tag executed */ info->midgard.first_tag = midgard_get_first_tag_from_block(ctx, 0); - info->ubo_mask = ctx->ubo_mask & BITSET_MASK(ctx->nir->info.num_ubos); + info->ubo_mask = ctx->ubo_mask & ((1 << ctx->nir->info.num_ubos) - 1); if ((midgard_debug & MIDGARD_DBG_SHADERS) && ((midgard_debug & MIDGARD_DBG_INTERNAL) || !nir->info.internal)) { diff --git a/lib/mesa/src/util/00-mesa-defaults.conf b/lib/mesa/src/util/00-mesa-defaults.conf index f4818f782..ae435d40b 100644 --- a/lib/mesa/src/util/00-mesa-defaults.conf +++ b/lib/mesa/src/util/00-mesa-defaults.conf @@ -798,96 +798,6 @@ TODO: document the other workarounds. <option name="vs_position_always_invariant" value="true" /> </application> </device> - <device driver="radv"> - <!-- Engine workarounds --> - <engine engine_name_match="vkd3d"> - <option name="radv_zero_vram" value="true" /> - </engine> - - <engine engine_name_match="Quantic Dream Engine"> - <option name="radv_zero_vram" value="true" /> - <option name="radv_lower_discard_to_demote" value="true" /> - <option name="radv_disable_tc_compat_htile_general" value="true" /> - </engine> - - <!-- Game workarounds --> - <application name="Shadow Of The Tomb Raider (Native)" application_name_match="ShadowOfTheTomb"> - <option name="radv_report_llvm9_version_string" value="true" /> - <option name="radv_invariant_geom" value="true" /> - </application> - - <application name="Shadow Of The Tomb Raider (DX11/DX12)" application_name_match="SOTTR.exe"> - <option name="radv_invariant_geom" value="true" /> - </application> - - <application name="RAGE 2" executable="RAGE2.exe"> - <option name="radv_enable_mrt_output_nan_fixup" value="true" /> - </application> - - <application name="Path of Exile (64-bit, Steam)" executable="PathOfExile_x64Steam.exe"> - <option name="radv_no_dynamic_bounds" value="true" /> - <option name="radv_absolute_depth_bias" value="true" /> - </application> - <application name="Path of Exile (32-bit, Steam)" executable="PathOfExileSteam.exe"> - <option name="radv_no_dynamic_bounds" value="true" /> - <option name="radv_absolute_depth_bias" value="true" /> - </application> - <application name="Path of Exile (64-bit)" executable="PathOfExile_x64.exe"> - <option name="radv_no_dynamic_bounds" value="true" /> - <option name="radv_absolute_depth_bias" value="true" /> - </application> - <application name="Path of Exile (32-bit)" executable="PathOfExile.exe"> - <option name="radv_no_dynamic_bounds" value="true" /> - <option name="radv_absolute_depth_bias" value="true" /> - </application> - - <application name="The Surge 2" application_name_match="Fledge"> - <option name="radv_disable_shrink_image_store" value="true" /> - <option name="radv_zero_vram" value="true" /> - </application> - - <application name="World War Z (and World War Z: Aftermath)" application_name_match="WWZ|wwz"> - <option name="radv_override_uniform_offset_alignment" value="16" /> - <option name="radv_disable_shrink_image_store" value="true" /> - <option name="radv_invariant_geom" value="true" /> - </application> - - <application name="DOOM VFR" application_name_match="DOOM_VFR"> - <option name="radv_no_dynamic_bounds" value="true" /> - </application> - - <application name="DOOM Eternal" application_name_match="DOOMEternal"> - <option name="radv_zero_vram" value="true" /> - </application> - - <application name="No Man's Sky" application_name_match="No Man's Sky"> - <option name="radv_lower_discard_to_demote" value="true" /> - </application> - - <application name="Monster Hunter World" application_name_match="MonsterHunterWorld.exe"> - <option name="radv_invariant_geom" value="true" /> - </application> - - <application name="DOOM (2016)" application_name_match="DOOM$"> - <option name="radv_disable_dcc" value="true" /> - </application> - - <application name="Wolfenstein II" application_name_match="Wolfenstein II The New Colossus"> - <option name="radv_disable_dcc" value="true" /> - </application> - - <application name="RDR2" application_name_match="Red Dead Redemption 2"> - <option name="radv_report_apu_as_dgpu" value="true" /> - </application> - - <application name="Resident Evil Village" application_name_match="re8.exe"> - <option name="radv_invariant_geom" value="true" /> - </application> - - <application name="F1 2021" application_name_match="F1_2021_dx12.exe"> - <option name="radv_disable_htile_layers" value="true" /> - </application> - </device> <!-- The android game hall of shame: diff --git a/lib/mesa/src/util/bitset.h b/lib/mesa/src/util/bitset.h index 279ad553e..d8ec1af67 100644 --- a/lib/mesa/src/util/bitset.h +++ b/lib/mesa/src/util/bitset.h @@ -208,7 +208,7 @@ __bitset_shl(BITSET_WORD *x, unsigned amount, unsigned n) static inline void __bitset_set_range(BITSET_WORD *r, unsigned start, unsigned end) { - const unsigned size = end - start; + const unsigned size = end - start + 1; const unsigned start_mod = start % BITSET_WORDBITS; if (start_mod + size <= BITSET_WORDBITS) { diff --git a/lib/mesa/src/util/slab.h b/lib/mesa/src/util/slab.h index 969b0ec5c..f6dcbe5c9 100644 --- a/lib/mesa/src/util/slab.h +++ b/lib/mesa/src/util/slab.h @@ -55,6 +55,7 @@ struct slab_parent_pool { simple_mtx_t mutex; unsigned element_size; unsigned num_elements; + unsigned item_size; }; struct slab_child_pool { @@ -81,6 +82,7 @@ void slab_create_child(struct slab_child_pool *pool, struct slab_parent_pool *parent); void slab_destroy_child(struct slab_child_pool *pool); void *slab_alloc(struct slab_child_pool *pool); +void *slab_zalloc(struct slab_child_pool *pool); void slab_free(struct slab_child_pool *pool, void *ptr); struct slab_mempool { |