zink: clamp sampler+samplerview limits
* struct shader_info provides a 32bit mask for textures_used * samplers and samplerviews are a 1:1 mapping for shader descriptors * also according to spec this is always 32 per stage Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8457>
This commit is contained in:
committed by
Marge Bot
parent
f4902bb189
commit
9d651d2a0f
@@ -547,7 +547,7 @@ zink_binding(gl_shader_stage stage, VkDescriptorType type, int index)
|
||||
unreachable("not supported");
|
||||
} else {
|
||||
uint32_t stage_offset = (uint32_t)stage * (PIPE_MAX_CONSTANT_BUFFERS +
|
||||
PIPE_MAX_SHADER_SAMPLER_VIEWS);
|
||||
PIPE_MAX_SAMPLERS);
|
||||
|
||||
switch (type) {
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
@@ -556,7 +556,7 @@ zink_binding(gl_shader_stage stage, VkDescriptorType type, int index)
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
assert(index < PIPE_MAX_SHADER_SAMPLER_VIEWS);
|
||||
assert(index < PIPE_MAX_SAMPLERS);
|
||||
return stage_offset + PIPE_MAX_CONSTANT_BUFFERS + index;
|
||||
|
||||
default:
|
||||
|
||||
@@ -69,7 +69,7 @@ struct zink_shader {
|
||||
int binding;
|
||||
VkDescriptorType type;
|
||||
unsigned char size;
|
||||
} bindings[PIPE_MAX_CONSTANT_BUFFERS + PIPE_MAX_SHADER_SAMPLER_VIEWS];
|
||||
} bindings[PIPE_MAX_CONSTANT_BUFFERS + PIPE_MAX_SAMPLERS];
|
||||
size_t num_bindings;
|
||||
struct set *programs;
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ struct zink_context {
|
||||
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];
|
||||
struct pipe_sampler_view *image_views[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
|
||||
unsigned num_image_views[PIPE_SHADER_TYPES];
|
||||
|
||||
float line_width;
|
||||
|
||||
@@ -309,14 +309,14 @@ zink_draw_vbo(struct pipe_context *pctx,
|
||||
}
|
||||
}
|
||||
|
||||
VkWriteDescriptorSet wds[PIPE_SHADER_TYPES * PIPE_MAX_CONSTANT_BUFFERS + PIPE_SHADER_TYPES * PIPE_MAX_SHADER_SAMPLER_VIEWS];
|
||||
struct zink_resource *write_desc_resources[PIPE_SHADER_TYPES * PIPE_MAX_CONSTANT_BUFFERS + PIPE_SHADER_TYPES * PIPE_MAX_SHADER_SAMPLER_VIEWS];
|
||||
VkWriteDescriptorSet wds[PIPE_SHADER_TYPES * PIPE_MAX_CONSTANT_BUFFERS + PIPE_SHADER_TYPES * PIPE_MAX_SAMPLERS];
|
||||
struct zink_resource *write_desc_resources[PIPE_SHADER_TYPES * PIPE_MAX_CONSTANT_BUFFERS + PIPE_SHADER_TYPES * PIPE_MAX_SAMPLERS];
|
||||
VkDescriptorBufferInfo buffer_infos[PIPE_SHADER_TYPES * PIPE_MAX_CONSTANT_BUFFERS];
|
||||
VkDescriptorImageInfo image_infos[PIPE_SHADER_TYPES * PIPE_MAX_SHADER_SAMPLER_VIEWS];
|
||||
VkDescriptorImageInfo image_infos[PIPE_SHADER_TYPES * PIPE_MAX_SAMPLERS];
|
||||
VkBufferView buffer_view[] = {VK_NULL_HANDLE};
|
||||
int num_wds = 0, num_buffer_info = 0, num_image_info = 0;
|
||||
|
||||
struct zink_resource *transitions[PIPE_SHADER_TYPES * PIPE_MAX_SHADER_SAMPLER_VIEWS];
|
||||
struct zink_resource *transitions[PIPE_SHADER_TYPES * PIPE_MAX_SAMPLERS];
|
||||
int num_transitions = 0;
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(ctx->gfx_stages); i++) {
|
||||
|
||||
@@ -477,20 +477,6 @@ zink_get_shader_param(struct pipe_screen *pscreen,
|
||||
return MIN2(max, 64); // prevent overflowing struct shader_info::outputs_read/written
|
||||
}
|
||||
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
switch (shader) {
|
||||
case PIPE_SHADER_VERTEX:
|
||||
case PIPE_SHADER_FRAGMENT:
|
||||
case PIPE_SHADER_GEOMETRY:
|
||||
case PIPE_SHADER_TESS_CTRL:
|
||||
case PIPE_SHADER_TESS_EVAL:
|
||||
/* this might be a bit simplistic... */
|
||||
return MIN2(screen->info.props.limits.maxPerStageDescriptorSamplers,
|
||||
PIPE_MAX_SAMPLERS);
|
||||
default:
|
||||
return 0; /* unsupported stage */
|
||||
}
|
||||
|
||||
case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE:
|
||||
return 65536;
|
||||
|
||||
@@ -524,9 +510,11 @@ zink_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
|
||||
return 0; /* not implemented */
|
||||
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS:
|
||||
return MIN2(screen->info.props.limits.maxPerStageDescriptorSampledImages,
|
||||
PIPE_MAX_SHADER_SAMPLER_VIEWS);
|
||||
return MIN2(MIN2(screen->info.props.limits.maxPerStageDescriptorSamplers,
|
||||
screen->info.props.limits.maxPerStageDescriptorSampledImages),
|
||||
PIPE_MAX_SAMPLERS);
|
||||
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
|
||||
|
||||
Reference in New Issue
Block a user