mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 11:30:21 +01:00
dzn: Enable depth-bounds testing
Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16948>
This commit is contained in:
parent
9feda65a83
commit
e6301b886b
4 changed files with 47 additions and 3 deletions
|
|
@ -2365,6 +2365,16 @@ dzn_cmd_buffer_update_blend_constants(struct dzn_cmd_buffer *cmdbuf)
|
|||
cmdbuf->state.blend.constants);
|
||||
}
|
||||
|
||||
static void
|
||||
dzn_cmd_buffer_update_depth_bounds(struct dzn_cmd_buffer *cmdbuf)
|
||||
{
|
||||
if (cmdbuf->state.dirty & DZN_CMD_DIRTY_DEPTH_BOUNDS) {
|
||||
ID3D12GraphicsCommandList1_OMSetDepthBounds(cmdbuf->cmdlist,
|
||||
cmdbuf->state.zsa.depth_bounds.min,
|
||||
cmdbuf->state.zsa.depth_bounds.max);
|
||||
}
|
||||
}
|
||||
|
||||
static VkResult
|
||||
dzn_cmd_buffer_triangle_fan_create_index(struct dzn_cmd_buffer *cmdbuf, uint32_t *vertex_count)
|
||||
{
|
||||
|
|
@ -2507,6 +2517,7 @@ dzn_cmd_buffer_prepare_draw(struct dzn_cmd_buffer *cmdbuf, bool indexed)
|
|||
dzn_cmd_buffer_update_push_constants(cmdbuf, VK_PIPELINE_BIND_POINT_GRAPHICS);
|
||||
dzn_cmd_buffer_update_zsa(cmdbuf);
|
||||
dzn_cmd_buffer_update_blend_constants(cmdbuf);
|
||||
dzn_cmd_buffer_update_depth_bounds(cmdbuf);
|
||||
|
||||
if (indexed)
|
||||
dzn_cmd_buffer_update_ibview(cmdbuf);
|
||||
|
|
@ -3597,6 +3608,12 @@ dzn_CmdBindPipeline(VkCommandBuffer commandBuffer,
|
|||
cmdbuf->state.dirty |= DZN_CMD_DIRTY_STENCIL_REF;
|
||||
}
|
||||
|
||||
if (gfx->zsa.depth_bounds.enable && !gfx->zsa.depth_bounds.dynamic) {
|
||||
cmdbuf->state.zsa.depth_bounds.min = gfx->zsa.depth_bounds.min;
|
||||
cmdbuf->state.zsa.depth_bounds.max = gfx->zsa.depth_bounds.max;
|
||||
cmdbuf->state.dirty |= DZN_CMD_DIRTY_DEPTH_BOUNDS;
|
||||
}
|
||||
|
||||
if (!gfx->blend.dynamic_constants) {
|
||||
memcpy(cmdbuf->state.blend.constants, gfx->blend.constants,
|
||||
sizeof(cmdbuf->state.blend.constants));
|
||||
|
|
@ -4342,7 +4359,9 @@ dzn_CmdSetDepthBounds(VkCommandBuffer commandBuffer,
|
|||
{
|
||||
VK_FROM_HANDLE(dzn_cmd_buffer, cmdbuf, commandBuffer);
|
||||
|
||||
ID3D12GraphicsCommandList1_OMSetDepthBounds(cmdbuf->cmdlist, minDepthBounds, maxDepthBounds);
|
||||
cmdbuf->state.zsa.depth_bounds.min = minDepthBounds;
|
||||
cmdbuf->state.zsa.depth_bounds.max = maxDepthBounds;
|
||||
cmdbuf->state.dirty |= DZN_CMD_DIRTY_DEPTH_BOUNDS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ dzn_physical_device_cache_caps(struct dzn_physical_device *pdev)
|
|||
|
||||
ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_ARCHITECTURE1, &pdev->architecture, sizeof(pdev->architecture));
|
||||
ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_D3D12_OPTIONS, &pdev->options, sizeof(pdev->options));
|
||||
ID3D12Device1_CheckFeatureSupport(pdev->dev, D3D12_FEATURE_D3D12_OPTIONS2, &pdev->options2, sizeof(pdev->options2));
|
||||
|
||||
pdev->queue_families[pdev->queue_family_count++] = (struct dzn_queue_family) {
|
||||
.props = {
|
||||
|
|
@ -1029,6 +1030,14 @@ dzn_physical_device_supports_bc(struct dzn_physical_device *pdev)
|
|||
return dzn_physical_device_supports_compressed_format(pdev, formats, ARRAY_SIZE(formats));
|
||||
}
|
||||
|
||||
static bool
|
||||
dzn_physical_device_supports_depth_bounds(struct dzn_physical_device *pdev)
|
||||
{
|
||||
dzn_physical_device_get_d3d12_dev(pdev);
|
||||
|
||||
return pdev->options2.DepthBoundsTestSupported;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
dzn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceFeatures2 *pFeatures)
|
||||
|
|
@ -1050,7 +1059,7 @@ dzn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
|||
.depthClamp = false,
|
||||
.depthBiasClamp = false,
|
||||
.fillModeNonSolid = false,
|
||||
.depthBounds = false,
|
||||
.depthBounds = dzn_physical_device_supports_depth_bounds(pdev),
|
||||
.wideLines = false,
|
||||
.largePoints = false,
|
||||
.alphaToOne = false,
|
||||
|
|
|
|||
|
|
@ -792,7 +792,6 @@ dzn_graphics_pipeline_translate_zsa(struct dzn_graphics_pipeline *pipeline,
|
|||
if (!in_zsa)
|
||||
return;
|
||||
|
||||
/* TODO: depthBoundsTestEnable */
|
||||
d3d12_gfx_pipeline_state_stream_new_desc(out, DEPTH_STENCIL1, D3D12_DEPTH_STENCIL_DESC1, desc);
|
||||
|
||||
desc->DepthEnable = in_zsa->depthTestEnable;
|
||||
|
|
@ -801,6 +800,10 @@ dzn_graphics_pipeline_translate_zsa(struct dzn_graphics_pipeline *pipeline,
|
|||
D3D12_DEPTH_WRITE_MASK_ALL : D3D12_DEPTH_WRITE_MASK_ZERO;
|
||||
desc->DepthFunc =
|
||||
dzn_translate_compare_op(in_zsa->depthCompareOp);
|
||||
pipeline->zsa.depth_bounds.enable = in_zsa->depthBoundsTestEnable;
|
||||
pipeline->zsa.depth_bounds.min = in_zsa->minDepthBounds;
|
||||
pipeline->zsa.depth_bounds.max = in_zsa->maxDepthBounds;
|
||||
desc->DepthBoundsTestEnable = in_zsa->depthBoundsTestEnable;
|
||||
desc->StencilEnable = in_zsa->stencilTestEnable;
|
||||
if (in_zsa->stencilTestEnable) {
|
||||
desc->FrontFace.StencilFailOp =
|
||||
|
|
@ -1069,6 +1072,9 @@ dzn_graphics_pipeline_create(struct dzn_device *device,
|
|||
case VK_DYNAMIC_STATE_BLEND_CONSTANTS:
|
||||
pipeline->blend.dynamic_constants = true;
|
||||
break;
|
||||
case VK_DYNAMIC_STATE_DEPTH_BOUNDS:
|
||||
pipeline->zsa.depth_bounds.dynamic = true;
|
||||
break;
|
||||
default: unreachable("Unsupported dynamic state");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ struct dzn_physical_device {
|
|||
D3D_FEATURE_LEVEL feature_level;
|
||||
D3D12_FEATURE_DATA_ARCHITECTURE1 architecture;
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS options;
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS2 options2;
|
||||
VkPhysicalDeviceMemoryProperties memory;
|
||||
D3D12_HEAP_FLAGS heap_flags_for_mem_type[VK_MAX_MEMORY_TYPES];
|
||||
const struct vk_sync_type *sync_types[MAX_SYNC_TYPES + 1];
|
||||
|
|
@ -292,6 +293,7 @@ enum dzn_cmd_dirty {
|
|||
DZN_CMD_DIRTY_STENCIL_COMPARE_MASK = 1 << 4,
|
||||
DZN_CMD_DIRTY_STENCIL_WRITE_MASK = 1 << 5,
|
||||
DZN_CMD_DIRTY_BLEND_CONSTANTS = 1 << 6,
|
||||
DZN_CMD_DIRTY_DEPTH_BOUNDS = 1 << 7,
|
||||
};
|
||||
|
||||
#define MAX_VBS 16
|
||||
|
|
@ -474,6 +476,9 @@ struct dzn_cmd_buffer_state {
|
|||
uint32_t ref, compare_mask, write_mask;
|
||||
} front, back;
|
||||
} stencil_test;
|
||||
struct {
|
||||
float min, max;
|
||||
} depth_bounds;
|
||||
} zsa;
|
||||
struct {
|
||||
float constants[4];
|
||||
|
|
@ -735,6 +740,11 @@ struct dzn_graphics_pipeline {
|
|||
bool uses_ref;
|
||||
} front, back;
|
||||
} stencil_test;
|
||||
struct {
|
||||
bool enable;
|
||||
bool dynamic;
|
||||
float min, max;
|
||||
} depth_bounds;
|
||||
} zsa;
|
||||
|
||||
struct {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue