Skip to content
Commits on Source (43)
mesa (18.2.2-1) UNRELEASED; urgency=medium
mesa (18.2.3-1) UNRELEASED; urgency=medium
* New upstream release.
- vulkan: Disable randr lease for libxcb < 1.13 (Closes: #908827,
......@@ -7,7 +7,7 @@ mesa (18.2.2-1) UNRELEASED; urgency=medium
* Bump libdrm-dev dependency to 2.4.92.
* Enable building etnaviv and imx on arm64 (Closes: #907136).
-- Andreas Boll <aboll@debian.org> Wed, 10 Oct 2018 20:06:00 +0200
-- Andreas Boll <aboll@debian.org> Thu, 25 Oct 2018 10:28:22 +0200
mesa (18.2.1-1) experimental; urgency=medium
......
......@@ -31,7 +31,8 @@ Compatibility contexts may report a lower version depending on each driver.
<h2>SHA256 checksums</h2>
<pre>
TBD
SHA256: c51711168971957037cc7e3e19e8abe1ec6eeab9cf236d419a1e7728a41cac8a mesa-18.2.2.tar.gz
SHA256: c3ba82b12a89d3d9fed2bdd96b4702dbb7ab675034650a8b1b718320daf073c4 mesa-18.2.2.tar.xz
</pre>
......
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Mesa Release Notes</title>
<link rel="stylesheet" type="text/css" href="../mesa.css">
</head>
<body>
<div class="header">
<h1>The Mesa 3D Graphics Library</h1>
</div>
<iframe src="../contents.html"></iframe>
<div class="content">
<h1>Mesa 18.2.3 Release Notes / October 19, 2018</h1>
<p>
Mesa 18.2.3 is a bug fix release which fixes bugs found since the 18.2.2 release.
</p>
<p>
Mesa 18.2.3 implements the OpenGL 4.5 API, but the version reported by
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
Some drivers don't support all the features required in OpenGL 4.5. OpenGL
4.5 is <strong>only</strong> available if requested at context creation.
Compatibility contexts may report a lower version depending on each driver.
</p>
<h2>SHA256 checksums</h2>
<pre>
TBD
</pre>
<h2>New features</h2>
<p>None</p>
<h2>Bug fixes</h2>
<ul>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=99507">Bug 99507</a> - Corrupted frame contents with Vulkan version of DOTA2, Talos Principle and Sascha Willems' demos when they're run Vsynched in fullscreen</li>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107857">Bug 107857</a> - GPU hang - GS_EMIT without shader outputs</li>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=107926">Bug 107926</a> - [anv] Rise of the Tomb Raider always misrendering, segfault and gpu hang.</li>
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=108012">Bug 108012</a> - Compiler crashes on access of non-existent member incremental operations</li>
</ul>
<h2>Changes</h2>
<p>Boyuan Zhang (1):</p>
<ul>
<li>st/va: use provided sizes and coords for vlVaGetImage</li>
</ul>
<p>Dave Airlie (1):</p>
<ul>
<li>anv: add missing unlock in error path.</li>
</ul>
<p>Dylan Baker (1):</p>
<ul>
<li>meson: Don't allow building EGL on Windows or MacOS</li>
</ul>
<p>Emil Velikov (5):</p>
<ul>
<li>st/nine: do not double-close the fd on teardown</li>
<li>egl: make eglSwapInterval a no-op for !window surfaces</li>
<li>egl: make eglSwapBuffers* a no-op for !window surfaces</li>
<li>vl/dri3: do full teardown on screen_destroy</li>
<li>Revert "mesa: remove unnecessary 'sort by year' for the GL extensions"</li>
</ul>
<p>Eric Engestrom (1):</p>
<ul>
<li>radv: add missing meson c++ visibility arguments</li>
</ul>
<p>Fritz Koenig (1):</p>
<ul>
<li>i965: Replace checks for rb-&gt;Name with FlipY (v2)</li>
</ul>
<p>Gert Wollny (1):</p>
<ul>
<li>virgl, vtest: Correct the transfer size calculation</li>
</ul>
<p>Ilia Mirkin (4):</p>
<ul>
<li>glsl: fix array assignments of a swizzled vector</li>
<li>nv50,nvc0: mark RGBX_UINT formats as renderable</li>
<li>nv50,nvc0: guard against zero-size blits</li>
<li>nvc0: fix blitting red to srgb8_alpha</li>
</ul>
<p>Jason Ekstrand (7):</p>
<ul>
<li>nir/cf: Remove phi sources if needed in nir_handle_add_jump</li>
<li>anv: Use separate MOCS settings for external BOs</li>
<li>intel/fs: Fix a typo in need_matching_subreg_offset</li>
<li>nir/from_ssa: Don't rewrite derefs destinations to registers</li>
<li>anv/batch_chain: Don't start a new BO just for BATCH_BUFFER_START</li>
<li>nir/alu_to_scalar: Use ssa_for_alu_src in hand-rolled expansions</li>
<li>intel: Don't propagate conditional modifiers if a UD source is negated</li>
</ul>
<p>Juan A. Suarez Romero (2):</p>
<ul>
<li>docs: add sha256 checksums for 18.2.2</li>
<li>Update version to 18.2.3</li>
</ul>
<p>Józef Kucia (1):</p>
<ul>
<li>radeonsi: avoid sending GS_EMIT in shaders without outputs</li>
</ul>
<p>Marek Olšák (1):</p>
<ul>
<li>drirc: add a workaround for ARMA 3</li>
</ul>
<p>Samuel Pitoiset (1):</p>
<ul>
<li>radv: add a workaround for a VGT hang with prim restart and strips</li>
</ul>
<p>Tapani Pälli (1):</p>
<ul>
<li>glsl: do not attempt assignment if operand type not parsed correctly</li>
</ul>
<p>Timothy Arceri (11):</p>
<ul>
<li>glsl: ignore trailing whitespace when define redefined</li>
<li>util: disable cache if we have no build-id and timestamp is zero</li>
<li>util: rename timestamp param in disk_cache_create()</li>
<li>util: add disk_cache_get_function_identifier()</li>
<li>radeonsi: use build-id when available for disk cache</li>
<li>nouveau: use build-id when available for disk cache</li>
<li>r600: use build-id when available for disk cache</li>
<li>mesa/st: add force_compat_profile option to driconfig</li>
<li>util: use force_compat_profile for Wolfenstein The Old Blood</li>
<li>util: better handle program names from wine</li>
<li>util: add drirc workarounds for RAGE</li>
</ul>
<p>Vinson Lee (1):</p>
<ul>
<li>r600/sb: Fix constant-logical-operand warning.</li>
</ul>
</div>
</body>
</html>
......@@ -297,7 +297,10 @@ endif
_egl = get_option('egl')
if _egl == 'auto'
with_egl = with_dri and with_shared_glapi and with_platforms
with_egl = (
not ['darwin', 'windows'].contains(host_machine.system()) and
with_dri and with_shared_glapi and with_platforms
)
elif _egl == 'true'
if not with_dri
error('EGL requires dri')
......@@ -307,6 +310,8 @@ elif _egl == 'true'
error('No platforms specified, consider -Dplatforms=drm,x11 at least')
elif not ['disabled', 'dri'].contains(with_glx)
error('EGL requires dri, but a GLX is being built without dri')
elif ['darwin', 'windows'].contains(host_machine.system())
error('EGL is not available on Windows or MacOS')
endif
with_egl = true
else
......
......@@ -144,6 +144,7 @@ libvulkan_radeon = shared_library(
idep_nir,
],
c_args : [c_vis_args, no_override_init_args, radv_flags],
cpp_args : [cpp_vis_args, radv_flags],
link_args : [ld_args_bsymbolic, ld_args_gc_sections],
install : true,
)
......
......@@ -61,10 +61,6 @@ radv_get_build_id(void *ptr, struct mesa_sha1 *ctx)
} else
#endif
if (disk_cache_get_function_timestamp(ptr, &timestamp)) {
if (!timestamp) {
fprintf(stderr, "radv: The provided filesystem timestamp for the cache is bogus!\n");
}
_mesa_sha1_update(ctx, &timestamp, sizeof(timestamp));
} else
return false;
......
......@@ -3337,6 +3337,17 @@ radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
}
}
/* Workaround for a VGT hang when strip primitive types are used with
* primitive restart.
*/
if (pipeline->graphics.prim_restart_enable &&
(prim == V_008958_DI_PT_LINESTRIP ||
prim == V_008958_DI_PT_TRISTRIP ||
prim == V_008958_DI_PT_LINESTRIP_ADJ ||
prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
ia_multi_vgt_param.partial_vs_wave = true;
}
ia_multi_vgt_param.base =
S_028AA8_PRIMGROUP_SIZE(ia_multi_vgt_param.primgroup_size - 1) |
/* The following field was moved to VGT_SHADER_STAGES_EN in GFX9. */
......
......@@ -1683,6 +1683,12 @@ ast_expression::do_hir(exec_list *instructions,
op[1] = this->subexpressions[1]->hir(instructions, state);
orig_type = op[0]->type;
/* Break out if operand types were not parsed successfully. */
if ((op[0]->type == glsl_type::error_type ||
op[1]->type == glsl_type::error_type))
break;
type = arithmetic_result_type(op[0], op[1],
(this->oper == ast_mul_assign),
state, & loc);
......
......@@ -1074,6 +1074,20 @@ _token_list_equal_ignoring_space(token_list_t *a, token_list_t *b)
while (1)
{
if (node_a == NULL && node_b == NULL)
break;
/* Ignore trailing whitespace */
if (node_a == NULL && node_b->token->type == SPACE) {
while (node_b && node_b->token->type == SPACE)
node_b = node_b->next;
}
if (node_b == NULL && node_a->token->type == SPACE) {
while (node_a && node_a->token->type == SPACE)
node_a = node_a->next;
}
if (node_a == NULL && node_b == NULL)
break;
......
......@@ -2,6 +2,7 @@
#define TWO ( 1+1 )
#define FOUR (2 + 2)
#define SIX (3 + 3)
#define EIGHT (8 + 8)
/* Redefinitions with whitespace in same places, but different amounts, (so no
* error). */
......@@ -9,6 +10,9 @@
#define FOUR (2 + 2)
#define SIX (3/*comment is whitespace*/+ /* collapsed */ /* to */ /* one */ /* space */ 3)
/* Trailing whitespace (no error) */
#define EIGHT (8 + 8)
/* Redefinitions with whitespace in different places. Each of these should
* trigger an error. */
#define TWO (1 + 1)
......
0:14(9): preprocessor error: Redefinition of macro TWO
0:18(9): preprocessor error: Redefinition of macro TWO
0:19(9): preprocessor error: Redefinition of macro FOUR
0:20(9): preprocessor error: Redefinition of macro SIX
0:15(9): preprocessor error: Redefinition of macro FOUR
0:16(9): preprocessor error: Redefinition of macro SIX
......
......@@ -59,8 +59,7 @@ vector_deref_visitor::visit_enter(ir_assignment *ir)
if (!deref->array->type->is_vector())
return ir_rvalue_enter_visitor::visit_enter(ir);
ir_dereference *const new_lhs = (ir_dereference *) deref->array;
ir->set_lhs(new_lhs);
ir_rvalue *const new_lhs = deref->array;
void *mem_ctx = ralloc_parent(ir);
ir_constant *old_index_constant =
......@@ -72,8 +71,16 @@ vector_deref_visitor::visit_enter(ir_assignment *ir)
ir->rhs,
deref->array_index);
ir->write_mask = (1 << new_lhs->type->vector_elements) - 1;
ir->set_lhs(new_lhs);
} else if (new_lhs->ir_type != ir_type_swizzle) {
ir->set_lhs(new_lhs);
ir->write_mask = 1 << old_index_constant->get_uint_component(0);
} else {
ir->write_mask = 1 << old_index_constant->get_int_component(0);
/* If the "new" LHS is a swizzle, use the set_lhs helper to instead
* swizzle the RHS.
*/
unsigned component[1] = { old_index_constant->get_uint_component(0) };
ir->set_lhs(new(mem_ctx) ir_swizzle(new_lhs, component, 1));
}
return ir_rvalue_enter_visitor::visit_enter(ir);
......
......@@ -444,6 +444,23 @@ nearest_loop(nir_cf_node *node)
return nir_cf_node_as_loop(node);
}
static void
remove_phi_src(nir_block *block, nir_block *pred)
{
nir_foreach_instr(instr, block) {
if (instr->type != nir_instr_type_phi)
break;
nir_phi_instr *phi = nir_instr_as_phi(instr);
nir_foreach_phi_src_safe(src, phi) {
if (src->pred == pred) {
list_del(&src->src.use_link);
exec_node_remove(&src->node);
}
}
}
}
/*
* update the CFG after a jump instruction has been added to the end of a block
*/
......@@ -454,6 +471,10 @@ nir_handle_add_jump(nir_block *block)
nir_instr *instr = nir_block_last_instr(block);
nir_jump_instr *jump_instr = nir_instr_as_jump(instr);
if (block->successors[0])
remove_phi_src(block->successors[0], block);
if (block->successors[1])
remove_phi_src(block->successors[1], block);
unlink_block_successors(block);
nir_function_impl *impl = nir_cf_node_get_function(&block->cf_node);
......@@ -477,23 +498,6 @@ nir_handle_add_jump(nir_block *block)
}
}
static void
remove_phi_src(nir_block *block, nir_block *pred)
{
nir_foreach_instr(instr, block) {
if (instr->type != nir_instr_type_phi)
break;
nir_phi_instr *phi = nir_instr_as_phi(instr);
nir_foreach_phi_src_safe(src, phi) {
if (src->pred == pred) {
list_del(&src->src.use_link);
exec_node_remove(&src->node);
}
}
}
}
/* Removes the successor of a block with a jump. Note that the jump to be
* eliminated may be free-floating.
*/
......
......@@ -974,6 +974,12 @@ nir_lower_ssa_defs_to_regs_block(nir_block *block)
mov->dest.dest = nir_dest_for_reg(reg);
mov->dest.write_mask = (1 << reg->num_components) - 1;
nir_instr_insert(nir_after_instr(&load->instr), &mov->instr);
} else if (instr->type == nir_instr_type_deref) {
/* Derefs should always be SSA values, don't rewrite them. */
nir_deref_instr *deref = nir_instr_as_deref(instr);
nir_foreach_use_safe(use, &deref->dest.ssa)
assert(use->parent_instr->block == block);
assert(list_empty(&deref->dest.ssa.if_uses));
} else {
nir_foreach_dest(instr, dest_replace_ssa_with_reg, &state);
}
......
......@@ -107,11 +107,11 @@ lower_alu_instr_scalar(nir_alu_instr *instr, nir_builder *b)
if (!b->shader->options->lower_pack_half_2x16)
return false;
nir_ssa_def *src_vec2 = nir_ssa_for_alu_src(b, instr, 0);
nir_ssa_def *val =
nir_pack_half_2x16_split(b, nir_channel(b, instr->src[0].src.ssa,
instr->src[0].swizzle[0]),
nir_channel(b, instr->src[0].src.ssa,
instr->src[0].swizzle[1]));
nir_pack_half_2x16_split(b, nir_channel(b, src_vec2, 0),
nir_channel(b, src_vec2, 1));
nir_ssa_def_rewrite_uses(&instr->dest.dest.ssa, nir_src_for_ssa(val));
nir_instr_remove(&instr->instr);
......@@ -130,9 +130,11 @@ lower_alu_instr_scalar(nir_alu_instr *instr, nir_builder *b)
if (!b->shader->options->lower_unpack_half_2x16)
return false;
nir_ssa_def *packed = nir_ssa_for_alu_src(b, instr, 0);
nir_ssa_def *comps[2];
comps[0] = nir_unpack_half_2x16_split_x(b, instr->src[0].src.ssa);
comps[1] = nir_unpack_half_2x16_split_y(b, instr->src[0].src.ssa);
comps[0] = nir_unpack_half_2x16_split_x(b, packed);
comps[1] = nir_unpack_half_2x16_split_y(b, packed);
nir_ssa_def *vec = nir_vec(b, comps, 2);
nir_ssa_def_rewrite_uses(&instr->dest.dest.ssa, nir_src_for_ssa(vec));
......@@ -144,8 +146,8 @@ lower_alu_instr_scalar(nir_alu_instr *instr, nir_builder *b)
assert(b->shader->options->lower_pack_snorm_2x16 ||
b->shader->options->lower_pack_unorm_2x16);
nir_ssa_def *word =
nir_extract_u16(b, instr->src[0].src.ssa, nir_imm_int(b, 0));
nir_ssa_def *word = nir_extract_u16(b, nir_ssa_for_alu_src(b, instr, 0),
nir_imm_int(b, 0));
nir_ssa_def *val =
nir_ior(b, nir_ishl(b, nir_channel(b, word, 1), nir_imm_int(b, 16)),
nir_channel(b, word, 0));
......@@ -159,8 +161,8 @@ lower_alu_instr_scalar(nir_alu_instr *instr, nir_builder *b)
assert(b->shader->options->lower_pack_snorm_4x8 ||
b->shader->options->lower_pack_unorm_4x8);
nir_ssa_def *byte =
nir_extract_u8(b, instr->src[0].src.ssa, nir_imm_int(b, 0));
nir_ssa_def *byte = nir_extract_u8(b, nir_ssa_for_alu_src(b, instr, 0),
nir_imm_int(b, 0));
nir_ssa_def *val =
nir_ior(b, nir_ior(b, nir_ishl(b, nir_channel(b, byte, 3), nir_imm_int(b, 24)),
nir_ishl(b, nir_channel(b, byte, 2), nir_imm_int(b, 16))),
......@@ -173,14 +175,15 @@ lower_alu_instr_scalar(nir_alu_instr *instr, nir_builder *b)
}
case nir_op_fdph: {
nir_ssa_def *src0_vec = nir_ssa_for_alu_src(b, instr, 0);
nir_ssa_def *src1_vec = nir_ssa_for_alu_src(b, instr, 1);
nir_ssa_def *sum[4];
for (unsigned i = 0; i < 3; i++) {
sum[i] = nir_fmul(b, nir_channel(b, instr->src[0].src.ssa,
instr->src[0].swizzle[i]),
nir_channel(b, instr->src[1].src.ssa,
instr->src[1].swizzle[i]));
sum[i] = nir_fmul(b, nir_channel(b, src0_vec, i),
nir_channel(b, src1_vec, i));
}
sum[3] = nir_channel(b, instr->src[1].src.ssa, instr->src[1].swizzle[3]);
sum[3] = nir_channel(b, src1_vec, 3);
nir_ssa_def *val = nir_fadd(b, nir_fadd(b, sum[0], sum[1]),
nir_fadd(b, sum[2], sum[3]));
......
......@@ -1208,6 +1208,9 @@ eglSwapInterval(EGLDisplay dpy, EGLint interval)
if (_eglGetSurfaceHandle(surf) == EGL_NO_SURFACE)
RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
if (surf->Type != EGL_WINDOW_BIT)
RETURN_EGL_EVAL(disp, EGL_TRUE);
interval = CLAMP(interval,
surf->Config->MinSwapInterval,
surf->Config->MaxSwapInterval);
......@@ -1243,6 +1246,9 @@ eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
#endif
if (surf->Type != EGL_WINDOW_BIT)
RETURN_EGL_EVAL(disp, EGL_TRUE);
/* From the EGL 1.5 spec:
*
* If eglSwapBuffers is called and the native window associated with
......@@ -1282,6 +1288,9 @@ _eglSwapBuffersWithDamageCommon(_EGLDisplay *disp, _EGLSurface *surf,
surf != ctx->DrawSurface)
RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
if (surf->Type != EGL_WINDOW_BIT)
RETURN_EGL_EVAL(disp, EGL_TRUE);
if ((n_rects > 0 && rects == NULL) || n_rects < 0)
RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
......
......@@ -30,6 +30,7 @@ DRI_CONF_SECTION_DEBUG
DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION("false")
DRI_CONF_FORCE_GLSL_ABS_SQRT("false")
DRI_CONF_GLSL_CORRECT_DERIVATIVES_AFTER_DISCARD("false")
DRI_CONF_FORCE_COMPAT_PROFILE("false")
DRI_CONF_SECTION_END
DRI_CONF_SECTION_MISCELLANEOUS
......
......@@ -712,7 +712,6 @@ vl_dri3_screen_destroy(struct vl_screen *vscreen)
if (scrn->front_buffer) {
dri3_free_front_buffer(scrn, scrn->front_buffer);
scrn->front_buffer = NULL;
return;
}
for (i = 0; i < BACK_BUFFER_NUM; ++i) {
......
......@@ -148,18 +148,18 @@ nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
static void
nouveau_disk_cache_create(struct nouveau_screen *screen)
{
uint32_t mesa_timestamp;
char *timestamp_str;
uint32_t mesa_id;
char *mesa_id_str;
int res;
if (disk_cache_get_function_timestamp(nouveau_disk_cache_create,
&mesa_timestamp)) {
res = asprintf(&timestamp_str, "%u", mesa_timestamp);
if (disk_cache_get_function_identifier(nouveau_disk_cache_create,
&mesa_id)) {
res = asprintf(&mesa_id_str, "%u", mesa_id);
if (res != -1) {
screen->disk_shader_cache =
disk_cache_create(nouveau_screen_get_name(&screen->base),
timestamp_str, 0);
free(timestamp_str);
mesa_id_str, 0);
free(mesa_id_str);
}
}
}
......