Hash :
1788355b
Author :
Date :
2020-12-08T16:12:34
Vulkan: Add dirty bits instead of direct access FBO state The CL crrev/c/2551541 causes intermittent Bot failure. I believe the problem is that from ContextVk::onMakeCurrent call stack, the object state may not in sync or even not completely specified. So instead of accessing fbo state object here to update mGraphicsPipelineDesc, we should insert dirty bit and let state validation code to handle it. Bug: b/175157604 Change-Id: I5f6b9fd901cc4187068f6161bd12836c8bbf8e87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2580914 Commit-Queue: Ian Elliott <ianelliott@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
//
// Copyright 2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// aligned_memory: An aligned memory allocator. Based on Chrome's base/memory/aligned_memory.
//
#include "common/aligned_memory.h"
#include "common/debug.h"
#include "common/platform.h"
#if defined(COMPILER_MSVC)
# include <malloc.h>
#else
# include <stdlib.h>
#endif
namespace angle
{
void *AlignedAlloc(size_t size, size_t alignment)
{
ASSERT(size > 0);
ASSERT((alignment & (alignment - 1)) == 0);
ASSERT((alignment % sizeof(void *)) == 0);
void *ptr = nullptr;
#if defined(ANGLE_PLATFORM_WINDOWS)
ptr = _aligned_malloc(size, alignment);
// Android technically supports posix_memalign(), but does not expose it in
// the current version of the library headers used by Chrome. Luckily,
// memalign() on Android returns pointers which can safely be used with
// free(), so we can use it instead. Issue filed to document this:
// http://code.google.com/p/android/issues/detail?id=35391
#elif defined(ANGLE_PLATFORM_ANDROID)
ptr = memalign(alignment, size);
#else
if (posix_memalign(&ptr, alignment, size))
ptr = nullptr;
#endif
// Since aligned allocations may fail for non-memory related reasons, force a
// crash if we encounter a failed allocation.
if (!ptr)
{
ERR() << "If you crashed here, your aligned allocation is incorrect: "
<< "size=" << size << ", alignment=" << alignment;
ASSERT(false);
}
// Confidence check alignment just to be safe.
ASSERT((reinterpret_cast<uintptr_t>(ptr) & (alignment - 1)) == 0);
return ptr;
}
void AlignedFree(void *ptr)
{
#if defined(ANGLE_PLATFORM_WINDOWS)
_aligned_free(ptr);
#else
free(ptr);
#endif
}
} // namespace angle