vkd3d: Implement ClearState.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2021-03-13 21:08:04 +01:00
parent 4e31f5d54d
commit 52a9c85bf2
2 changed files with 28 additions and 15 deletions

View File

@ -3312,7 +3312,7 @@ interface ID3D12GraphicsCommandList : ID3D12CommandList
HRESULT Reset(ID3D12CommandAllocator *allocator, ID3D12PipelineState *initial_state);
HRESULT ClearState(ID3D12PipelineState *pipeline_state);
void ClearState(ID3D12PipelineState *pipeline_state);
void DrawInstanced(UINT vertex_count_per_instance, UINT instance_count,
UINT start_vertex_location, UINT start_instance_location);

View File

@ -3770,7 +3770,7 @@ bool d3d12_command_list_reset_query(struct d3d12_command_list *list,
return true;
}
static void d3d12_command_list_reset_state(struct d3d12_command_list *list,
static void d3d12_command_list_reset_api_state(struct d3d12_command_list *list,
ID3D12PipelineState *initial_pipeline_state)
{
d3d12_command_list_iface *iface = &list->ID3D12GraphicsCommandList_iface;
@ -3786,17 +3786,10 @@ static void d3d12_command_list_reset_state(struct d3d12_command_list *list,
list->fb_layer_count = 0;
list->xfb_enabled = false;
list->render_pass_suspended = false;
list->predicate_enabled = false;
list->predicate_va = 0;
#ifdef VKD3D_ENABLE_RENDERDOC
list->debug_capture = vkd3d_renderdoc_active() && vkd3d_renderdoc_should_capture_shader_hash(0);
#else
list->debug_capture = false;
#endif
list->has_replaced_shaders = false;
list->has_valid_index_buffer = false;
list->current_framebuffer = VK_NULL_HANDLE;
@ -3831,14 +3824,33 @@ static void d3d12_command_list_reset_state(struct d3d12_command_list *list,
memset(list->so_counter_buffers, 0, sizeof(list->so_counter_buffers));
memset(list->so_counter_buffer_offsets, 0, sizeof(list->so_counter_buffer_offsets));
list->cbv_srv_uav_descriptors = NULL;
ID3D12GraphicsCommandList_SetPipelineState(iface, initial_pipeline_state);
}
static void d3d12_command_list_reset_internal_state(struct d3d12_command_list *list)
{
#ifdef VKD3D_ENABLE_RENDERDOC
list->debug_capture = vkd3d_renderdoc_active() && vkd3d_renderdoc_should_capture_shader_hash(0);
#else
list->debug_capture = false;
#endif
list->has_replaced_shaders = false;
list->init_transitions_count = 0;
list->query_ranges_count = 0;
list->active_queries_count = 0;
list->pending_queries_count = 0;
list->cbv_srv_uav_descriptors = NULL;
list->render_pass_suspended = false;
}
ID3D12GraphicsCommandList_SetPipelineState(iface, initial_pipeline_state);
static void d3d12_command_list_reset_state(struct d3d12_command_list *list,
ID3D12PipelineState *initial_pipeline_state)
{
d3d12_command_list_reset_api_state(list, initial_pipeline_state);
d3d12_command_list_reset_internal_state(list);
}
static HRESULT STDMETHODCALLTYPE d3d12_command_list_Reset(d3d12_command_list_iface *iface,
@ -3872,12 +3884,13 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_list_Reset(d3d12_command_list_ifa
return hr;
}
static HRESULT STDMETHODCALLTYPE d3d12_command_list_ClearState(d3d12_command_list_iface *iface,
static void STDMETHODCALLTYPE d3d12_command_list_ClearState(d3d12_command_list_iface *iface,
ID3D12PipelineState *pipeline_state)
{
FIXME("iface %p, pipline_state %p stub!\n", iface, pipeline_state);
return E_NOTIMPL;
struct d3d12_command_list *list = impl_from_ID3D12GraphicsCommandList(iface);
TRACE("iface %p, pipline_state %p!\n", iface, pipeline_state);
d3d12_command_list_end_current_render_pass(list, false);
d3d12_command_list_reset_api_state(list, pipeline_state);
}
static bool d3d12_command_list_has_depth_stencil_view(struct d3d12_command_list *list)