tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Fence9.cpp (2038B)


      1 //
      2 // Copyright 2013 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // Fence9.cpp: Defines the rx::FenceNV9 class.
      8 
      9 #include "libANGLE/renderer/d3d/d3d9/Fence9.h"
     10 
     11 #include "libANGLE/Context.h"
     12 #include "libANGLE/renderer/d3d/d3d9/Context9.h"
     13 #include "libANGLE/renderer/d3d/d3d9/Renderer9.h"
     14 #include "libANGLE/renderer/d3d/d3d9/renderer9_utils.h"
     15 
     16 namespace rx
     17 {
     18 
     19 FenceNV9::FenceNV9(Renderer9 *renderer) : FenceNVImpl(), mRenderer(renderer), mQuery(nullptr) {}
     20 
     21 FenceNV9::~FenceNV9()
     22 {
     23    SafeRelease(mQuery);
     24 }
     25 
     26 angle::Result FenceNV9::set(const gl::Context *context, GLenum condition)
     27 {
     28    if (!mQuery)
     29    {
     30        ANGLE_TRY(mRenderer->allocateEventQuery(context, &mQuery));
     31    }
     32 
     33    HRESULT result = mQuery->Issue(D3DISSUE_END);
     34    if (FAILED(result))
     35    {
     36        SafeRelease(mQuery);
     37    }
     38    ANGLE_TRY_HR(GetImplAs<Context9>(context), result, "Failed to end event query");
     39    return angle::Result::Continue;
     40 }
     41 
     42 angle::Result FenceNV9::test(const gl::Context *context, GLboolean *outFinished)
     43 {
     44    return testHelper(GetImplAs<Context9>(context), true, outFinished);
     45 }
     46 
     47 angle::Result FenceNV9::finish(const gl::Context *context)
     48 {
     49    GLboolean finished = GL_FALSE;
     50    while (finished != GL_TRUE)
     51    {
     52        ANGLE_TRY(testHelper(GetImplAs<Context9>(context), true, &finished));
     53        Sleep(0);
     54    }
     55 
     56    return angle::Result::Continue;
     57 }
     58 
     59 angle::Result FenceNV9::testHelper(Context9 *context9,
     60                                   bool flushCommandBuffer,
     61                                   GLboolean *outFinished)
     62 {
     63    ASSERT(mQuery);
     64 
     65    DWORD getDataFlags = (flushCommandBuffer ? D3DGETDATA_FLUSH : 0);
     66    HRESULT result     = mQuery->GetData(nullptr, 0, getDataFlags);
     67    ANGLE_TRY_HR(context9, result, "Failed to get query data");
     68    ASSERT(result == S_OK || result == S_FALSE);
     69    *outFinished = ((result == S_OK) ? GL_TRUE : GL_FALSE);
     70    return angle::Result::Continue;
     71 }
     72 
     73 }  // namespace rx