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 <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14656>
This commit is contained in:
committed by
Marge Bot
parent
5ab0e3f0bb
commit
21abb01fb9
@@ -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},
|
||||
};
|
||||
|
||||
|
||||
@@ -134,6 +134,8 @@ struct lvp_physical_device {
|
||||
struct pipe_screen *pscreen;
|
||||
uint32_t max_images;
|
||||
|
||||
VkPhysicalDeviceLimits device_limits;
|
||||
|
||||
struct wsi_device wsi_device;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user