Skip to content
This repository has been archived by the owner on Apr 3, 2020. It is now read-only.

Commit

Permalink
[Blink] Use RefPtr to ref the associated WebCLContext in WebCLObject.
Browse files Browse the repository at this point in the history
Object derived from WebCLObject only keeps a weak reference to the
associated WebCLContext object, so it may happen that the WebCLContext
object is destructred after GC while the WebCLObject instance is still
alive. Use-after-free will happen then, for example, in
WebCLObject::~WebCLObject(). The following code shows a POC (xwalk
needs to be started with --js-flags=--expose-gc to call garbage
collection explicitly):

var f = function () {
  var context = webcl.createContext();
  return context.createCommandQueue();
};
var g = function() {
  var commandQueue = f();
  gc(); // To ensure WebCLContext::~WebCLContext() is called.
  commandQueue.release();
};
g();
gc(); // To ensure WebCLCommandQueue::~WebCLCommandQueue is called. Use-after-free happens in WebCLObject::~WebCLObject().

This patch changes the raw pointer used in WebCLObject to RefPtr so
that the WebCLContext object will not be destructed until all
WebCLObject instances in this context are dead. No circular reference
should be introduced here since WebCLObject instances are tracked
with weak pointers in WebCLContext.

BUG=XWALK-3979
  • Loading branch information
hujiajie authored and Raphael Kubo da Costa committed Nov 19, 2015
1 parent 46b7436 commit 5ad5a18
Show file tree
Hide file tree
Showing 19 changed files with 70 additions and 67 deletions.
4 changes: 2 additions & 2 deletions third_party/WebKit/Source/modules/webcl/WebCL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ static void validateWebCLEventList(const Vector<RefPtr<WebCLEvent>>& events, Exc
return;
}

WebCLContext* referenceContext = events[0]->context();
WebCLContext* referenceContext = events[0]->context().get();

