Hash :
fa45eae4
Author :
Date :
2022-12-07T10:39:31
Vulkan: Remove QueryVk::hasUnsubmittedUse() QueryVk has a list stashed query helpers and current queryHelper. The mStashedQueryHelpers are always older than mQueryHelper. When we want to check if all queryHelpers has been submitted or not, we really only need to check the last one, which is mQueryHelper. There is no need to check mStashedQueryhelper. This CL turns that check against mStashedQueryhelper into an assertion inside finishRunningCommands. Bug: b/261737134 Change-Id: I2369e6690c46bcd338d4bfcb679a77478d3fdb84 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4087321 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
//
// Copyright 2016 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.
//
// QueryVk.h:
// Defines the class interface for QueryVk, implementing QueryImpl.
//
#ifndef LIBANGLE_RENDERER_VULKAN_QUERYVK_H_
#define LIBANGLE_RENDERER_VULKAN_QUERYVK_H_
#include "libANGLE/renderer/QueryImpl.h"
#include "libANGLE/renderer/vulkan/vk_helpers.h"
namespace rx
{
class TransformFeedbackVk;
class QueryVk : public QueryImpl
{
public:
QueryVk(gl::QueryType type);
~QueryVk() override;
void onDestroy(const gl::Context *context) override;
angle::Result begin(const gl::Context *context) override;
angle::Result end(const gl::Context *context) override;
angle::Result queryCounter(const gl::Context *context) override;
angle::Result getResult(const gl::Context *context, GLint *params) override;
angle::Result getResult(const gl::Context *context, GLuint *params) override;
angle::Result getResult(const gl::Context *context, GLint64 *params) override;
angle::Result getResult(const gl::Context *context, GLuint64 *params) override;
angle::Result isResultAvailable(const gl::Context *context, bool *available) override;
void onTransformFeedbackEnd(GLsizeiptr primitivesDrawn);
bool hasQueryBegun() const { return mQueryHelper.isReferenced(); }
vk::QueryHelper *getQueryHelper()
{
ASSERT(mQueryHelper.isReferenced());
return &mQueryHelper.get();
}
// Called by ContextVk on render pass start / end for render pass queries. These will
// stash and create new queries as needed.
angle::Result onRenderPassStart(ContextVk *contextVk);
void onRenderPassEnd(ContextVk *contextVk);
private:
angle::Result getResult(const gl::Context *context, bool wait);
bool isCurrentlyInUse(RendererVk *renderer) const;
angle::Result finishRunningCommands(ContextVk *contextVk);
void stashQueryHelper();
uint32_t getQueryResultCount(ContextVk *contextVk) const;
angle::Result accumulateStashedQueryResult(ContextVk *contextVk, vk::QueryResult *result);
// Manage query allocations
angle::Result allocateQuery(ContextVk *contextVk);
void assignSharedQuery(QueryVk *shareQuery);
void releaseQueries(ContextVk *contextVk);
void releaseStashedQueries(ContextVk *contextVk);
// Prepare for begin by handling peculiarities such as the two transform feedback queries
// sharing QueryHelpers.
angle::Result setupBegin(ContextVk *contextVk);
// Used for all queries, except TimeElapsed (begin) or those that are emulated. For transform
// feedback queries, these can be shared if the two queries are simultaneously active.
vk::Shared<vk::QueryHelper> mQueryHelper;
// Used for queries that may end up with multiple outstanding query helper objects as they end
// and begin again with render passes.
std::vector<vk::Shared<vk::QueryHelper>> mStashedQueryHelpers;
// An additional query used for TimeElapsed (begin), as it is implemented using Timestamp.
vk::QueryHelper mQueryHelperTimeElapsedBegin;
// Used with TransformFeedbackPrimitivesWritten when transform feedback is emulated.
size_t mTransformFeedbackPrimitivesDrawn;
uint64_t mCachedResult;
bool mCachedResultValid;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_QUERYVK_H_