zink: fix crash when restoring sampler-states
When I changed to heap-allocated sampler-objects, I missed the code-path
that restores sampler-states after the blitter; it needs an array of
pointers, not an array of VkSampler objects to behave.
This fixes spec@arb_texture_cube_map@copyteximage for me.
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Fixes: 5ea787950f ("zink: heap-allocate samplers objects")
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -171,7 +171,7 @@ zink_blit(struct pipe_context *pctx,
|
||||
util_blitter_save_scissor(ctx->blitter, ctx->scissor_states);
|
||||
util_blitter_save_fragment_sampler_states(ctx->blitter,
|
||||
ctx->num_samplers[PIPE_SHADER_FRAGMENT],
|
||||
(void **)ctx->samplers[PIPE_SHADER_FRAGMENT]);
|
||||
ctx->sampler_states[PIPE_SHADER_FRAGMENT]);
|
||||
util_blitter_save_fragment_sampler_views(ctx->blitter,
|
||||
ctx->num_image_views[PIPE_SHADER_FRAGMENT],
|
||||
ctx->image_views[PIPE_SHADER_FRAGMENT]);
|
||||
|
||||
@@ -173,6 +173,7 @@ zink_bind_sampler_states(struct pipe_context *pctx,
|
||||
struct zink_context *ctx = zink_context(pctx);
|
||||
for (unsigned i = 0; i < num_samplers; ++i) {
|
||||
VkSampler *sampler = samplers[i];
|
||||
ctx->sampler_states[shader][start_slot + i] = sampler;
|
||||
ctx->samplers[shader][start_slot + i] = sampler ? *sampler : VK_NULL_HANDLE;
|
||||
}
|
||||
ctx->num_samplers[shader] = start_slot + num_samplers;
|
||||
|
||||
@@ -97,6 +97,7 @@ struct zink_context {
|
||||
struct pipe_vertex_buffer buffers[PIPE_MAX_ATTRIBS];
|
||||
uint32_t buffers_enabled_mask;
|
||||
|
||||
void *sampler_states[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
|
||||
VkSampler samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
|
||||
unsigned num_samplers[PIPE_SHADER_TYPES];
|
||||
struct pipe_sampler_view *image_views[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_SAMPLER_VIEWS];
|
||||
|
||||
Reference in New Issue
Block a user