diff --git a/src/gallium/frontends/clover/api/memory.cpp b/src/gallium/frontends/clover/api/memory.cpp index f56df7b4d45..4ce0d3c6710 100644 --- a/src/gallium/frontends/clover/api/memory.cpp +++ b/src/gallium/frontends/clover/api/memory.cpp @@ -458,6 +458,10 @@ clGetImageInfo(cl_mem d_mem, cl_image_info param, buf.as_scalar() = img.array_size(); break; + case CL_IMAGE_BUFFER: + buf.as_scalar() = img.buffer(); + break; + case CL_IMAGE_NUM_MIP_LEVELS: buf.as_scalar() = 0; break; diff --git a/src/gallium/frontends/clover/core/memory.cpp b/src/gallium/frontends/clover/core/memory.cpp index c75da29fcce..251fad26f50 100644 --- a/src/gallium/frontends/clover/core/memory.cpp +++ b/src/gallium/frontends/clover/core/memory.cpp @@ -173,10 +173,11 @@ image::image(clover::context &ctx, const cl_image_format *format, size_t width, size_t height, size_t depth, size_t array_size, size_t row_pitch, size_t slice_pitch, size_t size, - void *host_ptr) : + void *host_ptr, cl_mem buffer) : memory_obj(ctx, properties, flags, size, host_ptr), _format(*format), _width(width), _height(height), _depth(depth), - _row_pitch(row_pitch), _slice_pitch(slice_pitch), _array_size(array_size) { + _row_pitch(row_pitch), _slice_pitch(slice_pitch), _array_size(array_size), + _buffer(buffer) { } resource & @@ -254,6 +255,11 @@ image::array_size() const { return _array_size; } +cl_mem +image::buffer() const { + return _buffer; +} + image1d::image1d(clover::context &ctx, std::vector properties, cl_mem_flags flags, @@ -261,7 +267,7 @@ image1d::image1d(clover::context &ctx, size_t width, size_t row_pitch, void *host_ptr) : basic_image(ctx, properties, flags, format, width, 1, 1, 0, - row_pitch, 0, row_pitch, host_ptr) { + row_pitch, 0, row_pitch, host_ptr, nullptr) { } image2d::image2d(clover::context &ctx, @@ -271,7 +277,7 @@ image2d::image2d(clover::context &ctx, size_t height, size_t row_pitch, void *host_ptr) : basic_image(ctx, properties, flags, format, width, height, 1, 0, - row_pitch, 0, height * row_pitch, host_ptr) { + row_pitch, 0, height * row_pitch, host_ptr, nullptr) { } image3d::image3d(clover::context &ctx, @@ -283,5 +289,5 @@ image3d::image3d(clover::context &ctx, void *host_ptr) : basic_image(ctx, properties, flags, format, width, height, depth, 0, row_pitch, slice_pitch, depth * slice_pitch, - host_ptr) { + host_ptr, nullptr) { } diff --git a/src/gallium/frontends/clover/core/memory.hpp b/src/gallium/frontends/clover/core/memory.hpp index 1c11ef98573..38cda7ce749 100644 --- a/src/gallium/frontends/clover/core/memory.hpp +++ b/src/gallium/frontends/clover/core/memory.hpp @@ -140,7 +140,7 @@ namespace clover { const cl_image_format *format, size_t width, size_t height, size_t depth, size_t array_size, size_t row_pitch, size_t slice_pitch, size_t size, - void *host_ptr); + void *host_ptr, cl_mem buffer); public: cl_image_format format() const; @@ -151,6 +151,7 @@ namespace clover { size_t row_pitch() const; size_t slice_pitch() const; size_t array_size() const; + cl_mem buffer() const; virtual clover::resource & resource_in(command_queue &q); virtual clover::resource & @@ -169,6 +170,7 @@ namespace clover { size_t _row_pitch; size_t _slice_pitch; size_t _array_size; + cl_mem _buffer; std::map> resources; std::mutex resources_mtx;