mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-05 14:13:39 +00:00
This reverts commit c7f454c24191131eb29b8f33f0e9d5b1702fd289 and relands commit 2479860e4bb0ef5a12d269557a088bace53f0f30. > D3D12: Stage BindGroups on CPU descriptor heaps. > > Instead of directly populating GPU heaps, pre-encoded > BindGroups are staged on CPU heaps then copied over > to the GPU. Non-shader visible allocators are stored > on the BGL, which hands out fixed-size chunks to > simplify memory managment. To enable memory re-use, > CPU allocations are tied to the lifetime of BindGroup > objects. Reason for revert: We can reland this CL now that the CTS suppression merged. Note: Adds validation to ensure binding size > 0. Bug: dawn:155 Bug: dawn:375 Change-Id: I75b9773bbb7c70bcea803a7ad8b6480d21ea90f7 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/18904 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Kai Ninomiya <kainino@chromium.org>
70 lines
2.2 KiB
C++
70 lines
2.2 KiB
C++
// Copyright 2017 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef COMMON_MATH_H_
|
|
#define COMMON_MATH_H_
|
|
|
|
#include "common/Assert.h"
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <cstring>
|
|
|
|
#include <limits>
|
|
#include <type_traits>
|
|
|
|
// The following are not valid for 0
|
|
uint32_t ScanForward(uint32_t bits);
|
|
uint32_t Log2(uint32_t value);
|
|
uint32_t Log2(uint64_t value);
|
|
bool IsPowerOfTwo(uint64_t n);
|
|
uint64_t RoundUp(uint64_t n, uint64_t m);
|
|
|
|
uint64_t NextPowerOfTwo(uint64_t n);
|
|
bool IsPtrAligned(const void* ptr, size_t alignment);
|
|
void* AlignVoidPtr(void* ptr, size_t alignment);
|
|
bool IsAligned(uint32_t value, size_t alignment);
|
|
uint32_t Align(uint32_t value, size_t alignment);
|
|
|
|
template <typename T>
|
|
DAWN_FORCE_INLINE T* AlignPtr(T* ptr, size_t alignment) {
|
|
ASSERT(IsPowerOfTwo(alignment));
|
|
ASSERT(alignment != 0);
|
|
return reinterpret_cast<T*>((reinterpret_cast<size_t>(ptr) + (alignment - 1)) &
|
|
~(alignment - 1));
|
|
}
|
|
|
|
template <typename T>
|
|
DAWN_FORCE_INLINE const T* AlignPtr(const T* ptr, size_t alignment) {
|
|
ASSERT(IsPowerOfTwo(alignment));
|
|
ASSERT(alignment != 0);
|
|
return reinterpret_cast<const T*>((reinterpret_cast<size_t>(ptr) + (alignment - 1)) &
|
|
~(alignment - 1));
|
|
}
|
|
|
|
template <typename destType, typename sourceType>
|
|
destType BitCast(const sourceType& source) {
|
|
static_assert(sizeof(destType) == sizeof(sourceType), "BitCast: cannot lose precision.");
|
|
destType output;
|
|
std::memcpy(&output, &source, sizeof(destType));
|
|
return output;
|
|
}
|
|
|
|
uint16_t Float32ToFloat16(float fp32);
|
|
bool IsFloat16NaN(uint16_t fp16);
|
|
|
|
float SRGBToLinear(float srgb);
|
|
|
|
#endif // COMMON_MATH_H_
|