Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
src
gpu
graphite
PipelineData.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2022 Google LLC
3
*
4
* Use of this source code is governed by a BSD-style license that can be
5
* found in the LICENSE file.
6
*/
7
8
#include "
src/gpu/graphite/PipelineData.h
"
9
10
#include "
src/core/SkChecksum.h
"
11
#include "
src/gpu/graphite/ShaderCodeDictionary.h
"
12
13
namespace
skgpu::graphite
{
14
15
PipelineDataGatherer::PipelineDataGatherer
(
Layout
layout) : fUniformManager(layout) {}
16
17
void
PipelineDataGatherer::resetWithNewLayout
(
Layout
layout) {
18
fUniformManager.
resetWithNewLayout
(layout);
19
fTextureDataBlock.
reset
();
20
}
21
22
#ifdef SK_DEBUG
23
void
PipelineDataGatherer::checkReset() {
24
SkASSERT
(fTextureDataBlock.
empty
());
25
SkASSERT
(fUniformManager.isReset());
26
}
27
28
void
PipelineDataGatherer::setExpectedUniforms(
SkSpan<const Uniform>
expectedUniforms) {
29
fUniformManager.setExpectedUniforms(expectedUniforms);
30
}
31
#endif
// SK_DEBUG
32
33
////////////////////////////////////////////////////////////////////////////////////////////////////
34
UniformDataBlock
*
UniformDataBlock::Make
(
const
UniformDataBlock
& other,
SkArenaAlloc
* arena) {
35
static
constexpr
size_t
kUniformAlignment =
alignof
(
void
*);
36
char
* mem =
static_cast<
char
*
>
(arena->
makeBytesAlignedTo
(other.
size
(), kUniformAlignment));
37
memcpy(mem, other.
data
(), other.
size
());
38
39
return
arena->
make
([&](
void
* ptr) {
40
return
new
(ptr)
UniformDataBlock
(
SkSpan<const char>
(mem, other.
size
()));
41
});
42
}
43
44
uint32_t
UniformDataBlock::hash
()
const
{
45
return
SkChecksum::Hash32
(fData.
data
(), fData.
size
());
46
}
47
48
////////////////////////////////////////////////////////////////////////////////////////////////////
49
TextureDataBlock
*
TextureDataBlock::Make
(
const
TextureDataBlock
& other,
50
SkArenaAlloc
* arena) {
51
return
arena->
make
([&](
void
*ptr) {
52
return
new
(ptr)
TextureDataBlock
(other);
53
});
54
}
55
56
bool
TextureDataBlock::operator==
(
const
TextureDataBlock
& other)
const
{
57
if
(fTextureData.size() != other.fTextureData.size()) {
58
return
false
;
59
}
60
61
for
(
size_t
i = 0; i < fTextureData.size(); ++i) {
62
if
(fTextureData[i] != other.fTextureData[i]) {
63
return
false
;
64
}
65
}
66
67
return
true
;
68
}
69
70
uint32_t
TextureDataBlock::hash
()
const
{
71
uint32_t
hash
= 0;
72
73
for
(
auto
&
d
: fTextureData) {
74
SamplerDesc
samplerKey = std::get<1>(
d
);
75
hash
=
SkChecksum::Hash32
(&samplerKey,
sizeof
(samplerKey),
hash
);
76
77
// Because the lifetime of the TextureDataCache is for just one Recording and the
78
// TextureDataBlocks hold refs on their proxies, we can just use the proxy's pointer
79
// for the hash here.
80
uintptr_t proxy =
reinterpret_cast<
uintptr_t
>
(std::get<0>(
d
).get());
81
hash
=
SkChecksum::Hash32
(&proxy,
sizeof
(proxy),
hash
);
82
}
83
84
return
hash
;
85
}
86
87
#ifdef SK_DEBUG
88
UniformExpectationsValidator::UniformExpectationsValidator(
PipelineDataGatherer
*gatherer,
89
SkSpan<const Uniform>
expectedUniforms)
90
: fGatherer(gatherer) {
91
fGatherer->setExpectedUniforms(expectedUniforms);
92
}
93
#endif
94
95
}
// namespace skgpu::graphite
PipelineData.h
ShaderCodeDictionary.h
SkASSERT
#define SkASSERT(cond)
Definition
SkAssert.h:116
SkChecksum.h
SkArenaAlloc
Definition
SkArenaAlloc.h:105
SkArenaAlloc::makeBytesAlignedTo
void * makeBytesAlignedTo(size_t size, size_t align)
Definition
SkArenaAlloc.h:200
SkArenaAlloc::make
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
Definition
SkArenaAlloc.h:120
SkSpan
Definition
SkSpan_impl.h:65
SkSpan::data
constexpr T * data() const
Definition
SkSpan_impl.h:94
SkSpan::size
constexpr size_t size() const
Definition
SkSpan_impl.h:95
skgpu::graphite::PipelineDataGatherer
Definition
PipelineData.h:90
skgpu::graphite::PipelineDataGatherer::PipelineDataGatherer
PipelineDataGatherer(Layout layout)
Definition
PipelineData.cpp:15
skgpu::graphite::PipelineDataGatherer::resetWithNewLayout
void resetWithNewLayout(Layout layout)
Definition
PipelineData.cpp:17
skgpu::graphite::TextureDataBlock
Definition
PipelineData.h:52
skgpu::graphite::TextureDataBlock::hash
uint32_t hash() const
Definition
PipelineData.cpp:70
skgpu::graphite::TextureDataBlock::TextureDataBlock
TextureDataBlock()=default
skgpu::graphite::TextureDataBlock::operator==
bool operator==(const TextureDataBlock &) const
Definition
PipelineData.cpp:56
skgpu::graphite::TextureDataBlock::Make
static TextureDataBlock * Make(const TextureDataBlock &, SkArenaAlloc *)
Definition
PipelineData.cpp:49
skgpu::graphite::TextureDataBlock::empty
bool empty() const
Definition
PipelineData.h:59
skgpu::graphite::TextureDataBlock::reset
void reset()
Definition
PipelineData.h:73
skgpu::graphite::UniformDataBlock
Definition
PipelineData.h:30
skgpu::graphite::UniformDataBlock::hash
uint32_t hash() const
Definition
PipelineData.cpp:44
skgpu::graphite::UniformDataBlock::Make
static UniformDataBlock * Make(const UniformDataBlock &, SkArenaAlloc *)
Definition
PipelineData.cpp:34
skgpu::graphite::UniformDataBlock::data
const char * data() const
Definition
PipelineData.h:37
skgpu::graphite::UniformDataBlock::size
size_t size() const
Definition
PipelineData.h:38
skgpu::graphite::UniformDataBlock::UniformDataBlock
UniformDataBlock()=default
skgpu::graphite::UniformManager::resetWithNewLayout
void resetWithNewLayout(Layout layout)
Definition
UniformManager.cpp:61
d
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
Definition
main.cc:19
SkChecksum::Hash32
uint32_t Hash32(const void *data, size_t bytes, uint32_t seed)
Definition
SkChecksum.cpp:113
skgpu::graphite
Definition
BoundsManagerBench.cpp:27
skgpu::graphite::Layout
Layout
Definition
ResourceTypes.h:76
skgpu::graphite::SamplerDesc
Definition
ResourceTypes.h:201
Generated on Fri Apr 26 2024 06:17:19 for Flutter Engine by
1.9.8