mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
zink: remove zink_get_param and zink_get_paramf
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32955>
This commit is contained in:
parent
ae12e6b325
commit
fe1d5d55f1
1 changed files with 0 additions and 578 deletions
|
|
@ -547,582 +547,6 @@ have_fp32_filter_linear(struct zink_screen *screen)
|
|||
return true;
|
||||
}
|
||||
|
||||
static int
|
||||
zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
{
|
||||
struct zink_screen *screen = zink_screen(pscreen);
|
||||
|
||||
switch (param) {
|
||||
case PIPE_CAP_NULL_TEXTURES:
|
||||
return screen->info.rb_image_feats.robustImageAccess;
|
||||
case PIPE_CAP_MULTIVIEW:
|
||||
/* support OVR_multiview and OVR_multiview2 */
|
||||
return screen->info.have_vulkan13 ? 2 * screen->info.feats11.multiview : 0;
|
||||
case PIPE_CAP_TEXRECT:
|
||||
case PIPE_CAP_MULTI_DRAW_INDIRECT_PARTIAL_STRIDE:
|
||||
return 0;
|
||||
case PIPE_CAP_ANISOTROPIC_FILTER:
|
||||
return screen->info.feats.features.samplerAnisotropy;
|
||||
case PIPE_CAP_EMULATE_NONFIXED_PRIMITIVE_RESTART:
|
||||
return 1;
|
||||
case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART: {
|
||||
uint32_t modes = BITFIELD_BIT(MESA_PRIM_LINE_STRIP) |
|
||||
BITFIELD_BIT(MESA_PRIM_TRIANGLE_STRIP) |
|
||||
BITFIELD_BIT(MESA_PRIM_LINE_STRIP_ADJACENCY) |
|
||||
BITFIELD_BIT(MESA_PRIM_TRIANGLE_STRIP_ADJACENCY);
|
||||
if (screen->have_triangle_fans)
|
||||
modes |= BITFIELD_BIT(MESA_PRIM_TRIANGLE_FAN);
|
||||
if (screen->info.have_EXT_primitive_topology_list_restart) {
|
||||
modes |= BITFIELD_BIT(MESA_PRIM_POINTS) |
|
||||
BITFIELD_BIT(MESA_PRIM_LINES) |
|
||||
BITFIELD_BIT(MESA_PRIM_LINES_ADJACENCY) |
|
||||
BITFIELD_BIT(MESA_PRIM_TRIANGLES) |
|
||||
BITFIELD_BIT(MESA_PRIM_TRIANGLES_ADJACENCY);
|
||||
if (screen->info.list_restart_feats.primitiveTopologyPatchListRestart)
|
||||
modes |= BITFIELD_BIT(MESA_PRIM_PATCHES);
|
||||
}
|
||||
return modes;
|
||||
}
|
||||
case PIPE_CAP_SUPPORTED_PRIM_MODES: {
|
||||
uint32_t modes = BITFIELD_MASK(MESA_PRIM_COUNT);
|
||||
if (!screen->have_triangle_fans || !screen->info.feats.features.geometryShader)
|
||||
modes &= ~BITFIELD_BIT(MESA_PRIM_QUADS);
|
||||
modes &= ~BITFIELD_BIT(MESA_PRIM_QUAD_STRIP);
|
||||
modes &= ~BITFIELD_BIT(MESA_PRIM_POLYGON);
|
||||
modes &= ~BITFIELD_BIT(MESA_PRIM_LINE_LOOP);
|
||||
if (!screen->have_triangle_fans)
|
||||
modes &= ~BITFIELD_BIT(MESA_PRIM_TRIANGLE_FAN);
|
||||
return modes;
|
||||
}
|
||||
|
||||
case PIPE_CAP_FBFETCH:
|
||||
#if defined(MVK_VERSION)
|
||||
return 0;
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
case PIPE_CAP_FBFETCH_COHERENT:
|
||||
return screen->info.have_EXT_rasterization_order_attachment_access;
|
||||
|
||||
case PIPE_CAP_MEMOBJ:
|
||||
return screen->instance_info.have_KHR_external_memory_capabilities && (screen->info.have_KHR_external_memory_fd || screen->info.have_KHR_external_memory_win32);
|
||||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
return screen->info.have_KHR_external_semaphore_fd || screen->info.have_KHR_external_semaphore_win32;
|
||||
case PIPE_CAP_NATIVE_FENCE_FD:
|
||||
return screen->instance_info.have_KHR_external_semaphore_capabilities && screen->info.have_KHR_external_semaphore_fd;
|
||||
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
||||
return screen->info.have_EXT_external_memory_host;
|
||||
|
||||
case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
|
||||
return screen->info.have_vulkan11 || screen->info.have_KHR_maintenance2;
|
||||
|
||||
case PIPE_CAP_VALIDATE_ALL_DIRTY_STATES:
|
||||
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
|
||||
case PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||
case PIPE_CAP_QUERY_MEMORY_INFO:
|
||||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
case PIPE_CAP_TGSI_TEXCOORD:
|
||||
case PIPE_CAP_DRAW_INDIRECT:
|
||||
case PIPE_CAP_TEXTURE_QUERY_LOD:
|
||||
case PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS:
|
||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||
case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
|
||||
case PIPE_CAP_SHADER_ARRAY_COMPONENTS:
|
||||
case PIPE_CAP_QUERY_BUFFER_OBJECT:
|
||||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||
case PIPE_CAP_CLIP_HALFZ:
|
||||
case PIPE_CAP_TEXTURE_QUERY_SAMPLES:
|
||||
case PIPE_CAP_TEXTURE_BARRIER:
|
||||
case PIPE_CAP_QUERY_SO_OVERFLOW:
|
||||
case PIPE_CAP_GL_SPIRV:
|
||||
case PIPE_CAP_CLEAR_SCISSORED:
|
||||
case PIPE_CAP_INVALIDATE_BUFFER:
|
||||
case PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_SHADER_PACK_HALF_FLOAT:
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
||||
case PIPE_CAP_LOAD_CONSTBUF:
|
||||
case PIPE_CAP_MULTISAMPLE_Z_RESOLVE:
|
||||
case PIPE_CAP_ALLOW_GLTHREAD_BUFFER_SUBDATA_OPT:
|
||||
case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
|
||||
case PIPE_CAP_CALL_FINALIZE_NIR_IN_LINKER:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_DRAW_VERTEX_STATE:
|
||||
return screen->info.have_EXT_vertex_input_dynamic_state;
|
||||
|
||||
case PIPE_CAP_SURFACE_SAMPLE_COUNT:
|
||||
return screen->vk_version >= VK_MAKE_VERSION(1,2,0);
|
||||
|
||||
case PIPE_CAP_SHADER_GROUP_VOTE:
|
||||
if (screen->info.have_vulkan11 &&
|
||||
(screen->info.subgroup.supportedOperations & VK_SUBGROUP_FEATURE_VOTE_BIT) &&
|
||||
(screen->info.subgroup.supportedStages & VK_SHADER_STAGE_COMPUTE_BIT))
|
||||
return true;
|
||||
if (screen->info.have_EXT_shader_subgroup_vote)
|
||||
return true;
|
||||
return false;
|
||||
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE:
|
||||
return screen->info.have_KHR_sampler_mirror_clamp_to_edge || (screen->info.have_vulkan12 && screen->info.feats12.samplerMirrorClampToEdge);
|
||||
|
||||
case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_POLYGON_OFFSET_CLAMP:
|
||||
return screen->info.feats.features.depthBiasClamp;
|
||||
|
||||
case PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE:
|
||||
return screen->info.feats.features.pipelineStatisticsQuery;
|
||||
|
||||
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
|
||||
return screen->info.feats.features.robustBufferAccess &&
|
||||
(screen->info.rb2_feats.robustImageAccess2 || screen->driver_compiler_workarounds.lower_robustImageAccess2);
|
||||
|
||||
case PIPE_CAP_MULTI_DRAW_INDIRECT:
|
||||
return screen->info.feats.features.multiDrawIndirect;
|
||||
|
||||
case PIPE_CAP_IMAGE_ATOMIC_FLOAT_ADD:
|
||||
return (screen->info.have_EXT_shader_atomic_float &&
|
||||
screen->info.atomic_float_feats.shaderSharedFloat32AtomicAdd &&
|
||||
screen->info.atomic_float_feats.shaderBufferFloat32AtomicAdd);
|
||||
case PIPE_CAP_SHADER_ATOMIC_INT64:
|
||||
return (screen->info.have_KHR_shader_atomic_int64 &&
|
||||
screen->info.atomic_int_feats.shaderSharedInt64Atomics &&
|
||||
screen->info.atomic_int_feats.shaderBufferInt64Atomics);
|
||||
|
||||
case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
|
||||
return screen->info.have_KHR_draw_indirect_count;
|
||||
|
||||
case PIPE_CAP_START_INSTANCE:
|
||||
case PIPE_CAP_DRAW_PARAMETERS:
|
||||
return (screen->info.have_vulkan12 && screen->info.feats11.shaderDrawParameters) ||
|
||||
screen->info.have_KHR_shader_draw_parameters;
|
||||
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
return screen->info.have_EXT_vertex_attribute_divisor;
|
||||
|
||||
case PIPE_CAP_MAX_VERTEX_STREAMS:
|
||||
return screen->info.tf_props.maxTransformFeedbackStreams;
|
||||
|
||||
case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES:
|
||||
return screen->info.have_NV_compute_shader_derivatives;
|
||||
|
||||
case PIPE_CAP_INT64:
|
||||
case PIPE_CAP_DOUBLES:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||
if (!screen->info.feats.features.dualSrcBlend)
|
||||
return 0;
|
||||
return screen->info.props.limits.maxFragmentDualSrcAttachments;
|
||||
|
||||
case PIPE_CAP_MAX_RENDER_TARGETS:
|
||||
return screen->info.props.limits.maxColorAttachments;
|
||||
|
||||
case PIPE_CAP_OCCLUSION_QUERY:
|
||||
return screen->info.feats.features.occlusionQueryPrecise;
|
||||
|
||||
case PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS:
|
||||
return screen->info.have_EXT_sample_locations && screen->info.have_EXT_extended_dynamic_state;
|
||||
|
||||
case PIPE_CAP_QUERY_TIME_ELAPSED:
|
||||
return screen->timestamp_valid_bits > 0;
|
||||
|
||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK:
|
||||
return screen->info.have_EXT_fragment_shader_interlock;
|
||||
|
||||
case PIPE_CAP_SHADER_CLOCK:
|
||||
return screen->info.have_KHR_shader_clock;
|
||||
|
||||
case PIPE_CAP_SHADER_BALLOT:
|
||||
if (screen->info.props11.subgroupSize > 64)
|
||||
return false;
|
||||
if (screen->info.have_vulkan11 &&
|
||||
screen->info.subgroup.supportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT)
|
||||
return true;
|
||||
if (screen->info.have_EXT_shader_subgroup_ballot)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
case PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION:
|
||||
return screen->spirv_version >= SPIRV_VERSION(1, 6) ||
|
||||
screen->info.have_EXT_shader_demote_to_helper_invocation;
|
||||
|
||||
case PIPE_CAP_SAMPLE_SHADING:
|
||||
return screen->info.feats.features.sampleRateShading;
|
||||
|
||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_VERTEX_INPUT_ALIGNMENT:
|
||||
return screen->info.have_EXT_legacy_vertex_attributes ? PIPE_VERTEX_INPUT_ALIGNMENT_NONE : PIPE_VERTEX_INPUT_ALIGNMENT_ELEMENT;
|
||||
|
||||
case PIPE_CAP_GL_CLAMP:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF:
|
||||
return 0; /* Assume that the vk driver is capable of moving imm arrays to some sort of constant storage on its own. */
|
||||
|
||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK: {
|
||||
enum pipe_quirk_texture_border_color_swizzle quirk = PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_ALPHA_NOT_W;
|
||||
if (!screen->info.border_color_feats.customBorderColorWithoutFormat)
|
||||
return quirk | PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_FREEDRENO;
|
||||
/* assume that if drivers don't implement this extension they either:
|
||||
* - don't support custom border colors
|
||||
* - handle things correctly
|
||||
* - hate border color accuracy
|
||||
*/
|
||||
if (screen->info.have_EXT_border_color_swizzle &&
|
||||
!screen->info.border_swizzle_feats.borderColorSwizzleFromImage)
|
||||
return quirk | PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50;
|
||||
return quirk;
|
||||
}
|
||||
|
||||
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
|
||||
return MIN2(screen->info.props.limits.maxImageDimension1D,
|
||||
screen->info.props.limits.maxImageDimension2D);
|
||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||
return 1 + util_logbase2(screen->info.props.limits.maxImageDimension3D);
|
||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||
return 1 + util_logbase2(screen->info.props.limits.maxImageDimensionCube);
|
||||
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||
return screen->info.feats.features.independentBlend;
|
||||
|
||||
case PIPE_CAP_DITHERING:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
|
||||
return screen->info.have_EXT_transform_feedback ? screen->info.tf_props.maxTransformFeedbackBuffers : 0;
|
||||
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
|
||||
case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS:
|
||||
return screen->info.have_EXT_transform_feedback;
|
||||
|
||||
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
||||
return screen->info.props.limits.maxImageArrayLayers;
|
||||
|
||||
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
||||
return screen->info.have_EXT_depth_clip_enable;
|
||||
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
return screen->info.have_EXT_shader_stencil_export;
|
||||
|
||||
case PIPE_CAP_VS_INSTANCEID:
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_MIN_TEXEL_OFFSET:
|
||||
return screen->info.props.limits.minTexelOffset;
|
||||
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
||||
return screen->info.props.limits.maxTexelOffset;
|
||||
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
|
||||
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
||||
return 460;
|
||||
|
||||
case PIPE_CAP_COMPUTE:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
||||
return screen->info.props.limits.minUniformBufferOffsetAlignment;
|
||||
|
||||
case PIPE_CAP_QUERY_TIMESTAMP:
|
||||
return screen->timestamp_valid_bits > 0;
|
||||
|
||||
case PIPE_CAP_QUERY_TIMESTAMP_BITS:
|
||||
return screen->timestamp_valid_bits;
|
||||
|
||||
case PIPE_CAP_TIMER_RESOLUTION:
|
||||
return ceil(screen->info.props.limits.timestampPeriod);
|
||||
|
||||
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
||||
return 1 << MIN_SLAB_ORDER;
|
||||
|
||||
case PIPE_CAP_CUBE_MAP_ARRAY:
|
||||
return screen->info.feats.features.imageCubeArray;
|
||||
|
||||
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_BINDLESS_TEXTURE:
|
||||
if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB &&
|
||||
(screen->info.db_props.maxDescriptorBufferBindings < 2 || screen->info.db_props.maxSamplerDescriptorBufferBindings < 2))
|
||||
return 0;
|
||||
return screen->info.have_EXT_descriptor_indexing;
|
||||
|
||||
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
|
||||
return screen->info.props.limits.minTexelBufferOffsetAlignment;
|
||||
|
||||
case PIPE_CAP_TEXTURE_TRANSFER_MODES: {
|
||||
enum pipe_texture_transfer_mode mode = PIPE_TEXTURE_TRANSFER_BLIT;
|
||||
if (!screen->is_cpu &&
|
||||
screen->info.have_KHR_8bit_storage &&
|
||||
screen->info.have_KHR_16bit_storage &&
|
||||
screen->info.have_KHR_shader_float16_int8)
|
||||
mode |= PIPE_TEXTURE_TRANSFER_COMPUTE;
|
||||
return mode;
|
||||
}
|
||||
|
||||
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
|
||||
return MIN2(get_smallest_buffer_heap(screen),
|
||||
screen->info.props.limits.maxTexelBufferElements);
|
||||
|
||||
case PIPE_CAP_ENDIANNESS:
|
||||
return PIPE_ENDIAN_NATIVE; /* unsure */
|
||||
|
||||
case PIPE_CAP_MAX_VIEWPORTS:
|
||||
return MIN2(screen->info.props.limits.maxViewports, PIPE_MAX_VIEWPORTS);
|
||||
|
||||
case PIPE_CAP_IMAGE_LOAD_FORMATTED:
|
||||
return screen->info.feats.features.shaderStorageImageReadWithoutFormat;
|
||||
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return screen->info.feats.features.shaderStorageImageWriteWithoutFormat;
|
||||
|
||||
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
|
||||
return screen->info.props.limits.maxGeometryOutputVertices;
|
||||
case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
|
||||
return screen->info.props.limits.maxGeometryTotalOutputComponents;
|
||||
|
||||
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
|
||||
return 4;
|
||||
|
||||
case PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET:
|
||||
return screen->info.props.limits.minTexelGatherOffset;
|
||||
case PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET:
|
||||
return screen->info.props.limits.maxTexelGatherOffset;
|
||||
|
||||
case PIPE_CAP_SAMPLER_REDUCTION_MINMAX_ARB:
|
||||
return screen->info.feats12.samplerFilterMinmax || screen->info.have_EXT_sampler_filter_minmax;
|
||||
|
||||
case PIPE_CAP_OPENCL_INTEGER_FUNCTIONS:
|
||||
case PIPE_CAP_INTEGER_MULTIPLY_32X16:
|
||||
return screen->info.have_INTEL_shader_integer_functions2;
|
||||
|
||||
case PIPE_CAP_FS_FINE_DERIVATIVE:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
return screen->info.props.vendorID;
|
||||
case PIPE_CAP_DEVICE_ID:
|
||||
return screen->info.props.deviceID;
|
||||
|
||||
case PIPE_CAP_ACCELERATED:
|
||||
return !screen->is_cpu;
|
||||
case PIPE_CAP_VIDEO_MEMORY:
|
||||
return get_video_mem(screen) >> 20;
|
||||
case PIPE_CAP_UMA:
|
||||
return screen->info.props.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
|
||||
|
||||
case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
|
||||
return screen->info.props.limits.maxVertexInputBindingStride;
|
||||
|
||||
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_VS_LAYER_VIEWPORT:
|
||||
case PIPE_CAP_TES_LAYER_VIEWPORT:
|
||||
return screen->info.have_EXT_shader_viewport_index_layer ||
|
||||
(screen->spirv_version >= SPIRV_VERSION(1, 5) &&
|
||||
screen->info.feats12.shaderOutputLayer &&
|
||||
screen->info.feats12.shaderOutputViewportIndex);
|
||||
|
||||
case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
|
||||
return have_fp32_filter_linear(screen);
|
||||
|
||||
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
|
||||
return screen->info.props.limits.minStorageBufferOffsetAlignment;
|
||||
|
||||
case PIPE_CAP_PCI_GROUP:
|
||||
case PIPE_CAP_PCI_BUS:
|
||||
case PIPE_CAP_PCI_DEVICE:
|
||||
case PIPE_CAP_PCI_FUNCTION:
|
||||
return 0; /* TODO: figure these out */
|
||||
|
||||
case PIPE_CAP_CULL_DISTANCE:
|
||||
return screen->info.feats.features.shaderCullDistance;
|
||||
|
||||
case PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE:
|
||||
return screen->info.feats.features.sparseResidencyBuffer ? ZINK_SPARSE_BUFFER_PAGE_SIZE : 0;
|
||||
|
||||
/* Sparse texture */
|
||||
case PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE:
|
||||
return screen->info.feats.features.sparseResidencyImage2D ?
|
||||
zink_get_param(pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE) : 0;
|
||||
case PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE:
|
||||
return screen->info.feats.features.sparseResidencyImage3D ?
|
||||
(1 << (zink_get_param(pscreen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) - 1)) : 0;
|
||||
case PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS:
|
||||
return screen->info.feats.features.sparseResidencyImage2D ?
|
||||
zink_get_param(pscreen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS) : 0;
|
||||
case PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS:
|
||||
return screen->info.feats.features.sparseResidencyImage2D ? 1 : 0;
|
||||
case PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY:
|
||||
return screen->info.feats.features.sparseResidency2Samples &&
|
||||
screen->info.feats.features.shaderResourceResidency ? 1 : 0;
|
||||
case PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD:
|
||||
return screen->info.feats.features.shaderResourceMinLod &&
|
||||
screen->info.feats.features.sparseResidency2Samples &&
|
||||
screen->info.feats.features.shaderResourceResidency ? 1 : 0;
|
||||
|
||||
case PIPE_CAP_VIEWPORT_SUBPIXEL_BITS:
|
||||
return screen->info.props.limits.viewportSubPixelBits;
|
||||
|
||||
case PIPE_CAP_MAX_GS_INVOCATIONS:
|
||||
return screen->info.props.limits.maxGeometryShaderInvocations;
|
||||
|
||||
case PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS:
|
||||
/* gallium handles this automatically */
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_SHADER_BUFFER_SIZE_UINT:
|
||||
/* 1<<27 is required by VK spec */
|
||||
assert(screen->info.props.limits.maxStorageBufferRange >= 1 << 27);
|
||||
/* clamp to VK spec minimum */
|
||||
return MIN2(get_smallest_buffer_heap(screen), screen->info.props.limits.maxStorageBufferRange);
|
||||
|
||||
case PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT:
|
||||
case PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_FS_COORD_ORIGIN_LOWER_LEFT:
|
||||
case PIPE_CAP_FS_COORD_PIXEL_CENTER_INTEGER:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL:
|
||||
case PIPE_CAP_FS_POINT_IS_SYSVAL:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_POINT_SIZE_FIXED:
|
||||
return screen->info.have_KHR_maintenance5 ? PIPE_POINT_SIZE_LOWER_USER_ONLY : PIPE_POINT_SIZE_LOWER_ALWAYS;
|
||||
case PIPE_CAP_FLATSHADE:
|
||||
case PIPE_CAP_ALPHA_TEST:
|
||||
case PIPE_CAP_CLIP_PLANES:
|
||||
case PIPE_CAP_TWO_SIDED_COLOR:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
|
||||
return screen->info.props.limits.maxTessellationControlPerPatchOutputComponents / 4;
|
||||
case PIPE_CAP_MAX_VARYINGS:
|
||||
/* need to reserve up to 60 of our varying components and 16 slots for streamout */
|
||||
return MIN2(screen->info.props.limits.maxVertexOutputComponents / 4 / 2, 16);
|
||||
|
||||
case PIPE_CAP_DMABUF:
|
||||
#if defined(HAVE_LIBDRM) && (DETECT_OS_LINUX || DETECT_OS_BSD)
|
||||
return screen->info.have_KHR_external_memory_fd &&
|
||||
screen->info.have_EXT_external_memory_dma_buf &&
|
||||
screen->info.have_EXT_queue_family_foreign
|
||||
? DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT
|
||||
: 0;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
case PIPE_CAP_DEPTH_BOUNDS_TEST:
|
||||
return screen->info.feats.features.depthBounds;
|
||||
|
||||
case PIPE_CAP_POST_DEPTH_COVERAGE:
|
||||
return screen->info.have_EXT_post_depth_coverage;
|
||||
|
||||
case PIPE_CAP_STRING_MARKER:
|
||||
return screen->instance_info.have_EXT_debug_utils;
|
||||
|
||||
default:
|
||||
return u_pipe_screen_get_param_defaults(pscreen, param);
|
||||
}
|
||||
}
|
||||
|
||||
static float
|
||||
zink_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
||||
{
|
||||
struct zink_screen *screen = zink_screen(pscreen);
|
||||
|
||||
switch (param) {
|
||||
case PIPE_CAPF_MIN_LINE_WIDTH:
|
||||
case PIPE_CAPF_MIN_LINE_WIDTH_AA:
|
||||
if (!screen->info.feats.features.wideLines)
|
||||
return 1.0f;
|
||||
return MAX2(screen->info.props.limits.lineWidthRange[0], 0.01);
|
||||
|
||||
case PIPE_CAPF_MIN_POINT_SIZE:
|
||||
case PIPE_CAPF_MIN_POINT_SIZE_AA:
|
||||
if (!screen->info.feats.features.largePoints)
|
||||
return 1.0f;
|
||||
return MAX2(screen->info.props.limits.pointSizeRange[0], 0.01);
|
||||
|
||||
|
||||
case PIPE_CAPF_LINE_WIDTH_GRANULARITY:
|
||||
if (!screen->info.feats.features.wideLines)
|
||||
return 0.1f;
|
||||
return screen->info.props.limits.lineWidthGranularity;
|
||||
|
||||
case PIPE_CAPF_POINT_SIZE_GRANULARITY:
|
||||
if (!screen->info.feats.features.largePoints)
|
||||
return 0.1f;
|
||||
return screen->info.props.limits.pointSizeGranularity;
|
||||
|
||||
|
||||
case PIPE_CAPF_MAX_LINE_WIDTH:
|
||||
case PIPE_CAPF_MAX_LINE_WIDTH_AA:
|
||||
if (!screen->info.feats.features.wideLines)
|
||||
return 1.0f;
|
||||
return screen->info.props.limits.lineWidthRange[1];
|
||||
|
||||
case PIPE_CAPF_MAX_POINT_SIZE:
|
||||
case PIPE_CAPF_MAX_POINT_SIZE_AA:
|
||||
if (!screen->info.feats.features.largePoints)
|
||||
return 1.0f;
|
||||
return screen->info.props.limits.pointSizeRange[1];
|
||||
|
||||
case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
|
||||
if (!screen->info.feats.features.samplerAnisotropy)
|
||||
return 1.0f;
|
||||
return screen->info.props.limits.maxSamplerAnisotropy;
|
||||
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return screen->info.props.limits.maxSamplerLodBias;
|
||||
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f; /* not implemented */
|
||||
}
|
||||
|
||||
/* should only get here on unhandled cases */
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
static int
|
||||
zink_get_shader_param(struct pipe_screen *pscreen,
|
||||
gl_shader_stage shader,
|
||||
|
|
@ -4028,8 +3452,6 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
|
|||
screen->base.get_compute_param = zink_get_compute_param;
|
||||
screen->base.get_timestamp = zink_get_timestamp;
|
||||
screen->base.query_memory_info = zink_query_memory_info;
|
||||
screen->base.get_param = zink_get_param;
|
||||
screen->base.get_paramf = zink_get_paramf;
|
||||
screen->base.get_shader_param = zink_get_shader_param;
|
||||
screen->base.get_compiler_options = zink_get_compiler_options;
|
||||
screen->base.get_sample_pixel_grid = zink_get_sample_pixel_grid;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue