diff --git a/docs/drivers/zink.rst b/docs/drivers/zink.rst index 372dd643153..a2983e032d8 100644 --- a/docs/drivers/zink.rst +++ b/docs/drivers/zink.rst @@ -138,6 +138,8 @@ supported: * ``VkPhysicalDeviceVulkan11Features``: * ``shaderDrawParameters`` + * ``vertexPipelineStoresAndAtomics`` + * ``fragmentStoresAndAtomics`` * For Vulkan 1.1 and below: diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index b5c0a46eb67..206194de637 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -713,6 +713,24 @@ zink_get_shader_param(struct pipe_screen *pscreen, return 32; /* arbitrary */ case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS: + switch (shader) { + case PIPE_SHADER_VERTEX: + case PIPE_SHADER_TESS_CTRL: + case PIPE_SHADER_TESS_EVAL: + case PIPE_SHADER_GEOMETRY: + if (!screen->info.feats.features.vertexPipelineStoresAndAtomics) + return 0; + break; + + case PIPE_SHADER_FRAGMENT: + if (!screen->info.feats.features.fragmentStoresAndAtomics) + return 0; + break; + + default: + break; + } + /* TODO: this limitation is dumb, and will need some fixes in mesa */ return MIN2(screen->info.props.limits.maxPerStageDescriptorStorageBuffers, PIPE_MAX_SHADER_BUFFERS);