mirror of https://github.com/xemu-project/xemu.git
nv2a/vk: Scale line width by surface scale
This commit is contained in:
parent
348b03d6ce
commit
d8afb35c40
|
@ -810,13 +810,21 @@ static void create_pipeline(PGRAPHState *pg)
|
||||||
// FIXME: Handle in shader?
|
// FIXME: Handle in shader?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float lineWidth = 1.0f;
|
||||||
|
if(r->physical_device_features.wideLines == VK_TRUE)
|
||||||
|
{
|
||||||
|
lineWidth = MIN(r->device_props.limits.lineWidthRange[1],
|
||||||
|
MAX(r->device_props.limits.lineWidthRange[0],
|
||||||
|
(float)pg->surface_scale_factor));
|
||||||
|
}
|
||||||
|
|
||||||
VkPipelineRasterizationStateCreateInfo rasterizer = {
|
VkPipelineRasterizationStateCreateInfo rasterizer = {
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
|
||||||
.depthClampEnable = VK_TRUE,
|
.depthClampEnable = VK_TRUE,
|
||||||
.rasterizerDiscardEnable = VK_FALSE,
|
.rasterizerDiscardEnable = VK_FALSE,
|
||||||
.polygonMode = pgraph_polygon_mode_vk_map[r->shader_binding->state
|
.polygonMode = pgraph_polygon_mode_vk_map[r->shader_binding->state
|
||||||
.polygon_front_mode],
|
.polygon_front_mode],
|
||||||
.lineWidth = 1.0f,
|
.lineWidth = lineWidth,
|
||||||
.frontFace = (pgraph_reg_r(pg, NV_PGRAPH_SETUPRASTER) &
|
.frontFace = (pgraph_reg_r(pg, NV_PGRAPH_SETUPRASTER) &
|
||||||
NV_PGRAPH_SETUPRASTER_FRONTFACE) ?
|
NV_PGRAPH_SETUPRASTER_FRONTFACE) ?
|
||||||
VK_FRONT_FACE_COUNTER_CLOCKWISE :
|
VK_FRONT_FACE_COUNTER_CLOCKWISE :
|
||||||
|
|
|
@ -523,15 +523,15 @@ static bool create_logical_device(PGRAPHState *pg, Error **errp)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Ensure device supports required features
|
// Ensure device supports required features
|
||||||
VkPhysicalDeviceFeatures available_features, enabled_features;
|
VkPhysicalDeviceFeatures enabled_features;
|
||||||
vkGetPhysicalDeviceFeatures(r->physical_device, &available_features);
|
vkGetPhysicalDeviceFeatures(r->physical_device, &r->physical_device_features);
|
||||||
memset(&enabled_features, 0, sizeof(enabled_features));
|
memset(&enabled_features, 0, sizeof(enabled_features));
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
VkBool32 available, *enabled;
|
VkBool32 available, *enabled;
|
||||||
} required_features[] = {
|
} required_features[] = {
|
||||||
#define F(n) { #n, available_features.n, &enabled_features.n }
|
#define F(n) { #n, r->physical_device_features.n, &enabled_features.n }
|
||||||
F(shaderClipDistance),
|
F(shaderClipDistance),
|
||||||
F(geometryShader),
|
F(geometryShader),
|
||||||
F(shaderTessellationAndGeometryPointSize),
|
F(shaderTessellationAndGeometryPointSize),
|
||||||
|
|
|
@ -334,6 +334,7 @@ typedef struct PGRAPHVkState {
|
||||||
bool memory_budget_extension_enabled;
|
bool memory_budget_extension_enabled;
|
||||||
|
|
||||||
VkPhysicalDevice physical_device;
|
VkPhysicalDevice physical_device;
|
||||||
|
VkPhysicalDeviceFeatures physical_device_features;
|
||||||
VkPhysicalDeviceProperties device_props;
|
VkPhysicalDeviceProperties device_props;
|
||||||
VkDevice device;
|
VkDevice device;
|
||||||
VmaAllocator allocator;
|
VmaAllocator allocator;
|
||||||
|
|
Loading…
Reference in New Issue