From 90594a00a97b81b0c93fc85e08a618166b7113c0 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Tue, 7 Jan 2025 16:50:04 +0800 Subject: [PATCH] d3d12: remove d3d12_get_param and d3d12_get_paramf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Part-of: --- src/gallium/drivers/d3d12/d3d12_screen.cpp | 323 --------------------- 1 file changed, 323 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index 5ec89a47d7e..4c0b69bed93 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.cpp +++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp @@ -123,327 +123,6 @@ d3d12_get_video_mem(struct pipe_screen *pscreen) return static_cast(screen->memory_device_size_megabytes + screen->memory_system_size_megabytes); } -static int -d3d12_get_param_default(struct pipe_screen *pscreen, enum pipe_cap param) -{ - struct d3d12_screen *screen = d3d12_screen(pscreen); - - switch (param) { - case PIPE_CAP_NPOT_TEXTURES: - return 1; - - case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS: - /* D3D12 only supports dual-source blending for a single - * render-target. From the D3D11 functional spec (which also defines - * this for D3D12): - * - * "When Dual Source Color Blending is enabled, the Pixel Shader must - * have only a single RenderTarget bound, at slot 0, and must output - * both o0 and o1. Writing to other outputs (o2, o3 etc.) produces - * undefined results for the corresponding RenderTargets, if bound - * illegally." - * - * Source: https://microsoft.github.io/DirectX-Specs/d3d/archive/D3D11_3_FunctionalSpec.htm#17.6%20Dual%20Source%20Color%20Blending - */ - return 1; - - case PIPE_CAP_ANISOTROPIC_FILTER: - return 1; - - case PIPE_CAP_MAX_RENDER_TARGETS: - return D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; - - case PIPE_CAP_TEXTURE_SWIZZLE: - return 1; - - case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT: - return 1 << D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP; - - case PIPE_CAP_MAX_TEXTURE_2D_SIZE: - return D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION; - - case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: - static_assert(D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION == (1 << 11), - "D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION"); - return 12; - - case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: - return D3D12_REQ_MIP_LEVELS; - - case PIPE_CAP_PRIMITIVE_RESTART: - case PIPE_CAP_INDEP_BLEND_ENABLE: - case PIPE_CAP_INDEP_BLEND_FUNC: - case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD: - case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES: - case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: - case PIPE_CAP_MIXED_COLOR_DEPTH_BITS: - return 1; - - case PIPE_CAP_VERTEX_INPUT_ALIGNMENT: - return PIPE_VERTEX_INPUT_ALIGNMENT_4BYTE; - - /* We need to do some lowering that requires a link to the sampler */ - case PIPE_CAP_NIR_SAMPLERS_AS_DEREF: - return 1; - - case PIPE_CAP_NIR_IMAGES_AS_DEREF: - return 1; - - case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS: - return D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION; - - case PIPE_CAP_DEPTH_CLIP_DISABLE: - return 1; - - case PIPE_CAP_TGSI_TEXCOORD: - return 1; - - case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: - return 1; - - case PIPE_CAP_GLSL_FEATURE_LEVEL: - return 460; - case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: - return 460; - case PIPE_CAP_ESSL_FEATURE_LEVEL: - return 310; - - case PIPE_CAP_COMPUTE: - return 1; - - case PIPE_CAP_TEXTURE_MULTISAMPLE: - return 1; - - case PIPE_CAP_CUBE_MAP_ARRAY: - return 1; - - case PIPE_CAP_TEXTURE_BUFFER_OBJECTS: - return 1; - - case PIPE_CAP_TEXTURE_TRANSFER_MODES: - return PIPE_TEXTURE_TRANSFER_BLIT; - - case PIPE_CAP_ENDIANNESS: - return PIPE_ENDIAN_NATIVE; /* unsure */ - - case PIPE_CAP_MAX_VIEWPORTS: - return D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; - - case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES: - return 1; - - case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS: - return 4; - - case PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER: - case PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT: - return 1; - - case PIPE_CAP_ACCELERATED: - return screen->vendor_id != HW_VENDOR_MICROSOFT; - - case PIPE_CAP_VIDEO_MEMORY: - return d3d12_get_video_mem(pscreen); - - case PIPE_CAP_UMA: - return screen->architecture.UMA; - - case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE: - return 2048; /* FIXME: no clue how to query this */ - - case PIPE_CAP_TEXTURE_FLOAT_LINEAR: - case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR: - return 1; - - case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT: - return D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT; - - case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: - return D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT; - - 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_FLATSHADE: - case PIPE_CAP_ALPHA_TEST: - case PIPE_CAP_TWO_SIDED_COLOR: - case PIPE_CAP_CLIP_PLANES: - return 0; - - case PIPE_CAP_SHADER_STENCIL_EXPORT: - return screen->opts.PSSpecifiedStencilRefSupported; - - case PIPE_CAP_SEAMLESS_CUBE_MAP: - case PIPE_CAP_TEXTURE_QUERY_LOD: - case PIPE_CAP_VS_INSTANCEID: - case PIPE_CAP_TGSI_TEX_TXF_LZ: - case PIPE_CAP_OCCLUSION_QUERY: - case PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED: - case PIPE_CAP_PSIZ_CLAMPED: - case PIPE_CAP_BLEND_EQUATION_SEPARATE: - case PIPE_CAP_CONDITIONAL_RENDER: - case PIPE_CAP_CONDITIONAL_RENDER_INVERTED: - case PIPE_CAP_QUERY_TIMESTAMP: - case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR: - case PIPE_CAP_IMAGE_STORE_FORMATTED: - case PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS: - return 1; - - case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS: - return D3D12_SO_BUFFER_SLOT_COUNT; - - case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS: - case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS: - return D3D12_SO_OUTPUT_COMPONENT_COUNT; - - /* Geometry shader output. */ - case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES: - return D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES; - case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: - return D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT; - - case PIPE_CAP_MAX_VARYINGS: - /* Subtract one so that implicit position can be added */ - return D3D12_PS_INPUT_REGISTER_COUNT - 1; - - case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: - if (screen->max_feature_level <= D3D_FEATURE_LEVEL_11_0) - return D3D12_PS_CS_UAV_REGISTER_COUNT; - if (screen->opts.ResourceBindingTier <= D3D12_RESOURCE_BINDING_TIER_2) - return D3D12_UAV_SLOT_COUNT; - return 0; - - case PIPE_CAP_START_INSTANCE: - case PIPE_CAP_DRAW_PARAMETERS: - case PIPE_CAP_DRAW_INDIRECT: - case PIPE_CAP_MULTI_DRAW_INDIRECT: - case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS: - case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT: - case PIPE_CAP_SAMPLE_SHADING: - case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME: - case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS: - case PIPE_CAP_INT64: - case PIPE_CAP_DOUBLES: - case PIPE_CAP_DEVICE_RESET_STATUS_QUERY: - case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR: - case PIPE_CAP_MEMOBJ: - case PIPE_CAP_FENCE_SIGNAL: - case PIPE_CAP_TIMELINE_SEMAPHORE_IMPORT: - case PIPE_CAP_CLIP_HALFZ: - case PIPE_CAP_VS_LAYER_VIEWPORT: - case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS: - case PIPE_CAP_SHADER_ARRAY_COMPONENTS: - case PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE: - case PIPE_CAP_QUERY_TIME_ELAPSED: - case PIPE_CAP_FS_FINE_DERIVATIVE: - case PIPE_CAP_CULL_DISTANCE: - case PIPE_CAP_TEXTURE_QUERY_SAMPLES: - case PIPE_CAP_TEXTURE_BARRIER: - case PIPE_CAP_GL_SPIRV: - case PIPE_CAP_POLYGON_OFFSET_CLAMP: - case PIPE_CAP_SHADER_GROUP_VOTE: - case PIPE_CAP_SHADER_BALLOT: - case PIPE_CAP_QUERY_PIPELINE_STATISTICS: - case PIPE_CAP_QUERY_SO_OVERFLOW: - return 1; - - case PIPE_CAP_QUERY_BUFFER_OBJECT: - return (screen->opts3.WriteBufferImmediateSupportFlags & D3D12_COMMAND_LIST_SUPPORT_FLAG_DIRECT) != 0; - - case PIPE_CAP_MAX_VERTEX_STREAMS: - return D3D12_SO_BUFFER_SLOT_COUNT; - - case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS: - /* This is asking about varyings, not total registers, so remove the 2 tess factor registers. */ - return D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT - 2; - - case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET: - /* Picking a value in line with other drivers. Without this, we can end up easily hitting OOM - * if an app just creates, initializes, and destroys resources without explicitly flushing. */ - return 64 * 1024 * 1024; - - case PIPE_CAP_SAMPLER_VIEW_TARGET: - return screen->opts12.RelaxedFormatCastingSupported; - -#ifndef _GAMING_XBOX - case PIPE_CAP_QUERY_MEMORY_INFO: - return 1; -#endif - - default: - return u_pipe_screen_get_param_defaults(pscreen, param); - } -} - -static int -d3d12_get_generic_param(struct pipe_screen *pscreen, enum pipe_cap param) -{ - struct d3d12_screen *screen = d3d12_screen(pscreen); - switch (param) { - case PIPE_CAP_ACCELERATED: - return screen->vendor_id != HW_VENDOR_MICROSOFT; - case PIPE_CAP_VIDEO_MEMORY: - return d3d12_get_video_mem(pscreen); - case PIPE_CAP_UMA: - return screen->architecture.UMA; - default: - return 0; - } -} - -static int -d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param) -{ - struct d3d12_screen *screen = d3d12_screen(pscreen); - if (screen->max_feature_level < D3D_FEATURE_LEVEL_11_0) - return d3d12_get_generic_param(pscreen, param); - - return d3d12_get_param_default(pscreen, param); -} - -static float -d3d12_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param) -{ - switch (param) { - case PIPE_CAPF_MIN_LINE_WIDTH: - case PIPE_CAPF_MIN_LINE_WIDTH_AA: - case PIPE_CAPF_MIN_POINT_SIZE: - case PIPE_CAPF_MIN_POINT_SIZE_AA: - return 1; - - case PIPE_CAPF_POINT_SIZE_GRANULARITY: - case PIPE_CAPF_LINE_WIDTH_GRANULARITY: - return 0.1; - - case PIPE_CAPF_MAX_LINE_WIDTH: - case PIPE_CAPF_MAX_LINE_WIDTH_AA: - return 1.0f; /* no clue */ - - case PIPE_CAPF_MAX_POINT_SIZE: - case PIPE_CAPF_MAX_POINT_SIZE_AA: - return D3D12_MAX_POINT_SIZE; - - case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY: - return D3D12_MAX_MAXANISOTROPY; - - case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: - return 15.99f; - - 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 */ - - default: - unreachable("unknown pipe_capf"); - } - - return 0.0; -} - static int d3d12_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_type shader, @@ -1642,8 +1321,6 @@ d3d12_init_screen_base(struct d3d12_screen *screen, struct sw_winsys *winsys, LU screen->base.get_vendor = d3d12_get_vendor; screen->base.get_device_vendor = d3d12_get_device_vendor; screen->base.get_screen_fd = d3d12_screen_get_fd; - screen->base.get_param = d3d12_get_param; - screen->base.get_paramf = d3d12_get_paramf; screen->base.get_shader_param = d3d12_get_shader_param; screen->base.get_compute_param = d3d12_get_compute_param; screen->base.is_format_supported = d3d12_is_format_supported;