mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 11:38:05 +02:00
tc: add ARB_bindless_texture support
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
e53e374b26
commit
ed4fbb84d1
3 changed files with 133 additions and 1 deletions
|
|
@ -1085,6 +1085,128 @@ tc_stream_output_target_destroy(struct pipe_context *_pipe,
|
|||
}
|
||||
|
||||
|
||||
/********************************************************************
|
||||
* bindless
|
||||
*/
|
||||
|
||||
static uint64_t
|
||||
tc_create_texture_handle(struct pipe_context *_pipe,
|
||||
struct pipe_sampler_view *view,
|
||||
const struct pipe_sampler_state *state)
|
||||
{
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
struct pipe_context *pipe = tc->pipe;
|
||||
|
||||
tc_sync(tc);
|
||||
return pipe->create_texture_handle(pipe, view, state);
|
||||
}
|
||||
|
||||
static void
|
||||
tc_call_delete_texture_handle(struct pipe_context *pipe,
|
||||
union tc_payload *payload)
|
||||
{
|
||||
pipe->delete_texture_handle(pipe, payload->handle);
|
||||
}
|
||||
|
||||
static void
|
||||
tc_delete_texture_handle(struct pipe_context *_pipe, uint64_t handle)
|
||||
{
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
union tc_payload *payload =
|
||||
tc_add_small_call(tc, TC_CALL_delete_texture_handle);
|
||||
|
||||
payload->handle = handle;
|
||||
}
|
||||
|
||||
struct tc_make_texture_handle_resident
|
||||
{
|
||||
uint64_t handle;
|
||||
bool resident;
|
||||
};
|
||||
|
||||
static void
|
||||
tc_call_make_texture_handle_resident(struct pipe_context *pipe,
|
||||
union tc_payload *payload)
|
||||
{
|
||||
struct tc_make_texture_handle_resident *p =
|
||||
(struct tc_make_texture_handle_resident *)payload;
|
||||
|
||||
pipe->make_texture_handle_resident(pipe, p->handle, p->resident);
|
||||
}
|
||||
|
||||
static void
|
||||
tc_make_texture_handle_resident(struct pipe_context *_pipe, uint64_t handle,
|
||||
bool resident)
|
||||
{
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
struct tc_make_texture_handle_resident *p =
|
||||
tc_add_struct_typed_call(tc, TC_CALL_make_texture_handle_resident,
|
||||
tc_make_texture_handle_resident);
|
||||
|
||||
p->handle = handle;
|
||||
p->resident = resident;
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
tc_create_image_handle(struct pipe_context *_pipe,
|
||||
const struct pipe_image_view *image)
|
||||
{
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
struct pipe_context *pipe = tc->pipe;
|
||||
|
||||
tc_sync(tc);
|
||||
return pipe->create_image_handle(pipe, image);
|
||||
}
|
||||
|
||||
static void
|
||||
tc_call_delete_image_handle(struct pipe_context *pipe,
|
||||
union tc_payload *payload)
|
||||
{
|
||||
pipe->delete_image_handle(pipe, payload->handle);
|
||||
}
|
||||
|
||||
static void
|
||||
tc_delete_image_handle(struct pipe_context *_pipe, uint64_t handle)
|
||||
{
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
union tc_payload *payload =
|
||||
tc_add_small_call(tc, TC_CALL_delete_image_handle);
|
||||
|
||||
payload->handle = handle;
|
||||
}
|
||||
|
||||
struct tc_make_image_handle_resident
|
||||
{
|
||||
uint64_t handle;
|
||||
unsigned access;
|
||||
bool resident;
|
||||
};
|
||||
|
||||
static void
|
||||
tc_call_make_image_handle_resident(struct pipe_context *pipe,
|
||||
union tc_payload *payload)
|
||||
{
|
||||
struct tc_make_image_handle_resident *p =
|
||||
(struct tc_make_image_handle_resident *)payload;
|
||||
|
||||
pipe->make_image_handle_resident(pipe, p->handle, p->access, p->resident);
|
||||
}
|
||||
|
||||
static void
|
||||
tc_make_image_handle_resident(struct pipe_context *_pipe, uint64_t handle,
|
||||
unsigned access, bool resident)
|
||||
{
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
struct tc_make_image_handle_resident *p =
|
||||
tc_add_struct_typed_call(tc, TC_CALL_make_image_handle_resident,
|
||||
tc_make_image_handle_resident);
|
||||
|
||||
p->handle = handle;
|
||||
p->access = access;
|
||||
p->resident = resident;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************
|
||||
* transfer
|
||||
*/
|
||||
|
|
@ -2318,6 +2440,12 @@ threaded_context_create(struct pipe_context *pipe,
|
|||
CTX_INIT(create_fence_fd);
|
||||
CTX_INIT(fence_server_sync);
|
||||
CTX_INIT(get_timestamp);
|
||||
CTX_INIT(create_texture_handle);
|
||||
CTX_INIT(delete_texture_handle);
|
||||
CTX_INIT(make_texture_handle_resident);
|
||||
CTX_INIT(create_image_handle);
|
||||
CTX_INIT(delete_image_handle);
|
||||
CTX_INIT(make_image_handle_resident);
|
||||
#undef CTX_INIT
|
||||
|
||||
if (out)
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ union tc_payload {
|
|||
struct pipe_query *query;
|
||||
struct pipe_resource *resource;
|
||||
struct pipe_transfer *transfer;
|
||||
uint64_t __use_8_bytes;
|
||||
uint64_t handle;
|
||||
};
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
|
|
|||
|
|
@ -41,6 +41,10 @@ CALL(set_min_samples)
|
|||
CALL(set_polygon_stipple)
|
||||
CALL(texture_barrier)
|
||||
CALL(memory_barrier)
|
||||
CALL(delete_texture_handle)
|
||||
CALL(make_texture_handle_resident)
|
||||
CALL(delete_image_handle)
|
||||
CALL(make_image_handle_resident)
|
||||
|
||||
CALL(bind_blend_state)
|
||||
CALL(bind_rasterizer_state)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue