From 21abb01fb967738fd0663da8bff3e6723cb99ef7 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 21 Jan 2022 16:37:33 -0500 Subject: [PATCH] lavapipe: make device limits a physical device struct it's useful to have this info around and a bit simpler to gather info on init Reviewed-by: Dave Airlie Part-of: --- src/gallium/frontends/lavapipe/lvp_device.c | 309 +++++++++---------- src/gallium/frontends/lavapipe/lvp_private.h | 2 + 2 files changed, 156 insertions(+), 155 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 09b9e698fc9..a7b03ea21b1 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -157,6 +157,29 @@ static const struct vk_device_extension_table lvp_device_extensions_supported = .GOOGLE_hlsl_functionality1 = true, }; +static int +min_vertex_pipeline_param(struct pipe_screen *pscreen, enum pipe_shader_cap param) +{ + int val = INT_MAX; + for (int i = 0; i < PIPE_SHADER_COMPUTE; ++i) { + if (i == PIPE_SHADER_FRAGMENT || + !pscreen->get_shader_param(pscreen, i, + PIPE_SHADER_CAP_MAX_INSTRUCTIONS)) + continue; + + val = MAX2(val, pscreen->get_shader_param(pscreen, i, param)); + } + return val; +} + +static int +min_shader_param(struct pipe_screen *pscreen, enum pipe_shader_cap param) +{ + return MIN3(min_vertex_pipeline_param(pscreen, param), + pscreen->get_shader_param(pscreen, PIPE_SHADER_FRAGMENT, param), + pscreen->get_shader_param(pscreen, PIPE_SHADER_COMPUTE, param)); +} + static VkResult VKAPI_CALL lvp_physical_device_init(struct lvp_physical_device *device, struct lvp_instance *instance, @@ -183,6 +206,136 @@ lvp_physical_device_init(struct lvp_physical_device *device, device->max_images = device->pscreen->get_shader_param(device->pscreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SHADER_IMAGES); device->vk.supported_extensions = lvp_device_extensions_supported; + + VkSampleCountFlags sample_counts = VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT; + + uint64_t grid_size[3], block_size[3]; + uint64_t max_threads_per_block, max_local_size; + + device->pscreen->get_compute_param(device->pscreen, PIPE_SHADER_IR_NIR, + PIPE_COMPUTE_CAP_MAX_GRID_SIZE, grid_size); + device->pscreen->get_compute_param(device->pscreen, PIPE_SHADER_IR_NIR, + PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, block_size); + device->pscreen->get_compute_param(device->pscreen, PIPE_SHADER_IR_NIR, + PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK, + &max_threads_per_block); + device->pscreen->get_compute_param(device->pscreen, PIPE_SHADER_IR_NIR, + PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE, + &max_local_size); + + const uint64_t max_render_targets = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_RENDER_TARGETS); + device->device_limits = (VkPhysicalDeviceLimits) { + .maxImageDimension1D = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), + .maxImageDimension2D = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), + .maxImageDimension3D = (1 << device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS)), + .maxImageDimensionCube = (1 << device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS)), + .maxImageArrayLayers = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS), + .maxTexelBufferElements = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE), + .maxUniformBufferRange = min_shader_param(device->pscreen, PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE), + .maxStorageBufferRange = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_SHADER_BUFFER_SIZE), + .maxPushConstantsSize = MAX_PUSH_CONSTANTS_SIZE, + .maxMemoryAllocationCount = UINT32_MAX, + .maxSamplerAllocationCount = 32 * 1024, + .bufferImageGranularity = 64, /* A cache line */ + .sparseAddressSpaceSize = 0, + .maxBoundDescriptorSets = MAX_SETS, + .maxPerStageDescriptorSamplers = min_shader_param(device->pscreen, PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS), + .maxPerStageDescriptorUniformBuffers = min_shader_param(device->pscreen, PIPE_SHADER_CAP_MAX_CONST_BUFFERS) - 1, + .maxPerStageDescriptorStorageBuffers = min_shader_param(device->pscreen, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS), + .maxPerStageDescriptorSampledImages = min_shader_param(device->pscreen, PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS), + .maxPerStageDescriptorStorageImages = min_shader_param(device->pscreen, PIPE_SHADER_CAP_MAX_SHADER_IMAGES), + .maxPerStageDescriptorInputAttachments = 8, + .maxPerStageResources = 128, + .maxDescriptorSetSamplers = 32 * 1024, + .maxDescriptorSetUniformBuffers = 256, + .maxDescriptorSetUniformBuffersDynamic = 256, + .maxDescriptorSetStorageBuffers = 256, + .maxDescriptorSetStorageBuffersDynamic = 256, + .maxDescriptorSetSampledImages = 256, + .maxDescriptorSetStorageImages = 256, + .maxDescriptorSetInputAttachments = 256, + .maxVertexInputAttributes = 32, + .maxVertexInputBindings = 32, + .maxVertexInputAttributeOffset = 2047, + .maxVertexInputBindingStride = 2048, + .maxVertexOutputComponents = 128, + .maxTessellationGenerationLevel = 64, + .maxTessellationPatchSize = 32, + .maxTessellationControlPerVertexInputComponents = 128, + .maxTessellationControlPerVertexOutputComponents = 128, + .maxTessellationControlPerPatchOutputComponents = 128, + .maxTessellationControlTotalOutputComponents = 4096, + .maxTessellationEvaluationInputComponents = 128, + .maxTessellationEvaluationOutputComponents = 128, + .maxGeometryShaderInvocations = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_GS_INVOCATIONS), + .maxGeometryInputComponents = 64, + .maxGeometryOutputComponents = 128, + .maxGeometryOutputVertices = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES), + .maxGeometryTotalOutputComponents = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS), + .maxFragmentInputComponents = 128, + .maxFragmentOutputAttachments = 8, + .maxFragmentDualSrcAttachments = 2, + .maxFragmentCombinedOutputResources = max_render_targets + + device->pscreen->get_shader_param(device->pscreen, PIPE_SHADER_FRAGMENT, + PIPE_SHADER_CAP_MAX_SHADER_BUFFERS) + + device->pscreen->get_shader_param(device->pscreen, PIPE_SHADER_FRAGMENT, + PIPE_SHADER_CAP_MAX_SHADER_IMAGES), + .maxComputeSharedMemorySize = max_local_size, + .maxComputeWorkGroupCount = { grid_size[0], grid_size[1], grid_size[2] }, + .maxComputeWorkGroupInvocations = max_threads_per_block, + .maxComputeWorkGroupSize = { block_size[0], block_size[1], block_size[2] }, + .subPixelPrecisionBits = device->pscreen->get_param(device->pscreen, PIPE_CAP_RASTERIZER_SUBPIXEL_BITS), + .subTexelPrecisionBits = 8, + .mipmapPrecisionBits = 4, + .maxDrawIndexedIndexValue = UINT32_MAX, + .maxDrawIndirectCount = UINT32_MAX, + .maxSamplerLodBias = 16, + .maxSamplerAnisotropy = 16, + .maxViewports = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_VIEWPORTS), + .maxViewportDimensions = { (1 << 14), (1 << 14) }, + .viewportBoundsRange = { -32768.0, 32768.0 }, + .viewportSubPixelBits = device->pscreen->get_param(device->pscreen, PIPE_CAP_VIEWPORT_SUBPIXEL_BITS), + .minMemoryMapAlignment = device->pscreen->get_param(device->pscreen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT), + .minTexelBufferOffsetAlignment = device->pscreen->get_param(device->pscreen, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT), + .minUniformBufferOffsetAlignment = device->pscreen->get_param(device->pscreen, PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT), + .minStorageBufferOffsetAlignment = device->pscreen->get_param(device->pscreen, PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT), + .minTexelOffset = device->pscreen->get_param(device->pscreen, PIPE_CAP_MIN_TEXEL_OFFSET), + .maxTexelOffset = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXEL_OFFSET), + .minTexelGatherOffset = device->pscreen->get_param(device->pscreen, PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET), + .maxTexelGatherOffset = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET), + .minInterpolationOffset = -2, /* FIXME */ + .maxInterpolationOffset = 2, /* FIXME */ + .subPixelInterpolationOffsetBits = 8, /* FIXME */ + .maxFramebufferWidth = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), + .maxFramebufferHeight = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), + .maxFramebufferLayers = device->pscreen->get_param(device->pscreen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS), + .framebufferColorSampleCounts = sample_counts, + .framebufferDepthSampleCounts = sample_counts, + .framebufferStencilSampleCounts = sample_counts, + .framebufferNoAttachmentsSampleCounts = sample_counts, + .maxColorAttachments = max_render_targets, + .sampledImageColorSampleCounts = sample_counts, + .sampledImageIntegerSampleCounts = sample_counts, + .sampledImageDepthSampleCounts = sample_counts, + .sampledImageStencilSampleCounts = sample_counts, + .storageImageSampleCounts = sample_counts, + .maxSampleMaskWords = 1, + .timestampComputeAndGraphics = true, + .timestampPeriod = 1, + .maxClipDistances = 8, + .maxCullDistances = 8, + .maxCombinedClipAndCullDistances = 8, + .discreteQueuePriorities = 2, + .pointSizeRange = { 0.0, device->pscreen->get_paramf(device->pscreen, PIPE_CAPF_MAX_POINT_SIZE) }, + .lineWidthRange = { 1.0, device->pscreen->get_paramf(device->pscreen, PIPE_CAPF_MAX_LINE_WIDTH) }, + .pointSizeGranularity = (1.0 / 8.0), + .lineWidthGranularity = 1.0 / 128.0, + .strictLines = true, + .standardSampleLocations = true, + .optimalBufferCopyOffsetAlignment = 128, + .optimalBufferCopyRowPitchAlignment = 128, + .nonCoherentAtomSize = 64, + }; result = lvp_init_wsi(device); if (result != VK_SUCCESS) { vk_physical_device_finish(&device->vk); @@ -372,29 +525,6 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_EnumeratePhysicalDeviceGroups( return vk_outarray_status(&out); } -static int -min_vertex_pipeline_param(struct pipe_screen *pscreen, enum pipe_shader_cap param) -{ - int val = INT_MAX; - for (int i = 0; i < PIPE_SHADER_COMPUTE; ++i) { - if (i == PIPE_SHADER_FRAGMENT || - !pscreen->get_shader_param(pscreen, i, - PIPE_SHADER_CAP_MAX_INSTRUCTIONS)) - continue; - - val = MAX2(val, pscreen->get_shader_param(pscreen, i, param)); - } - return val; -} - -static int -min_shader_param(struct pipe_screen *pscreen, enum pipe_shader_cap param) -{ - return MIN3(min_vertex_pipeline_param(pscreen, param), - pscreen->get_shader_param(pscreen, PIPE_SHADER_FRAGMENT, param), - pscreen->get_shader_param(pscreen, PIPE_SHADER_COMPUTE, param)); -} - VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFeatures( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) @@ -699,144 +829,13 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceProperties(VkPhysicalDevice phys { LVP_FROM_HANDLE(lvp_physical_device, pdevice, physicalDevice); - VkSampleCountFlags sample_counts = VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT; - - uint64_t grid_size[3], block_size[3]; - uint64_t max_threads_per_block, max_local_size; - - pdevice->pscreen->get_compute_param(pdevice->pscreen, PIPE_SHADER_IR_NIR, - PIPE_COMPUTE_CAP_MAX_GRID_SIZE, grid_size); - pdevice->pscreen->get_compute_param(pdevice->pscreen, PIPE_SHADER_IR_NIR, - PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, block_size); - pdevice->pscreen->get_compute_param(pdevice->pscreen, PIPE_SHADER_IR_NIR, - PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK, - &max_threads_per_block); - pdevice->pscreen->get_compute_param(pdevice->pscreen, PIPE_SHADER_IR_NIR, - PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE, - &max_local_size); - - const uint64_t max_render_targets = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_RENDER_TARGETS); - - VkPhysicalDeviceLimits limits = { - .maxImageDimension1D = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), - .maxImageDimension2D = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), - .maxImageDimension3D = (1 << pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS)), - .maxImageDimensionCube = (1 << pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS)), - .maxImageArrayLayers = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS), - .maxTexelBufferElements = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE), - .maxUniformBufferRange = min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE), - .maxStorageBufferRange = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_SHADER_BUFFER_SIZE), - .maxPushConstantsSize = MAX_PUSH_CONSTANTS_SIZE, - .maxMemoryAllocationCount = UINT32_MAX, - .maxSamplerAllocationCount = 32 * 1024, - .bufferImageGranularity = 64, /* A cache line */ - .sparseAddressSpaceSize = 0, - .maxBoundDescriptorSets = MAX_SETS, - .maxPerStageDescriptorSamplers = min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS), - .maxPerStageDescriptorUniformBuffers = min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_CONST_BUFFERS) - 1, - .maxPerStageDescriptorStorageBuffers = min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS), - .maxPerStageDescriptorSampledImages = min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS), - .maxPerStageDescriptorStorageImages = min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SHADER_IMAGES), - .maxPerStageDescriptorInputAttachments = 8, - .maxPerStageResources = 128, - .maxDescriptorSetSamplers = 32 * 1024, - .maxDescriptorSetUniformBuffers = 256, - .maxDescriptorSetUniformBuffersDynamic = 256, - .maxDescriptorSetStorageBuffers = 256, - .maxDescriptorSetStorageBuffersDynamic = 256, - .maxDescriptorSetSampledImages = 256, - .maxDescriptorSetStorageImages = 256, - .maxDescriptorSetInputAttachments = 256, - .maxVertexInputAttributes = 32, - .maxVertexInputBindings = 32, - .maxVertexInputAttributeOffset = 2047, - .maxVertexInputBindingStride = 2048, - .maxVertexOutputComponents = 128, - .maxTessellationGenerationLevel = 64, - .maxTessellationPatchSize = 32, - .maxTessellationControlPerVertexInputComponents = 128, - .maxTessellationControlPerVertexOutputComponents = 128, - .maxTessellationControlPerPatchOutputComponents = 128, - .maxTessellationControlTotalOutputComponents = 4096, - .maxTessellationEvaluationInputComponents = 128, - .maxTessellationEvaluationOutputComponents = 128, - .maxGeometryShaderInvocations = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_GS_INVOCATIONS), - .maxGeometryInputComponents = 64, - .maxGeometryOutputComponents = 128, - .maxGeometryOutputVertices = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES), - .maxGeometryTotalOutputComponents = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS), - .maxFragmentInputComponents = 128, - .maxFragmentOutputAttachments = 8, - .maxFragmentDualSrcAttachments = 2, - .maxFragmentCombinedOutputResources = max_render_targets + - pdevice->pscreen->get_shader_param(pdevice->pscreen, PIPE_SHADER_FRAGMENT, - PIPE_SHADER_CAP_MAX_SHADER_BUFFERS) + - pdevice->pscreen->get_shader_param(pdevice->pscreen, PIPE_SHADER_FRAGMENT, - PIPE_SHADER_CAP_MAX_SHADER_IMAGES), - .maxComputeSharedMemorySize = max_local_size, - .maxComputeWorkGroupCount = { grid_size[0], grid_size[1], grid_size[2] }, - .maxComputeWorkGroupInvocations = max_threads_per_block, - .maxComputeWorkGroupSize = { block_size[0], block_size[1], block_size[2] }, - .subPixelPrecisionBits = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_RASTERIZER_SUBPIXEL_BITS), - .subTexelPrecisionBits = 8, - .mipmapPrecisionBits = 4, - .maxDrawIndexedIndexValue = UINT32_MAX, - .maxDrawIndirectCount = UINT32_MAX, - .maxSamplerLodBias = 16, - .maxSamplerAnisotropy = 16, - .maxViewports = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_VIEWPORTS), - .maxViewportDimensions = { (1 << 14), (1 << 14) }, - .viewportBoundsRange = { -32768.0, 32768.0 }, - .viewportSubPixelBits = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_VIEWPORT_SUBPIXEL_BITS), - .minMemoryMapAlignment = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT), - .minTexelBufferOffsetAlignment = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT), - .minUniformBufferOffsetAlignment = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT), - .minStorageBufferOffsetAlignment = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT), - .minTexelOffset = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MIN_TEXEL_OFFSET), - .maxTexelOffset = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXEL_OFFSET), - .minTexelGatherOffset = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET), - .maxTexelGatherOffset = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET), - .minInterpolationOffset = -2, /* FIXME */ - .maxInterpolationOffset = 2, /* FIXME */ - .subPixelInterpolationOffsetBits = 8, /* FIXME */ - .maxFramebufferWidth = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), - .maxFramebufferHeight = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE), - .maxFramebufferLayers = pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS), - .framebufferColorSampleCounts = sample_counts, - .framebufferDepthSampleCounts = sample_counts, - .framebufferStencilSampleCounts = sample_counts, - .framebufferNoAttachmentsSampleCounts = sample_counts, - .maxColorAttachments = max_render_targets, - .sampledImageColorSampleCounts = sample_counts, - .sampledImageIntegerSampleCounts = sample_counts, - .sampledImageDepthSampleCounts = sample_counts, - .sampledImageStencilSampleCounts = sample_counts, - .storageImageSampleCounts = sample_counts, - .maxSampleMaskWords = 1, - .timestampComputeAndGraphics = true, - .timestampPeriod = 1, - .maxClipDistances = 8, - .maxCullDistances = 8, - .maxCombinedClipAndCullDistances = 8, - .discreteQueuePriorities = 2, - .pointSizeRange = { 0.0, pdevice->pscreen->get_paramf(pdevice->pscreen, PIPE_CAPF_MAX_POINT_SIZE) }, - .lineWidthRange = { 1.0, pdevice->pscreen->get_paramf(pdevice->pscreen, PIPE_CAPF_MAX_LINE_WIDTH) }, - .pointSizeGranularity = (1.0 / 8.0), - .lineWidthGranularity = 1.0 / 128.0, - .strictLines = true, - .standardSampleLocations = true, - .optimalBufferCopyOffsetAlignment = 128, - .optimalBufferCopyRowPitchAlignment = 128, - .nonCoherentAtomSize = 64, - }; - *pProperties = (VkPhysicalDeviceProperties) { .apiVersion = LVP_API_VERSION, .driverVersion = 1, .vendorID = VK_VENDOR_ID_MESA, .deviceID = 0, .deviceType = VK_PHYSICAL_DEVICE_TYPE_CPU, - .limits = limits, + .limits = pdevice->device_limits, .sparseProperties = {0}, }; diff --git a/src/gallium/frontends/lavapipe/lvp_private.h b/src/gallium/frontends/lavapipe/lvp_private.h index 07899225355..8edfa6bb977 100644 --- a/src/gallium/frontends/lavapipe/lvp_private.h +++ b/src/gallium/frontends/lavapipe/lvp_private.h @@ -134,6 +134,8 @@ struct lvp_physical_device { struct pipe_screen *pscreen; uint32_t max_images; + VkPhysicalDeviceLimits device_limits; + struct wsi_device wsi_device; };