for (auto event : events) {
if (event->isReleased() || (event->isUserEvent() && isSyncCall)) {
Expand All @@ -102,7 +102,7 @@ static void validateWebCLEventList(const Vector<RefPtr<WebCLEvent>>& events, Exc
}

ASSERT(event->context());
if (!WebCLInputChecker::compareContext(event->context(), referenceContext)) {
if (!WebCLInputChecker::compareContext(event->context().get(), referenceContext)) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down
4 changes: 2 additions & 2 deletions third_party/WebKit/Source/modules/webcl/WebCLBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ WebCLBuffer::~WebCLBuffer()
{
}

PassRefPtr<WebCLBuffer> WebCLBuffer::create(WebCLContext* context, unsigned memoryFlags, unsigned sizeInBytes, void* data, ExceptionState& es)
PassRefPtr<WebCLBuffer> WebCLBuffer::create(PassRefPtr<WebCLContext> context, unsigned memoryFlags, unsigned sizeInBytes, void* data, ExceptionState& es)
{
cl_context m_clContext = context->getContext();
if (!m_clContext) {
Expand Down Expand Up @@ -117,7 +117,7 @@ PassRefPtr<WebCLBuffer> WebCLBuffer::createSubBuffer(unsigned memoryFlags, unsig
return buffer.release();
}

WebCLBuffer::WebCLBuffer(cl_mem clMem, WebCLContext* context, unsigned memoryFlags, unsigned size, WebCLBuffer* parentBuffer)
WebCLBuffer::WebCLBuffer(cl_mem clMem, PassRefPtr<WebCLContext> context, unsigned memoryFlags, unsigned size, WebCLBuffer* parentBuffer)
: WebCLMemoryObject(clMem, size, context, parentBuffer)
, m_memoryFlags(memoryFlags)
{
Expand Down
4 changes: 2 additions & 2 deletions third_party/WebKit/Source/modules/webcl/WebCLBuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ class WebCLBuffer : public WebCLMemoryObject {
DEFINE_WRAPPERTYPEINFO();
public:
~WebCLBuffer() override;
static PassRefPtr<WebCLBuffer> create(WebCLContext*, unsigned, unsigned, void*, ExceptionState&);
static PassRefPtr<WebCLBuffer> create(PassRefPtr<WebCLContext>, unsigned, unsigned, void*, ExceptionState&);
PassRefPtr<WebCLBuffer> createSubBuffer(unsigned, unsigned, unsigned, ExceptionState&);

int type() override { return BUFFER; }

private:
WebCLBuffer(cl_mem, WebCLContext*, unsigned, unsigned, WebCLBuffer* parentBuffer = nullptr);
WebCLBuffer(cl_mem, PassRefPtr<WebCLContext>, unsigned, unsigned, WebCLBuffer* parentBuffer = nullptr);

unsigned m_memoryFlags;
};
Expand Down
56 changes: 28 additions & 28 deletions third_party/WebKit/Source/modules/webcl/WebCLCommandQueue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ WebCLCommandQueue::~WebCLCommandQueue()
ASSERT(!m_clCommandQueue);
}

PassRefPtr<WebCLCommandQueue> WebCLCommandQueue::create(cl_command_queue commandQueue, WebCLContext* context, WebCLDevice* device)
PassRefPtr<WebCLCommandQueue> WebCLCommandQueue::create(cl_command_queue commandQueue, PassRefPtr<WebCLContext> context, WebCLDevice* device)
{
return adoptRef(new WebCLCommandQueue(commandQueue, context, device));
}
Expand Down Expand Up @@ -225,7 +225,7 @@ void WebCLCommandQueue::enqueueWriteBufferBase(WebCLBuffer* mem, bool blockingWr
return;
}

if (!WebCLInputChecker::compareContext(context(), mem->context())) {
if (!WebCLInputChecker::compareContext(context().get(), mem->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -260,7 +260,7 @@ void WebCLCommandQueue::enqueueWriteBuffer(WebCLBuffer* mem, bool blockingWrite,

void WebCLCommandQueue::enqueueWriteBuffer(WebCLBuffer* buffer, bool blockingWrite, unsigned offset, ImageData* srcPixels, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -275,7 +275,7 @@ void WebCLCommandQueue::enqueueWriteBuffer(WebCLBuffer* buffer, bool blockingWri

void WebCLCommandQueue::enqueueWriteBuffer(WebCLBuffer* buffer, bool blockingWrite, unsigned offset, HTMLCanvasElement* srcCanvas, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -291,7 +291,7 @@ void WebCLCommandQueue::enqueueWriteBuffer(WebCLBuffer* buffer, bool blockingWri

void WebCLCommandQueue::enqueueWriteBuffer(WebCLBuffer* buffer, bool blockingWrite, unsigned offset, HTMLImageElement* srcImage, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand Down Expand Up @@ -326,7 +326,7 @@ void WebCLCommandQueue::enqueueWriteBufferRectBase(WebCLBuffer* mem, bool blocki
return;
}

if (!WebCLInputChecker::compareContext(context(), mem->context())) {
if (!WebCLInputChecker::compareContext(context().get(), mem->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -372,7 +372,7 @@ void WebCLCommandQueue::enqueueWriteBufferRect(WebCLBuffer* mem, bool blockingWr

void WebCLCommandQueue::enqueueWriteBufferRect(WebCLBuffer* buffer, bool blockingWrite, const Vector<unsigned>& bufferOrigin, const Vector<unsigned>& hostOrigin, const Vector<unsigned>& region, unsigned bufferRowPitch, unsigned bufferSlicePitch, ImageData* srcPixels, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -387,7 +387,7 @@ void WebCLCommandQueue::enqueueWriteBufferRect(WebCLBuffer* buffer, bool blockin

void WebCLCommandQueue::enqueueWriteBufferRect(WebCLBuffer* buffer, bool blockingWrite, const Vector<unsigned>& bufferOrigin, const Vector<unsigned>& hostOrigin, const Vector<unsigned>& region, unsigned bufferRowPitch, unsigned bufferSlicePitch, HTMLCanvasElement* srcCanvas, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -403,7 +403,7 @@ void WebCLCommandQueue::enqueueWriteBufferRect(WebCLBuffer* buffer, bool blockin

void WebCLCommandQueue::enqueueWriteBufferRect(WebCLBuffer* buffer, bool blockingWrite, const Vector<unsigned>& bufferOrigin, const Vector<unsigned>& hostOrigin, const Vector<unsigned>& region, unsigned bufferRowPitch, unsigned bufferSlicePitch, HTMLImageElement* srcImage, const Vector<RefPtr<WebCLEvent>>& eventWaitlist, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -424,7 +424,7 @@ void WebCLCommandQueue::enqueueReadBufferBase(WebCLBuffer* mem, bool blockingRea
return;
}

if (!WebCLInputChecker::compareContext(context(), mem->context())) {
if (!WebCLInputChecker::compareContext(context().get(), mem->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -469,7 +469,7 @@ void WebCLCommandQueue::enqueueReadBuffer(WebCLBuffer* mem, bool blockingRead, u

void WebCLCommandQueue::enqueueReadBuffer(WebCLBuffer* buffer, bool blockingRead, unsigned offset, unsigned numBytes, HTMLCanvasElement* dstCanvas, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -490,7 +490,7 @@ void WebCLCommandQueue::enqueueReadBufferRectBase(WebCLBuffer* mem, bool blockin
return;
}

if (!WebCLInputChecker::compareContext(context(), mem->context())) {
if (!WebCLInputChecker::compareContext(context().get(), mem->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -550,7 +550,7 @@ void WebCLCommandQueue::enqueueReadBufferRect(WebCLBuffer* mem, bool blockingRea

void WebCLCommandQueue::enqueueReadBufferRect(WebCLBuffer* buffer, bool blockingRead, const Vector<unsigned>& bufferOrigin, const Vector<unsigned>& hostOrigin, const Vector<unsigned>& region, unsigned bufferRowPitch, unsigned bufferSlicePitch, HTMLCanvasElement* dstCanvas, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -571,7 +571,7 @@ void WebCLCommandQueue::enqueueReadImageBase(WebCLImage* image, bool blockingRea
return;
}

if (!WebCLInputChecker::compareContext(context(), image->context())) {
if (!WebCLInputChecker::compareContext(context().get(), image->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -628,7 +628,7 @@ void WebCLCommandQueue::enqueueReadImage(WebCLImage* image, bool blockingRead, c

void WebCLCommandQueue::enqueueReadImage(WebCLImage* image, bool blockingRead, const Vector<unsigned>& origin, const Vector<unsigned>& region, HTMLCanvasElement* dstCanvas, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand Down Expand Up @@ -658,7 +658,7 @@ void WebCLCommandQueue::enqueueNDRangeKernel(WebCLKernel* kernel, unsigned dim,
}
}

if (!WebCLInputChecker::compareContext(context(), kernel->context())) {
if (!WebCLInputChecker::compareContext(context().get(), kernel->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -769,7 +769,7 @@ void WebCLCommandQueue::enqueueWriteImageBase(WebCLImage* image, bool blockingWr
}
}

if (!WebCLInputChecker::compareContext(context(), image->context())) {
if (!WebCLInputChecker::compareContext(context().get(), image->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -822,7 +822,7 @@ void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite,

void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite, const Vector<unsigned>& origin, const Vector<unsigned>& region, ImageData* srcPixels, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -837,7 +837,7 @@ void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite,

void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite, const Vector<unsigned>& origin, const Vector<unsigned>& region, HTMLCanvasElement* srcCanvas, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -853,7 +853,7 @@ void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite,

void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite, const Vector<unsigned>& origin, const Vector<unsigned>& region, HTMLImageElement* srcImage, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_image")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_image")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand All @@ -869,7 +869,7 @@ void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite,

void WebCLCommandQueue::enqueueWriteImage(WebCLImage* image, bool blockingWrite, HTMLVideoElement* srcVideo, const Vector<RefPtr<WebCLEvent>>& events, WebCLEvent* event, ExceptionState& es)
{
if (!isExtensionEnabled(context(), "WEBCL_html_video")) {
if (!isExtensionEnabled(context().get(), "WEBCL_html_video")) {
es.throwWebCLException(WebCLException::EXTENSION_NOT_ENABLED, WebCLException::extensionNotEnabledMessage);
return;
}
Expand Down Expand Up @@ -918,7 +918,7 @@ void WebCLCommandQueue::enqueueCopyBuffer(WebCLBuffer* srcBuffer, WebCLBuffer* d
}
}

if (!WebCLInputChecker::compareContext(context(), srcBuffer->context()) || !WebCLInputChecker::compareContext(context(), dstBuffer->context())) {
if (!WebCLInputChecker::compareContext(context().get(), srcBuffer->context().get()) || !WebCLInputChecker::compareContext(context().get(), dstBuffer->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -973,7 +973,7 @@ void WebCLCommandQueue::enqueueCopyBufferRect(WebCLBuffer* srcBuffer, WebCLBuffe
}
}

if (!WebCLInputChecker::compareContext(context(), srcBuffer->context()) || !WebCLInputChecker::compareContext(context(), dstBuffer->context())) {
if (!WebCLInputChecker::compareContext(context().get(), srcBuffer->context().get()) || !WebCLInputChecker::compareContext(context().get(), dstBuffer->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -1040,7 +1040,7 @@ void WebCLCommandQueue::enqueueCopyImage(WebCLImage* srcImage, WebCLImage* dstIm
}
}

if (!WebCLInputChecker::compareContext(context(), srcImage->context()) || !WebCLInputChecker::compareContext(context(), dstImage->context())) {
if (!WebCLInputChecker::compareContext(context().get(), srcImage->context().get()) || !WebCLInputChecker::compareContext(context().get(), dstImage->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -1109,7 +1109,7 @@ void WebCLCommandQueue::enqueueCopyImageToBuffer(WebCLImage* srcImage, WebCLBuff
}
}

if (!WebCLInputChecker::compareContext(context(), srcImage->context()) || !WebCLInputChecker::compareContext(context(), dstBuffer->context())) {
if (!WebCLInputChecker::compareContext(context().get(), srcImage->context().get()) || !WebCLInputChecker::compareContext(context().get(), dstBuffer->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -1169,7 +1169,7 @@ void WebCLCommandQueue::enqueueCopyBufferToImage(WebCLBuffer* srcBuffer, WebCLIm
}
}

if (!WebCLInputChecker::compareContext(context(), srcBuffer->context()) || !WebCLInputChecker::compareContext(context(), dstImage->context())) {
if (!WebCLInputChecker::compareContext(context().get(), srcBuffer->context().get()) || !WebCLInputChecker::compareContext(context().get(), dstImage->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
return;
}
Expand Down Expand Up @@ -1205,7 +1205,7 @@ void WebCLCommandQueue::enqueueCopyBufferToImage(WebCLBuffer* srcBuffer, WebCLIm
WebCLException::throwException(err, es);
}

WebCLCommandQueue::WebCLCommandQueue(cl_command_queue commandQueue, WebCLContext* context, WebCLDevice* device)
WebCLCommandQueue::WebCLCommandQueue(cl_command_queue commandQueue, PassRefPtr<WebCLContext> context, WebCLDevice* device)
: WebCLObject(context)
, m_whenFinishCallback(nullptr)
, m_eventForCallback(0)
Expand All @@ -1222,7 +1222,7 @@ Vector<cl_event> WebCLCommandQueue::WebCLEventVectorToCLEventVector(bool blockin
es.throwWebCLException(WebCLException::INVALID_EVENT_WAIT_LIST, WebCLException::invalidEventWaitListMessage);
break;
}
if (!WebCLInputChecker::compareContext(context(), event->context())) {
if (!WebCLInputChecker::compareContext(context().get(), event->context().get())) {
es.throwWebCLException(WebCLException::INVALID_CONTEXT, WebCLException::invalidContextMessage);
break;
}
Expand Down
4 changes: 2 additions & 2 deletions third_party/WebKit/Source/modules/webcl/WebCLCommandQueue.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class WebCLCommandQueue : public WebCLObject, public ScriptWrappable {
DEFINE_WRAPPERTYPEINFO();
public:
~WebCLCommandQueue() override;
static PassRefPtr<WebCLCommandQueue> create(cl_command_queue, WebCLContext*, WebCLDevice*);
static PassRefPtr<WebCLCommandQueue> create(cl_command_queue, PassRefPtr<WebCLContext>, WebCLDevice*);

ScriptValue getInfo(ScriptState*, int, ExceptionState&);
void enqueueWriteBuffer(WebCLBuffer*, bool, unsigned, unsigned, DOMArrayBufferView*, const Vector<RefPtr<WebCLEvent>>&, WebCLEvent*, ExceptionState&);
Expand Down Expand Up @@ -97,7 +97,7 @@ class WebCLCommandQueue : public WebCLObject, public ScriptWrappable {
void enqueueReadImageBase(WebCLImage*, bool, const Vector<unsigned>&, const Vector<unsigned>&, unsigned, void*, size_t, const Vector<RefPtr<WebCLEvent>>&, WebCLEvent*, ExceptionState&);
void enqueueWriteBufferRectBase(WebCLBuffer*, bool, const Vector<unsigned>&, const Vector<unsigned>&, const Vector<unsigned>&, unsigned, unsigned, unsigned, unsigned, void*, size_t, const Vector<RefPtr<WebCLEvent>>&, WebCLEvent*, ExceptionState&);
void enqueueWriteImageBase(WebCLImage*, bool, const Vector<unsigned>&, const Vector<unsigned>&, unsigned, void*, size_t, const Vector<RefPtr<WebCLEvent>>&, WebCLEvent*, ExceptionState&);
WebCLCommandQueue(cl_command_queue, WebCLContext*, WebCLDevice*);
WebCLCommandQueue(cl_command_queue, PassRefPtr<WebCLContext>, WebCLDevice*);
Vector<cl_event> WebCLEventVectorToCLEventVector(bool, Vector<RefPtr<WebCLEvent>>, ExceptionState&);
cl_event* WebCLEventPtrToCLEventPtr(WebCLEvent*, ExceptionState&);
bool isExtensionEnabled(WebCLContext*, const String& name) const;
Expand Down
Loading

0 comments on commit 5ad5a18

Please sign in to comment.