Compare commits
23 Commits
mesa-19.0.
...
mesa-19.0.
Author | SHA1 | Date | |
---|---|---|---|
|
9e3d9c4e13 | ||
|
bec0a67629 | ||
|
e64fc93148 | ||
|
1302f20ddb | ||
|
d1443da4f0 | ||
|
03cb07168f | ||
|
dfe2258cc1 | ||
|
0ed91c772d | ||
|
cab826d5a8 | ||
|
93d278a73a | ||
|
7be21f6575 | ||
|
e8d9b33986 | ||
|
fe7f221ddb | ||
|
0d645c98f2 | ||
|
1621a5ab55 | ||
|
2274d43fa6 | ||
|
5cac14f77a | ||
|
4f8992efac | ||
|
aaf9a11f79 | ||
|
1221311fb1 | ||
|
1ad8a0e751 | ||
|
f4ab855312 | ||
|
ab41ddb671 |
@@ -31,3 +31,10 @@ b031c643491a92a5574c7a4bd659df33f2d89bb6
|
||||
# These were de-nominated since they don't apply nicley
|
||||
88105375c978f9de82af8c654051e5aa16d61614
|
||||
c9358621276ae49162e58d4a16fe37abda6a347f
|
||||
|
||||
# These are only for 19.1
|
||||
c3538ab5702ceeead284c2b5f9e700f3082c8135
|
||||
d2aa65eb1892f7b300ac24560f9dbda6b600b5a7
|
||||
78e35df52aa2f7d770f929a0866a0faa89c261a9
|
||||
0f1b070bad34c46c4bcc6c679fa533bf6b4b79e5
|
||||
ad2b4aa37806779bdfc15d704940136c3db21eb4
|
||||
|
@@ -31,7 +31,8 @@ Compatibility contexts may report a lower version depending on each driver.
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
TBD
|
||||
de361c76bf7aae09219f571b9ae77a34864a1cd9f6ba24c845b18b3cd5e4b9a2 mesa-19.0.4.tar.gz
|
||||
39f9f32f448d77388ef817c6098d50eb0c1595815ce7e895dec09dd68774ce47 mesa-19.0.4.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
|
136
docs/relnotes/19.0.5.html
Normal file
136
docs/relnotes/19.0.5.html
Normal file
@@ -0,0 +1,136 @@
|
||||
<!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 19.0.5 Release Notes / May 21, 2019</h1>
|
||||
|
||||
<p>
|
||||
Mesa 19.0.5 is a bug fix release which fixes bugs found since the 19.0.4 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 19.0.5 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>N/A</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=109659">Bug 109659</a> - Missing OpenGL symbols in OSMesa Gallium when building with meson</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=110134">Bug 110134</a> - SIGSEGV while playing large hevc video in mpv</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=110648">Bug 110648</a> - Dota2 will not open using vulkan since 19.0 series</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Caio Marcelo de Oliveira Filho (2):</p>
|
||||
<ul>
|
||||
<li>nir: Fix nir_opt_idiv_const when negatives are involved</li>
|
||||
<li>nir: Fix clone of nir_variable state slots</li>
|
||||
</ul>
|
||||
|
||||
<p>Charmaine Lee (2):</p>
|
||||
<ul>
|
||||
<li>st/mesa: purge framebuffers with current context after unbinding winsys buffers</li>
|
||||
<li>mesa: unreference current winsys buffers when unbinding winsys buffers</li>
|
||||
</ul>
|
||||
|
||||
<p>Dylan Baker (4):</p>
|
||||
<ul>
|
||||
<li>docs: Add SHA256 sums for mesa 19.0.4</li>
|
||||
<li>cherry-ignore: add patches for panfrost</li>
|
||||
<li>cherry-ignore: Add more 19.1 patches</li>
|
||||
<li>bump version to 19.0.5</li>
|
||||
</ul>
|
||||
|
||||
<p>Eric Engestrom (1):</p>
|
||||
<ul>
|
||||
<li>meson: expose glapi through osmesa</li>
|
||||
</ul>
|
||||
|
||||
<p>Gert Wollny (2):</p>
|
||||
<ul>
|
||||
<li>softpipe/buffer: load only as many components as the the buffer resource type provides</li>
|
||||
<li>Revert "softpipe/buffer: load only as many components as the the buffer resource type provides"</li>
|
||||
</ul>
|
||||
|
||||
<p>Ian Romanick (1):</p>
|
||||
<ul>
|
||||
<li>Revert "nir: add late opt to turn inot/b2f combos back to bcsel"</li>
|
||||
</ul>
|
||||
|
||||
<p>Jason Ekstrand (3):</p>
|
||||
<ul>
|
||||
<li>intel/fs/ra: Only add dest interference to sources that exist</li>
|
||||
<li>intel/fs/ra: Stop adding RA interference to too many SENDS nodes</li>
|
||||
<li>anv: Only consider minSampleShading when sampleShadingEnable is set</li>
|
||||
</ul>
|
||||
|
||||
<p>Józef Kucia (1):</p>
|
||||
<ul>
|
||||
<li>radv: clear vertex bindings while resetting command buffer</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (1):</p>
|
||||
<ul>
|
||||
<li>i965: Fix memory leaks in brw_upload_cs_work_groups_surface().</li>
|
||||
</ul>
|
||||
|
||||
<p>Leo Liu (1):</p>
|
||||
<ul>
|
||||
<li>winsys/amdgpu: add VCN JPEG to no user fence group</li>
|
||||
</ul>
|
||||
|
||||
<p>Lionel Landwerlin (1):</p>
|
||||
<ul>
|
||||
<li>anv: Use corresponding type from the vector allocation</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (1):</p>
|
||||
<ul>
|
||||
<li>st/mesa: fix 2 crashes in st_tgsi_lower_yuv</li>
|
||||
</ul>
|
||||
|
||||
<p>Nanley Chery (1):</p>
|
||||
<ul>
|
||||
<li>anv: Fix some depth buffer sampling cases on ICL+</li>
|
||||
</ul>
|
||||
|
||||
<p>Samuel Pitoiset (1):</p>
|
||||
<ul>
|
||||
<li>radv: add a workaround for Monster Hunter World and LLVM 7&8</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -151,13 +151,14 @@ static LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family,
|
||||
LLVMTargetRef target = ac_get_llvm_target(triple);
|
||||
|
||||
snprintf(features, sizeof(features),
|
||||
"+DumpCode,-fp32-denormals,+fp64-denormals%s%s%s%s%s",
|
||||
"+DumpCode,-fp32-denormals,+fp64-denormals%s%s%s%s%s%s",
|
||||
HAVE_LLVM >= 0x0800 ? "" : ",+vgpr-spilling",
|
||||
tm_options & AC_TM_SISCHED ? ",+si-scheduler" : "",
|
||||
tm_options & AC_TM_FORCE_ENABLE_XNACK ? ",+xnack" : "",
|
||||
tm_options & AC_TM_FORCE_DISABLE_XNACK ? ",-xnack" : "",
|
||||
tm_options & AC_TM_PROMOTE_ALLOCA_TO_SCRATCH ? ",-promote-alloca" : "");
|
||||
|
||||
tm_options & AC_TM_PROMOTE_ALLOCA_TO_SCRATCH ? ",-promote-alloca" : "",
|
||||
tm_options & AC_TM_NO_LOAD_STORE_OPT ? ",-load-store-opt" : "");
|
||||
|
||||
LLVMTargetMachineRef tm = LLVMCreateTargetMachine(
|
||||
target,
|
||||
triple,
|
||||
|
@@ -65,6 +65,7 @@ enum ac_target_machine_options {
|
||||
AC_TM_CHECK_IR = (1 << 5),
|
||||
AC_TM_ENABLE_GLOBAL_ISEL = (1 << 6),
|
||||
AC_TM_CREATE_LOW_OPT = (1 << 7),
|
||||
AC_TM_NO_LOAD_STORE_OPT = (1 << 8),
|
||||
};
|
||||
|
||||
enum ac_float_mode {
|
||||
|
@@ -301,7 +301,6 @@ radv_cmd_buffer_destroy(struct radv_cmd_buffer *cmd_buffer)
|
||||
static VkResult
|
||||
radv_reset_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
|
||||
cmd_buffer->device->ws->cs_reset(cmd_buffer->cs);
|
||||
|
||||
list_for_each_entry_safe(struct radv_cmd_buffer_upload, up,
|
||||
@@ -326,6 +325,8 @@ radv_reset_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
|
||||
|
||||
cmd_buffer->record_result = VK_SUCCESS;
|
||||
|
||||
memset(cmd_buffer->vertex_bindings, 0, sizeof(cmd_buffer->vertex_bindings));
|
||||
|
||||
for (unsigned i = 0; i < VK_PIPELINE_BIND_POINT_RANGE_SIZE; i++) {
|
||||
cmd_buffer->descriptors[i].dirty = 0;
|
||||
cmd_buffer->descriptors[i].valid = 0;
|
||||
|
@@ -51,6 +51,7 @@ enum {
|
||||
RADV_DEBUG_CHECKIR = 0x200000,
|
||||
RADV_DEBUG_NOTHREADLLVM = 0x400000,
|
||||
RADV_DEBUG_NOBINNING = 0x800000,
|
||||
RADV_DEBUG_NO_LOAD_STORE_OPT = 0x1000000,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@@ -466,6 +466,7 @@ static const struct debug_control radv_debug_options[] = {
|
||||
{"checkir", RADV_DEBUG_CHECKIR},
|
||||
{"nothreadllvm", RADV_DEBUG_NOTHREADLLVM},
|
||||
{"nobinning", RADV_DEBUG_NOBINNING},
|
||||
{"noloadstoreopt", RADV_DEBUG_NO_LOAD_STORE_OPT},
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
@@ -511,6 +512,13 @@ radv_handle_per_app_options(struct radv_instance *instance,
|
||||
} else if (!strcmp(name, "DOOM_VFR")) {
|
||||
/* Work around a Doom VFR game bug */
|
||||
instance->debug_flags |= RADV_DEBUG_NO_DYNAMIC_BOUNDS;
|
||||
} else if (!strcmp(name, "MonsterHunterWorld.exe")) {
|
||||
/* Workaround for a WaW hazard when LLVM moves/merges
|
||||
* load/store memory operations.
|
||||
* See https://reviews.llvm.org/D61313
|
||||
*/
|
||||
if (HAVE_LLVM < 0x900)
|
||||
instance->debug_flags |= RADV_DEBUG_NO_LOAD_STORE_OPT;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -612,6 +612,8 @@ shader_variant_create(struct radv_device *device,
|
||||
tm_options |= AC_TM_SISCHED;
|
||||
if (options->check_ir)
|
||||
tm_options |= AC_TM_CHECK_IR;
|
||||
if (device->instance->debug_flags & RADV_DEBUG_NO_LOAD_STORE_OPT)
|
||||
tm_options |= AC_TM_NO_LOAD_STORE_OPT;
|
||||
|
||||
thread_compiler = !(device->instance->debug_flags & RADV_DEBUG_NOTHREADLLVM);
|
||||
radv_init_llvm_once();
|
||||
|
@@ -151,9 +151,11 @@ nir_variable_clone(const nir_variable *var, nir_shader *shader)
|
||||
nvar->name = ralloc_strdup(nvar, var->name);
|
||||
nvar->data = var->data;
|
||||
nvar->num_state_slots = var->num_state_slots;
|
||||
nvar->state_slots = ralloc_array(nvar, nir_state_slot, var->num_state_slots);
|
||||
memcpy(nvar->state_slots, var->state_slots,
|
||||
var->num_state_slots * sizeof(nir_state_slot));
|
||||
if (var->num_state_slots) {
|
||||
nvar->state_slots = ralloc_array(nvar, nir_state_slot, var->num_state_slots);
|
||||
memcpy(nvar->state_slots, var->state_slots,
|
||||
var->num_state_slots * sizeof(nir_state_slot));
|
||||
}
|
||||
if (var->constant_initializer) {
|
||||
nvar->constant_initializer =
|
||||
nir_constant_clone(var->constant_initializer, nvar);
|
||||
|
@@ -929,9 +929,6 @@ late_optimizations = [
|
||||
(('fdot4', a, b), ('fdot_replicated4', a, b), 'options->fdot_replicates'),
|
||||
(('fdph', a, b), ('fdph_replicated', a, b), 'options->fdot_replicates'),
|
||||
|
||||
(('b2f(is_used_more_than_once)', ('inot', 'a@1')), ('bcsel', a, 0.0, 1.0)),
|
||||
(('fneg(is_used_more_than_once)', ('b2f', ('inot', 'a@1'))), ('bcsel', a, -0.0, -1.0)),
|
||||
|
||||
# we do these late so that we don't get in the way of creating ffmas
|
||||
(('fmin', ('fadd(is_used_once)', '#c', a), ('fadd(is_used_once)', '#c', b)), ('fadd', c, ('fmin', a, b))),
|
||||
(('fmax', ('fadd(is_used_once)', '#c', a), ('fadd(is_used_once)', '#c', b)), ('fadd', c, ('fmax', a, b))),
|
||||
|
@@ -65,15 +65,17 @@ build_umod(nir_builder *b, nir_ssa_def *n, uint64_t d)
|
||||
static nir_ssa_def *
|
||||
build_idiv(nir_builder *b, nir_ssa_def *n, int64_t d)
|
||||
{
|
||||
uint64_t abs_d = d < 0 ? -d : d;
|
||||
|
||||
if (d == 0) {
|
||||
return nir_imm_intN_t(b, 0, n->bit_size);
|
||||
} else if (d == 1) {
|
||||
return n;
|
||||
} else if (d == -1) {
|
||||
return nir_ineg(b, n);
|
||||
} else if (util_is_power_of_two_or_zero64(d)) {
|
||||
uint64_t abs_d = d < 0 ? -d : d;
|
||||
nir_ssa_def *uq = nir_ishr(b, n, nir_imm_int(b, util_logbase2_64(abs_d)));
|
||||
} else if (util_is_power_of_two_or_zero64(abs_d)) {
|
||||
nir_ssa_def *uq = nir_ushr(b, nir_iabs(b, n),
|
||||
nir_imm_int(b, util_logbase2_64(abs_d)));
|
||||
nir_ssa_def *n_neg = nir_ilt(b, n, nir_imm_intN_t(b, 0, n->bit_size));
|
||||
nir_ssa_def *neg = d < 0 ? nir_inot(b, n_neg) : n_neg;
|
||||
return nir_bcsel(b, neg, nir_ineg(b, uq), uq);
|
||||
|
@@ -116,22 +116,6 @@ is_not_const(nir_alu_instr *instr, unsigned src, UNUSED unsigned num_components,
|
||||
return !nir_src_is_const(instr->src[src].src);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_used_more_than_once(nir_alu_instr *instr)
|
||||
{
|
||||
bool zero_if_use = list_empty(&instr->dest.dest.ssa.if_uses);
|
||||
bool zero_use = list_empty(&instr->dest.dest.ssa.uses);
|
||||
|
||||
if (zero_use && zero_if_use)
|
||||
return false;
|
||||
else if (zero_use && list_is_singular(&instr->dest.dest.ssa.if_uses))
|
||||
return false;
|
||||
else if (zero_if_use && list_is_singular(&instr->dest.dest.ssa.uses))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_used_once(nir_alu_instr *instr)
|
||||
{
|
||||
|
@@ -43,9 +43,9 @@ libosmesa = shared_library(
|
||||
inc_gallium_drivers,
|
||||
],
|
||||
link_depends : osmesa_link_deps,
|
||||
link_whole : [libosmesa_st],
|
||||
link_whole : [libosmesa_st, libglapi_static],
|
||||
link_with : [
|
||||
libmesa_gallium, libgallium, libglapi_static, libws_null, osmesa_link_with,
|
||||
libmesa_gallium, libgallium, libws_null, osmesa_link_with,
|
||||
],
|
||||
dependencies : [
|
||||
dep_selinux, dep_thread, dep_clock, dep_unwind,
|
||||
|
@@ -386,7 +386,8 @@ static bool amdgpu_cs_has_user_fence(struct amdgpu_cs_context *cs)
|
||||
cs->ib[IB_MAIN].ip_type != AMDGPU_HW_IP_VCE &&
|
||||
cs->ib[IB_MAIN].ip_type != AMDGPU_HW_IP_UVD_ENC &&
|
||||
cs->ib[IB_MAIN].ip_type != AMDGPU_HW_IP_VCN_DEC &&
|
||||
cs->ib[IB_MAIN].ip_type != AMDGPU_HW_IP_VCN_ENC;
|
||||
cs->ib[IB_MAIN].ip_type != AMDGPU_HW_IP_VCN_ENC &&
|
||||
cs->ib[IB_MAIN].ip_type != AMDGPU_HW_IP_VCN_JPEG;
|
||||
}
|
||||
|
||||
static bool amdgpu_cs_has_chaining(struct amdgpu_cs *cs)
|
||||
|
@@ -591,7 +591,7 @@ fs_visitor::assign_regs(bool allow_spilling, bool spill_all)
|
||||
*/
|
||||
foreach_block_and_inst(block, fs_inst, inst, cfg) {
|
||||
if (inst->dst.file == VGRF && inst->has_source_and_destination_hazard()) {
|
||||
for (unsigned i = 0; i < 3; i++) {
|
||||
for (unsigned i = 0; i < inst->sources; i++) {
|
||||
if (inst->src[i].file == VGRF) {
|
||||
ra_add_node_interference(g, inst->dst.nr, inst->src[i].nr);
|
||||
}
|
||||
@@ -710,14 +710,9 @@ fs_visitor::assign_regs(bool allow_spilling, bool spill_all)
|
||||
if (inst->opcode == SHADER_OPCODE_SEND && inst->ex_mlen > 0 &&
|
||||
inst->src[2].file == VGRF &&
|
||||
inst->src[3].file == VGRF &&
|
||||
inst->src[2].nr != inst->src[3].nr) {
|
||||
for (unsigned i = 0; i < inst->mlen; i++) {
|
||||
for (unsigned j = 0; j < inst->ex_mlen; j++) {
|
||||
ra_add_node_interference(g, inst->src[2].nr + i,
|
||||
inst->src[3].nr + j);
|
||||
}
|
||||
}
|
||||
}
|
||||
inst->src[2].nr != inst->src[3].nr)
|
||||
ra_add_node_interference(g, inst->src[2].nr,
|
||||
inst->src[3].nr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -165,7 +165,7 @@ anv_state_table_init(struct anv_state_table *table,
|
||||
goto fail_fd;
|
||||
}
|
||||
|
||||
if (!u_vector_init(&table->mmap_cleanups,
|
||||
if (!u_vector_init(&table->cleanups,
|
||||
round_to_power_of_two(sizeof(struct anv_state_table_cleanup)),
|
||||
128)) {
|
||||
result = vk_error(VK_ERROR_INITIALIZATION_FAILED);
|
||||
@@ -179,12 +179,12 @@ anv_state_table_init(struct anv_state_table *table,
|
||||
uint32_t initial_size = initial_entries * ANV_STATE_ENTRY_SIZE;
|
||||
result = anv_state_table_expand_range(table, initial_size);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_mmap_cleanups;
|
||||
goto fail_cleanups;
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
||||
fail_mmap_cleanups:
|
||||
u_vector_finish(&table->mmap_cleanups);
|
||||
fail_cleanups:
|
||||
u_vector_finish(&table->cleanups);
|
||||
fail_fd:
|
||||
close(table->fd);
|
||||
|
||||
@@ -195,7 +195,7 @@ static VkResult
|
||||
anv_state_table_expand_range(struct anv_state_table *table, uint32_t size)
|
||||
{
|
||||
void *map;
|
||||
struct anv_mmap_cleanup *cleanup;
|
||||
struct anv_state_table_cleanup *cleanup;
|
||||
|
||||
/* Assert that we only ever grow the pool */
|
||||
assert(size >= table->state.end);
|
||||
@@ -204,11 +204,11 @@ anv_state_table_expand_range(struct anv_state_table *table, uint32_t size)
|
||||
if (size > BLOCK_POOL_MEMFD_SIZE)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
cleanup = u_vector_add(&table->mmap_cleanups);
|
||||
cleanup = u_vector_add(&table->cleanups);
|
||||
if (!cleanup)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
*cleanup = ANV_MMAP_CLEANUP_INIT;
|
||||
*cleanup = ANV_STATE_TABLE_CLEANUP_INIT;
|
||||
|
||||
/* Just leak the old map until we destroy the pool. We can't munmap it
|
||||
* without races or imposing locking on the block allocate fast path. On
|
||||
@@ -272,12 +272,12 @@ anv_state_table_finish(struct anv_state_table *table)
|
||||
{
|
||||
struct anv_state_table_cleanup *cleanup;
|
||||
|
||||
u_vector_foreach(cleanup, &table->mmap_cleanups) {
|
||||
u_vector_foreach(cleanup, &table->cleanups) {
|
||||
if (cleanup->map)
|
||||
munmap(cleanup->map, cleanup->size);
|
||||
}
|
||||
|
||||
u_vector_finish(&table->mmap_cleanups);
|
||||
u_vector_finish(&table->cleanups);
|
||||
|
||||
close(table->fd);
|
||||
}
|
||||
|
@@ -377,12 +377,12 @@ populate_wm_prog_key(const struct gen_device_info *devinfo,
|
||||
* harmless to compute it and then let dead-code take care of it.
|
||||
*/
|
||||
if (ms_info->rasterizationSamples > 1) {
|
||||
key->persample_interp =
|
||||
key->persample_interp = ms_info->sampleShadingEnable &&
|
||||
(ms_info->minSampleShading * ms_info->rasterizationSamples) > 1;
|
||||
key->multisample_fbo = true;
|
||||
}
|
||||
|
||||
key->frag_coord_adds_sample_pos = ms_info->sampleShadingEnable;
|
||||
key->frag_coord_adds_sample_pos = key->persample_interp;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -742,7 +742,7 @@ struct anv_state_table {
|
||||
struct anv_free_entry *map;
|
||||
uint32_t size;
|
||||
struct anv_block_state state;
|
||||
struct u_vector mmap_cleanups;
|
||||
struct u_vector cleanups;
|
||||
};
|
||||
|
||||
struct anv_state_pool {
|
||||
@@ -3062,7 +3062,13 @@ anv_can_sample_with_hiz(const struct gen_device_info * const devinfo,
|
||||
if (!(image->aspects & VK_IMAGE_ASPECT_DEPTH_BIT))
|
||||
return false;
|
||||
|
||||
if (devinfo->gen < 8)
|
||||
/* Allow this feature on BDW even though it is disabled in the BDW devinfo
|
||||
* struct. There's documentation which suggests that this feature actually
|
||||
* reduces performance on BDW, but it has only been observed to help so
|
||||
* far. Sampling fast-cleared blocks on BDW must also be handled with care
|
||||
* (see depth_stencil_attachment_compute_aux_usage() for more info).
|
||||
*/
|
||||
if (devinfo->gen != 8 && !devinfo->has_sample_with_hiz)
|
||||
return false;
|
||||
|
||||
return image->samples == 1;
|
||||
|
@@ -1681,6 +1681,11 @@ brw_upload_cs_work_groups_surface(struct brw_context *brw)
|
||||
ISL_FORMAT_RAW,
|
||||
3 * sizeof(GLuint), 1,
|
||||
RELOC_WRITE);
|
||||
|
||||
/* The state buffer now holds a reference to our upload, drop ours. */
|
||||
if (bo != brw->compute.num_work_groups_bo)
|
||||
brw_bo_unreference(bo);
|
||||
|
||||
brw->ctx.NewDriverState |= BRW_NEW_SURFACES;
|
||||
}
|
||||
}
|
||||
|
@@ -33,7 +33,8 @@ libosmesa = shared_library(
|
||||
include_directories : [
|
||||
inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux,
|
||||
],
|
||||
link_with : [libmesa_classic, libglapi_static, osmesa_link_with],
|
||||
link_whole : libglapi_static,
|
||||
link_with : [libmesa_classic, osmesa_link_with],
|
||||
dependencies : [dep_thread, dep_selinux],
|
||||
version : '8.0.0',
|
||||
install : true,
|
||||
|
@@ -1760,6 +1760,10 @@ _mesa_make_current( struct gl_context *newCtx,
|
||||
|
||||
check_init_viewport(newCtx, drawBuffer->Width, drawBuffer->Height);
|
||||
}
|
||||
else {
|
||||
_mesa_reference_framebuffer(&newCtx->WinSysDrawBuffer, NULL);
|
||||
_mesa_reference_framebuffer(&newCtx->WinSysReadBuffer, NULL);
|
||||
}
|
||||
|
||||
if (newCtx->FirstTimeCurrent) {
|
||||
handle_first_current(newCtx);
|
||||
|
@@ -1105,10 +1105,17 @@ st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
|
||||
else {
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
ret = _mesa_make_current(NULL, NULL, NULL);
|
||||
|
||||
if (ctx)
|
||||
if (ctx) {
|
||||
/* Before releasing the context, release its associated
|
||||
* winsys buffers first. Then purge the context's winsys buffers list
|
||||
* to free the resources of any winsys buffers that no longer have
|
||||
* an existing drawable.
|
||||
*/
|
||||
ret = _mesa_make_current(ctx, NULL, NULL);
|
||||
st_framebuffers_purge(ctx->st);
|
||||
}
|
||||
|
||||
ret = _mesa_make_current(NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@@ -269,31 +269,39 @@ yuv_to_rgb(struct tgsi_transform_context *tctx,
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
|
||||
/* DP3 dst.x, tmpA, imm[0] */
|
||||
inst = dp3_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_X);
|
||||
reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
|
||||
reg_src(&inst.Src[1], &ctx->imm[0], SWIZ(X, Y, Z, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
if (dst->Register.WriteMask & TGSI_WRITEMASK_X) {
|
||||
inst = dp3_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_X);
|
||||
reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
|
||||
reg_src(&inst.Src[1], &ctx->imm[0], SWIZ(X, Y, Z, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
}
|
||||
|
||||
/* DP3 dst.y, tmpA, imm[1] */
|
||||
inst = dp3_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Y);
|
||||
reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
|
||||
reg_src(&inst.Src[1], &ctx->imm[1], SWIZ(X, Y, Z, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
if (dst->Register.WriteMask & TGSI_WRITEMASK_Y) {
|
||||
inst = dp3_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Y);
|
||||
reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
|
||||
reg_src(&inst.Src[1], &ctx->imm[1], SWIZ(X, Y, Z, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
}
|
||||
|
||||
/* DP3 dst.z, tmpA, imm[2] */
|
||||
inst = dp3_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Z);
|
||||
reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
|
||||
reg_src(&inst.Src[1], &ctx->imm[2], SWIZ(X, Y, Z, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
if (dst->Register.WriteMask & TGSI_WRITEMASK_Z) {
|
||||
inst = dp3_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Z);
|
||||
reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
|
||||
reg_src(&inst.Src[1], &ctx->imm[2], SWIZ(X, Y, Z, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
}
|
||||
|
||||
/* MOV dst.w, imm[0].x */
|
||||
inst = mov_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_W);
|
||||
reg_src(&inst.Src[0], &ctx->imm[3], SWIZ(_, _, _, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
if (dst->Register.WriteMask & TGSI_WRITEMASK_W) {
|
||||
inst = mov_instruction();
|
||||
reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_W);
|
||||
reg_src(&inst.Src[0], &ctx->imm[3], SWIZ(_, _, _, W));
|
||||
tctx->emit_instruction(tctx, &inst);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -434,7 +442,7 @@ st_tgsi_lower_yuv(const struct tgsi_token *tokens, unsigned free_slots,
|
||||
/* TODO better job of figuring out how many extra tokens we need..
|
||||
* this is a pain about tgsi_transform :-/
|
||||
*/
|
||||
newlen = tgsi_num_tokens(tokens) + 120;
|
||||
newlen = tgsi_num_tokens(tokens) + 300;
|
||||
newtoks = tgsi_alloc_tokens(newlen);
|
||||
if (!newtoks)
|
||||
return NULL;
|
||||
|
Reference in New Issue
Block a user