mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 08:00:12 +01:00
clover: Set appropriate flag defaults on memory object creation.
According to the spec when no device access mode is specified clCreateBuffer and clCreateImage* should default to read/write, and clCreateSubBuffer should default to the parent's device access flags. clCreateSubBuffer is also required to inherit the host access and host pointer flags from the parent. Reviewed-and-tested-by: EdB <edb+mesa@sigluy.net>
This commit is contained in:
parent
0e8460a528
commit
f8f3aa78d8
1 changed files with 18 additions and 8 deletions
|
|
@ -51,11 +51,13 @@ namespace {
|
|||
}
|
||||
|
||||
CLOVER_API cl_mem
|
||||
clCreateBuffer(cl_context d_ctx, cl_mem_flags flags, size_t size,
|
||||
clCreateBuffer(cl_context d_ctx, cl_mem_flags d_flags, size_t size,
|
||||
void *host_ptr, cl_int *r_errcode) try {
|
||||
const cl_mem_flags flags = d_flags |
|
||||
(d_flags & dev_access_flags ? 0 : CL_MEM_READ_WRITE);
|
||||
auto &ctx = obj(d_ctx);
|
||||
|
||||
validate_flags(flags, all_mem_flags);
|
||||
validate_flags(d_flags, all_mem_flags);
|
||||
|
||||
if (bool(host_ptr) != bool(flags & (CL_MEM_USE_HOST_PTR |
|
||||
CL_MEM_COPY_HOST_PTR)))
|
||||
|
|
@ -76,12 +78,16 @@ clCreateBuffer(cl_context d_ctx, cl_mem_flags flags, size_t size,
|
|||
}
|
||||
|
||||
CLOVER_API cl_mem
|
||||
clCreateSubBuffer(cl_mem d_mem, cl_mem_flags flags,
|
||||
clCreateSubBuffer(cl_mem d_mem, cl_mem_flags d_flags,
|
||||
cl_buffer_create_type op,
|
||||
const void *op_info, cl_int *r_errcode) try {
|
||||
auto &parent = obj<root_buffer>(d_mem);
|
||||
const cl_mem_flags flags = d_flags |
|
||||
(d_flags & dev_access_flags ? 0 : parent.flags() & dev_access_flags) |
|
||||
(d_flags & host_access_flags ? 0 : parent.flags() & host_access_flags) |
|
||||
(parent.flags() & host_ptr_flags);
|
||||
|
||||
validate_flags(flags, dev_access_flags | host_access_flags);
|
||||
validate_flags(d_flags, dev_access_flags | host_access_flags);
|
||||
|
||||
if (~flags & parent.flags() &
|
||||
((dev_access_flags & ~CL_MEM_READ_WRITE) | host_access_flags))
|
||||
|
|
@ -111,13 +117,15 @@ clCreateSubBuffer(cl_mem d_mem, cl_mem_flags flags,
|
|||
}
|
||||
|
||||
CLOVER_API cl_mem
|
||||
clCreateImage2D(cl_context d_ctx, cl_mem_flags flags,
|
||||
clCreateImage2D(cl_context d_ctx, cl_mem_flags d_flags,
|
||||
const cl_image_format *format,
|
||||
size_t width, size_t height, size_t row_pitch,
|
||||
void *host_ptr, cl_int *r_errcode) try {
|
||||
const cl_mem_flags flags = d_flags |
|
||||
(d_flags & dev_access_flags ? 0 : CL_MEM_READ_WRITE);
|
||||
auto &ctx = obj(d_ctx);
|
||||
|
||||
validate_flags(flags, all_mem_flags);
|
||||
validate_flags(d_flags, all_mem_flags);
|
||||
|
||||
if (!any_of(std::mem_fn(&device::image_support), ctx.devices()))
|
||||
throw error(CL_INVALID_OPERATION);
|
||||
|
|
@ -145,14 +153,16 @@ clCreateImage2D(cl_context d_ctx, cl_mem_flags flags,
|
|||
}
|
||||
|
||||
CLOVER_API cl_mem
|
||||
clCreateImage3D(cl_context d_ctx, cl_mem_flags flags,
|
||||
clCreateImage3D(cl_context d_ctx, cl_mem_flags d_flags,
|
||||
const cl_image_format *format,
|
||||
size_t width, size_t height, size_t depth,
|
||||
size_t row_pitch, size_t slice_pitch,
|
||||
void *host_ptr, cl_int *r_errcode) try {
|
||||
const cl_mem_flags flags = d_flags |
|
||||
(d_flags & dev_access_flags ? 0 : CL_MEM_READ_WRITE);
|
||||
auto &ctx = obj(d_ctx);
|
||||
|
||||
validate_flags(flags, all_mem_flags);
|
||||
validate_flags(d_flags, all_mem_flags);
|
||||
|
||||
if (!any_of(std::mem_fn(&device::image_support), ctx.devices()))
|
||||
throw error(CL_INVALID_OPERATION);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue