summaryrefslogtreecommitdiff
path: root/lib/mesa/src
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mesa/src')
-rw-r--r--lib/mesa/src/amd/common/ac_nir_lower_ngg.c48
-rw-r--r--lib/mesa/src/amd/vulkan/00-radv-defaults.conf148
-rw-r--r--lib/mesa/src/amd/vulkan/meson.build4
-rw-r--r--lib/mesa/src/amd/vulkan/radv_shader.h1
-rw-r--r--lib/mesa/src/egl/main/egldefines.h4
-rw-r--r--lib/mesa/src/egl/meson.build2
-rw-r--r--lib/mesa/src/freedreno/ci/freedreno-a630-fails.txt2
-rw-r--r--lib/mesa/src/freedreno/ir3/ir3_compiler_nir.c21
-rw-r--r--lib/mesa/src/freedreno/ir3/ir3_ra.c14
-rw-r--r--lib/mesa/src/freedreno/vulkan/tu_cmd_buffer.c5
-rw-r--r--lib/mesa/src/freedreno/vulkan/tu_pass.c4
-rw-r--r--lib/mesa/src/freedreno/vulkan/tu_pipeline.c5
-rw-r--r--lib/mesa/src/freedreno/vulkan/tu_private.h6
-rw-r--r--lib/mesa/src/gallium/auxiliary/driver_trace/tr_context.c2
-rw-r--r--lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c24
-rw-r--r--lib/mesa/src/gallium/drivers/crocus/crocus_state.c4
-rw-r--r--lib/mesa/src/gallium/drivers/iris/iris_program.c3
-rw-r--r--lib/mesa/src/gallium/drivers/iris/iris_state.c7
-rw-r--r--lib/mesa/src/gallium/drivers/llvmpipe/lp_state_surface.c6
-rw-r--r--lib/mesa/src/gallium/drivers/panfrost/pan_context.c35
-rw-r--r--lib/mesa/src/gallium/drivers/panfrost/pan_resource.c39
-rw-r--r--lib/mesa/src/gallium/drivers/panfrost/pan_screen.c1
-rw-r--r--lib/mesa/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv4
-rw-r--r--lib/mesa/src/gallium/drivers/radeonsi/ci/radeonsi-stoney-fails.txt4
-rw-r--r--lib/mesa/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv4
-rw-r--r--lib/mesa/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv4
-rw-r--r--lib/mesa/src/gallium/drivers/radeonsi/ci/traces-radeonsi.yml96
-rw-r--r--lib/mesa/src/gallium/drivers/radeonsi/si_state_viewport.c2
-rw-r--r--lib/mesa/src/gallium/drivers/zink/zink_compiler.c17
-rw-r--r--lib/mesa/src/gallium/drivers/zink/zink_context.c22
-rw-r--r--lib/mesa/src/gallium/drivers/zink/zink_descriptors.c21
-rw-r--r--lib/mesa/src/gallium/drivers/zink/zink_draw.cpp2
-rw-r--r--lib/mesa/src/gallium/drivers/zink/zink_program.c2
-rw-r--r--lib/mesa/src/gallium/drivers/zink/zink_screen.c2
-rw-r--r--lib/mesa/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c1
-rw-r--r--lib/mesa/src/gallium/frontends/lavapipe/lvp_execute.c70
-rw-r--r--lib/mesa/src/gallium/frontends/lavapipe/lvp_formats.c4
-rw-r--r--lib/mesa/src/gallium/frontends/lavapipe/lvp_pipeline.c2
-rw-r--r--lib/mesa/src/loader/meson.build12
-rw-r--r--lib/mesa/src/mesa/drivers/dri/meson.build2
-rw-r--r--lib/mesa/src/panfrost/bifrost/bifrost_compile.c2
-rw-r--r--lib/mesa/src/panfrost/bifrost/gen_disasm.py2
-rw-r--r--lib/mesa/src/panfrost/ci/panfrost-g52-fails.txt226
-rw-r--r--lib/mesa/src/panfrost/midgard/midgard_compile.c2
-rw-r--r--lib/mesa/src/util/00-mesa-defaults.conf90
-rw-r--r--lib/mesa/src/util/bitset.h2
-rw-r--r--lib/mesa/src/util/slab.h2
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 {