DX12: removed some dependencies on vulkan implementation.

This commit is contained in:
Artem Kharytoniuk 2017-12-23 22:11:09 +01:00
parent ca9ab2c38c
commit 2610ef131e
6 changed files with 44 additions and 26 deletions

View File

@ -1189,7 +1189,7 @@ static void get_mvp_transform(float* mvp) {
p[12], p[13], P14, p[15]
};
myGlMultMatrix(vk_world.modelview_transform, proj, mvp);
myGlMultMatrix(dx_world.modelview_transform, proj, mvp);
}
}
@ -1444,11 +1444,12 @@ void dx_shade_geometry(ID3D12PipelineState* pipeline_state, bool multitexture, V
dx.command_list->DrawIndexedInstanced(tess.numIndexes, 1, 0, 0, 0);
else
dx.command_list->DrawInstanced(tess.numVertexes, 1, 0, 0);
//dx_world.dirty_depth_attachment = true;
}
void dx_begin_frame() {
if (!dx.active)
return;
if (dx.fence->GetCompletedValue() < dx.fence_value) {
DX_CHECK(dx.fence->SetEventOnCompletion(dx.fence_value, dx.fence_event));
WaitForSingleObject(dx.fence_event, INFINITE);
@ -1464,7 +1465,6 @@ void dx_begin_frame() {
ID3D12DescriptorHeap* heaps[] = { dx.srv_heap, dx.sampler_heap };
dx.command_list->SetDescriptorHeaps(_countof(heaps), heaps);
// Indicate that the back buffer will be used as a render target.
dx.command_list->ResourceBarrier(1, &get_transition_barrier(dx.render_targets[dx.frame_index],
D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
@ -1475,12 +1475,6 @@ void dx_begin_frame() {
dx.command_list->OMSetRenderTargets(1, &rtv_handle, FALSE, &dsv_handle);
D3D12_CLEAR_FLAGS flags = D3D12_CLEAR_FLAG_DEPTH;
if (r_shadows->integer == 2)
flags |= D3D12_CLEAR_FLAG_STENCIL;
dx.command_list->ClearDepthStencilView(dsv_handle, flags, 1.0f, 0, 0, nullptr);
dx.xyz_elements = 0;
dx.color_st_elements = 0;
dx.index_buffer_offset = 0;

View File

@ -142,4 +142,5 @@ struct Dx_World {
// State.
//
int current_image_indices[2];
float modelview_transform[16];
};

View File

@ -451,7 +451,7 @@ void RB_BeginDrawingView (void) {
vk_clear_attachments(vk_world.dirty_depth_attachment, fast_sky, fast_sky_color);
// DX12
dx_clear_attachments(vk_world.dirty_depth_attachment, fast_sky, fast_sky_color);
dx_clear_attachments(true, fast_sky, fast_sky_color);
if ( ( backEnd.refdef.rdflags & RDF_HYPERSPACE ) )
{
@ -586,6 +586,9 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
// VULKAN
Com_Memcpy(vk_world.modelview_transform, backEnd.or.modelMatrix, 64);
// DX12
Com_Memcpy(dx_world.modelview_transform, backEnd.or.modelMatrix, 64);
//
// change depthrange if needed
//
@ -618,6 +621,9 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
// VULKAN
Com_Memcpy(vk_world.modelview_transform, backEnd.viewParms.world.modelMatrix, 64);
// DX12
Com_Memcpy(dx_world.modelview_transform, backEnd.viewParms.world.modelMatrix, 64);
if ( depthRange ) {
qglDepthRange (0, 1);
}

View File

@ -1407,6 +1407,8 @@ void R_DebugPolygon( int color, int numPoints, float *points ) {
// VULKAN
// DX12
if (!vk.active && !dx.active)
return;
if (numPoints < 3 || numPoints >= SHADER_MAX_VERTEXES/2)
return;
@ -1417,7 +1419,7 @@ void R_DebugPolygon( int color, int numPoints, float *points ) {
// Backface culling.
auto transform_to_eye_space = [](vec3_t v, vec3_t v_eye) {
auto m = vk_world.modelview_transform;
auto m = vk.active ? vk_world.modelview_transform : dx_world.modelview_transform;
v_eye[0] = m[0]*v[0] + m[4]*v[1] + m[8 ]*v[2] + m[12];
v_eye[1] = m[1]*v[0] + m[5]*v[1] + m[9 ]*v[2] + m[13];
v_eye[2] = m[2]*v[0] + m[6]*v[1] + m[10]*v[2] + m[14];

View File

@ -339,25 +339,38 @@ void RB_ShadowFinish( void ) {
}
tess.numVertexes = 4;
// set backEnd.or.modelMatrix to identity matrix
float tmp[16];
Com_Memcpy(tmp, vk_world.modelview_transform, 64);
Com_Memset(vk_world.modelview_transform, 0, 64);
vk_world.modelview_transform[0] = 1.0f;
vk_world.modelview_transform[5] = 1.0f;
vk_world.modelview_transform[10] = 1.0f;
vk_world.modelview_transform[15] = 1.0f;
if (vk.active) {
// set backEnd.or.modelMatrix to identity matrix
float tmp[16];
Com_Memcpy(tmp, vk_world.modelview_transform, 64);
Com_Memset(vk_world.modelview_transform, 0, 64);
vk_world.modelview_transform[0] = 1.0f;
vk_world.modelview_transform[5] = 1.0f;
vk_world.modelview_transform[10] = 1.0f;
vk_world.modelview_transform[15] = 1.0f;
vk_bind_geometry();
vk_shade_geometry(vk.shadow_finish_pipeline, false, Vk_Depth_Range::normal);
}
if (dx.active) {
dx_bind_geometry();
dx_shade_geometry(dx.shadow_finish_pipeline_state, false, Vk_Depth_Range::normal, true, false);
Com_Memcpy(vk_world.modelview_transform, tmp, 64);
}
if (dx.active) {
// set backEnd.or.modelMatrix to identity matrix
float tmp[16];
Com_Memcpy(tmp, dx_world.modelview_transform, 64);
Com_Memset(dx_world.modelview_transform, 0, 64);
dx_world.modelview_transform[0] = 1.0f;
dx_world.modelview_transform[5] = 1.0f;
dx_world.modelview_transform[10] = 1.0f;
dx_world.modelview_transform[15] = 1.0f;
dx_bind_geometry();
dx_shade_geometry(dx.shadow_finish_pipeline_state, false, Vk_Depth_Range::normal, true, false);
Com_Memcpy(dx_world.modelview_transform, tmp, 64);
}
Com_Memcpy(vk_world.modelview_transform, tmp, 64);
tess.numIndexes = 0;
tess.numVertexes = 0;
}

View File

@ -740,6 +740,7 @@ void RB_StageIteratorSky( void ) {
backEnd.viewParms.or.origin[0], backEnd.viewParms.or.origin[1], backEnd.viewParms.or.origin[2], 1
};
myGlMultMatrix(skybox_translate, modelMatrix_original, vk_world.modelview_transform);
myGlMultMatrix(skybox_translate, modelMatrix_original, dx_world.modelview_transform);
GL_State( 0 );
qglColor3f( tr.identityLight, tr.identityLight, tr.identityLight );
@ -749,6 +750,7 @@ void RB_StageIteratorSky( void ) {
qglPopMatrix();
Com_Memcpy(vk_world.modelview_transform, modelMatrix_original, sizeof(float[16]));
Com_Memcpy(dx_world.modelview_transform, modelMatrix_original, sizeof(float[16]));
}
// generate the vertexes for all the clouds, which will be drawn