SWDEV-79445 - Remove cl_amd_object_metadata extension
Change-Id: I35502d5e3bd4be4a087f4b49b68098f8aa31fdb4
[ROCm/clr commit: 85c09043f3]
Этот коммит содержится в:
@@ -129,7 +129,6 @@ add_library(oclruntime OBJECT
|
||||
platform/command.cpp
|
||||
platform/ndrange.cpp
|
||||
platform/runtime.cpp
|
||||
platform/object.cpp
|
||||
platform/memory.cpp
|
||||
platform/program.cpp
|
||||
platform/commandqueue.cpp
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
/* Copyright (c) 2010-present Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include "platform/object.hpp"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
namespace amd {
|
||||
|
||||
Atomic<ObjectMetadata::Key> ObjectMetadata::nextKey_ = 1;
|
||||
|
||||
|
||||
ObjectMetadata::Destructor ObjectMetadata::destructors_[OCL_MAX_KEYS] = {NULL};
|
||||
|
||||
|
||||
bool ObjectMetadata::check(Key key) { return key > 0 && key <= OCL_MAX_KEYS; }
|
||||
|
||||
ObjectMetadata::Key ObjectMetadata::createKey(Destructor destructor) {
|
||||
Key key = nextKey_++;
|
||||
|
||||
if (!check(key)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
destructors_[key - 1] = destructor;
|
||||
return key;
|
||||
}
|
||||
|
||||
ObjectMetadata::~ObjectMetadata() {
|
||||
if (!values_) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < OCL_MAX_KEYS; ++i) {
|
||||
if (values_[i] && destructors_[i]) {
|
||||
destructors_[i](values_[i]);
|
||||
}
|
||||
}
|
||||
|
||||
delete[] values_;
|
||||
}
|
||||
|
||||
void* ObjectMetadata::getValueForKey(Key key) const {
|
||||
if (!values_ || !check(key)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return values_[key - 1];
|
||||
}
|
||||
|
||||
bool ObjectMetadata::setValueForKey(Key key, Value value) {
|
||||
if (!check(key)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (!values_) {
|
||||
Value* values = new Value[OCL_MAX_KEYS];
|
||||
memset(values, '\0', sizeof(Value) * OCL_MAX_KEYS);
|
||||
|
||||
if (!values_.compareAndSet(NULL, values)) {
|
||||
delete[] values;
|
||||
}
|
||||
}
|
||||
|
||||
size_t index = key - 1;
|
||||
Value prev = AtomicOperation::swap(value, &values_[index]);
|
||||
if (prev && destructors_[index] != NULL) {
|
||||
destructors_[index](prev);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace amd
|
||||
@@ -128,42 +128,9 @@ struct ICDDispatchedObject {
|
||||
}
|
||||
};
|
||||
|
||||
#define OCL_MAX_KEYS 8
|
||||
|
||||
/*! The object metadata container.
|
||||
*/
|
||||
class ObjectMetadata {
|
||||
public:
|
||||
typedef size_t Key;
|
||||
typedef void* Value;
|
||||
|
||||
private:
|
||||
typedef void(CL_CALLBACK* Destructor)(Value);
|
||||
|
||||
static Atomic<Key> nextKey_;
|
||||
static Destructor destructors_[OCL_MAX_KEYS];
|
||||
|
||||
Atomic<Value*> values_;
|
||||
|
||||
public:
|
||||
static bool check(Key key);
|
||||
|
||||
static Key createKey(Destructor destructor = NULL);
|
||||
|
||||
ObjectMetadata() : values_(NULL) {}
|
||||
~ObjectMetadata();
|
||||
|
||||
Value getValueForKey(Key key) const;
|
||||
|
||||
bool setValueForKey(Key key, Value value);
|
||||
};
|
||||
|
||||
/*! \brief For all OpenCL/Runtime objects.
|
||||
*/
|
||||
class RuntimeObject : public ReferenceCountedObject, public ICDDispatchedObject {
|
||||
private:
|
||||
ObjectMetadata metadata_;
|
||||
|
||||
public:
|
||||
enum ObjectType {
|
||||
ObjectTypeContext = 0,
|
||||
@@ -180,7 +147,6 @@ class RuntimeObject : public ReferenceCountedObject, public ICDDispatchedObject
|
||||
ObjectTypeLiquidFlashFile = 11
|
||||
};
|
||||
|
||||
ObjectMetadata& metadata() { return metadata_; }
|
||||
virtual ObjectType objectType() const = 0;
|
||||
};
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user