diff --git a/src/microsoft/ci/warp-fails.txt b/src/microsoft/ci/warp-fails.txt index e64478e339f..6922d1f7fc8 100644 --- a/src/microsoft/ci/warp-fails.txt +++ b/src/microsoft/ci/warp-fails.txt @@ -875,7 +875,9 @@ dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.depth_sten dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.depth_stencil.2d.d32_sfloat_s8_uint_d32_sfloat_s8_uint_separate_layouts.optimal_general_nearest,Fail dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.depth_stencil.2d.d32_sfloat_s8_uint_d32_sfloat_s8_uint_separate_layouts.optimal_optimal_nearest,Fail dEQP-VK.draw.renderpass.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail +dEQP-VK.draw.renderpass.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail dEQP-VK.draw.renderpass.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail +dEQP-VK.draw.renderpass.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail dEQP-VK.draw.renderpass.output_location.array.r8g8-uint-highp,Fail dEQP-VK.draw.renderpass.output_location.array.r8g8-uint-highp-output-uint,Fail dEQP-VK.draw.renderpass.output_location.array.r8g8-uint-mediump,Fail diff --git a/src/microsoft/vulkan/dzn_device.cpp b/src/microsoft/vulkan/dzn_device.cpp index 3312a06aeee..4b9c8eb09ec 100644 --- a/src/microsoft/vulkan/dzn_device.cpp +++ b/src/microsoft/vulkan/dzn_device.cpp @@ -994,7 +994,7 @@ dzn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, .independentBlend = false, .geometryShader = false, .tessellationShader = false, - .sampleRateShading = false, + .sampleRateShading = true, .dualSrcBlend = false, .logicOp = false, .multiDrawIndirect = false, @@ -1234,9 +1234,9 @@ dzn_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, .maxTexelOffset = 7, .minTexelGatherOffset = 0, .maxTexelGatherOffset = 0, - .minInterpolationOffset = 0.0f, - .maxInterpolationOffset = 0.0f, - .subPixelInterpolationOffsetBits = 0, + .minInterpolationOffset = -0.5f, + .maxInterpolationOffset = 0.5f, + .subPixelInterpolationOffsetBits = 4, .maxFramebufferWidth = 4096, .maxFramebufferHeight = 4096, .maxFramebufferLayers = 256, diff --git a/src/microsoft/vulkan/dzn_pipeline.cpp b/src/microsoft/vulkan/dzn_pipeline.cpp index 276ef05ef4c..9d2a3064eda 100644 --- a/src/microsoft/vulkan/dzn_pipeline.cpp +++ b/src/microsoft/vulkan/dzn_pipeline.cpp @@ -54,6 +54,7 @@ dzn_pipeline_compile_shader(dzn_device *device, const VkPipelineShaderStageCreateInfo *stage_info, enum dxil_spirv_yz_flip_mode yz_flip_mode, uint16_t y_flip_mask, uint16_t z_flip_mask, + bool force_sample_rate_shading, D3D12_SHADER_BYTECODE *slot) { dzn_instance *instance = @@ -121,6 +122,7 @@ dzn_pipeline_compile_shader(dzn_device *device, .z_mask = z_flip_mask, }, .read_only_images_as_srvs = true, + .force_sample_rate_shading = force_sample_rate_shading, }; struct dxil_spirv_debug_options dbg_opts = { @@ -392,9 +394,7 @@ dzn_graphics_pipeline_translate_ms(dzn_graphics_pipeline *pipeline, const VkPipelineMultisampleStateCreateInfo *in_ms = in_rast->rasterizerDiscardEnable ? NULL : in->pMultisampleState; - /* TODO: sampleShadingEnable, minSampleShading, - * alphaToOneEnable - */ + /* TODO: minSampleShading (use VRS), alphaToOneEnable */ out->SampleDesc.Count = in_ms ? in_ms->rasterizationSamples : 1; out->SampleDesc.Quality = 0; out->SampleMask = in_ms && in_ms->pSampleMask ? @@ -890,9 +890,15 @@ dzn_graphics_pipeline_create(dzn_device *device, } } + bool force_sample_rate_shading = + pCreateInfo->pStages[i].stage == VK_SHADER_STAGE_FRAGMENT_BIT && + pCreateInfo->pMultisampleState && + pCreateInfo->pMultisampleState->sampleShadingEnable; + ret = dzn_pipeline_compile_shader(device, pAllocator, layout, &pCreateInfo->pStages[i], - yz_flip_mode, y_flip_mask, z_flip_mask, slot); + yz_flip_mode, y_flip_mask, z_flip_mask, + force_sample_rate_shading, slot); if (ret != VK_SUCCESS) goto out; } @@ -1067,7 +1073,7 @@ dzn_compute_pipeline_create(dzn_device *device, dzn_pipeline_compile_shader(device, pAllocator, layout, &pCreateInfo->stage, DXIL_SPIRV_YZ_FLIP_NONE, 0, 0, - &desc.CS); + false, &desc.CS); if (ret != VK_SUCCESS) goto out;