mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-04-17 23:51:00 +00:00
count vk calls
This commit is contained in:
parent
bb17105d53
commit
9d0732b2da
9 changed files with 119 additions and 3 deletions
|
@ -343,6 +343,7 @@ qboolean Vkimp_CreateSurface(SDL_Window *window);
|
|||
|
||||
extern mvtx_t *verts_buffer;
|
||||
extern uint16_t *vertIdxData;
|
||||
extern int drawCalls;
|
||||
|
||||
void Mesh_Init (void);
|
||||
void Mesh_Free (void);
|
||||
|
|
|
@ -2201,6 +2201,7 @@ VkResult QVk_BeginFrame(const VkViewport* viewport, const VkRect2D* scissor)
|
|||
|
||||
ReleaseSwapBuffers();
|
||||
|
||||
// VK_ERROR: Validation Error: [ VUID-vkAcquireNextImageKHR-semaphore-01779 ] Object 0: handle = 0x620000000062, name = Semaphore: image available #30, type = VK_OBJECT_TYPE_SEMAPHORE; | MessageID = 0x5717e75b | vkAcquireNextImageKHR(): Semaphore must not have any pending operations. The Vulkan spec states: If semaphore is not VK_NULL_HANDLE it must not have any uncompleted signal or wait operations pending (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkAcquireNextImageKHR-semaphore-01779) (validation)
|
||||
VkResult result = vkAcquireNextImageKHR(vk_device.logical, vk_swapchain.sc, 500000000 /* 0.5 sec */,
|
||||
vk_imageAvailableSemaphores[vk_imageSemaphoreIdx], VK_NULL_HANDLE, &vk_imageIndex);
|
||||
if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || result == VK_ERROR_SURFACE_LOST_KHR || result == VK_TIMEOUT)
|
||||
|
@ -2722,6 +2723,7 @@ QVk_Draw2DCallsRender(void)
|
|||
vkCmdBindIndexBuffer(vk_activeCmdbuffer,
|
||||
vk_rectIbo.resource.buffer, vk_rectIboffet, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, 6 * draw2dcolor_num, 1, 0, 0, 0);
|
||||
printf("%d: %s Color\n", drawCalls++, __func__);
|
||||
}
|
||||
else if (draw2dcolor_calltype == CALL_TEX)
|
||||
{
|
||||
|
@ -2763,6 +2765,7 @@ QVk_Draw2DCallsRender(void)
|
|||
vkCmdBindIndexBuffer(vk_activeCmdbuffer,
|
||||
vk_rectIbo.resource.buffer, vk_rectIboffet, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, 6 * draw2dcolor_num, 1, 0, 0, 0);
|
||||
printf("%d: %s Tex\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
draw2dcolor_num = 0;
|
||||
|
|
|
@ -390,8 +390,12 @@ static void ChangeColorBufferLayout(VkImage image, VkImageLayout fromLayout, VkI
|
|||
.image = image,
|
||||
.subresourceRange = subresourceRange,
|
||||
};
|
||||
/*
|
||||
* VK_WARNING: Validation Warning: [ BestPractices-TransitionUndefinedToReadOnly ] Object 0: handle = 0x1a000000001a, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0xe10fe22f | vkCmdPipelineBarrier(): pImageMemoryBarriers[0] VkImageMemoryBarrier is being submitted with oldLayout VK_IMAGE_LAYOUT_UNDEFINED and the contents may be discarded, but the newLayout is VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, which is read only. (validation)
|
||||
*/
|
||||
|
||||
vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0u, 0u, NULL, 0u, NULL, 1u, &imageBarrier);
|
||||
vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0u, 0u, NULL, 0u, NULL, 1u, &imageBarrier);
|
||||
|
||||
QVk_SubmitCommand(&commandBuffer, &vk_device.transferQueue);
|
||||
vkFreeCommandBuffers(vk_device.logical, vk_transferCommandPool, 1, &commandBuffer);
|
||||
|
|
|
@ -85,6 +85,7 @@ R_RenderDlight(dlight_t *light)
|
|||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_drawDLightPipeline.layout, 0, 1, &uboDescriptorSet, 1, &uboOffset);
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, 48, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -234,6 +234,7 @@ R_DrawSpriteModel(entity_t *currententity, const model_t *currentmodel)
|
|||
vk_drawSpritePipeline.layout, 0, 1,
|
||||
&skin->vk_texture.descriptorSet, 0, NULL);
|
||||
vkCmdDraw(vk_activeCmdbuffer, 6, 1, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -312,6 +313,7 @@ R_DrawNullModel(entity_t *currententity)
|
|||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, 24, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -528,6 +530,7 @@ Vk_DrawParticles(int num_particles, const particle_t particles[])
|
|||
|
||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdDraw(vk_activeCmdbuffer, (currentvertex - visibleParticles), 1, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -598,6 +601,7 @@ R_DrawParticles(void)
|
|||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_drawPointParticlesPipeline.layout, 0, 1, &uboDescriptorSet, 1, &uboOffset);
|
||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdDraw(vk_activeCmdbuffer, r_newrefdef.num_particles, 1, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -980,7 +984,7 @@ RE_RenderView(refdef_t *fd)
|
|||
|
||||
R_DrawAlphaSurfaces();
|
||||
|
||||
R_Flash();
|
||||
R_Flash(); /* citadel error */
|
||||
|
||||
if (r_speeds->value)
|
||||
{
|
||||
|
@ -1051,6 +1055,7 @@ qboolean RE_EndWorldRenderpass(void)
|
|||
vkCmdSetViewport(vk_activeCmdbuffer, 0u, 1u, &vk_viewport);
|
||||
vkCmdSetScissor(vk_activeCmdbuffer, 0u, 1u, &vk_scissor);
|
||||
vkCmdDraw(vk_activeCmdbuffer, 3, 1, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
vkCmdEndRenderPass(vk_activeCmdbuffer);
|
||||
|
||||
// start drawing UI
|
||||
|
@ -1081,6 +1086,7 @@ R_SetVulkan2D(const VkViewport* viewport, const VkRect2D* scissor)
|
|||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_postprocessPipeline.layout, 0, 1, &vk_colorbufferWarp.descriptorSet, 0, NULL);
|
||||
QVk_BindPipeline(&vk_postprocessPipeline);
|
||||
vkCmdDraw(vk_activeCmdbuffer, 3, 1, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1436,6 +1442,8 @@ RE_BeginFrame(float camera_separation)
|
|||
QVk_BeginRenderpass(RP_WORLD);
|
||||
}
|
||||
|
||||
int drawCalls = 0;
|
||||
|
||||
/*
|
||||
=====================
|
||||
RE_EndFrame
|
||||
|
@ -1448,6 +1456,9 @@ RE_EndFrame(void)
|
|||
|
||||
// world has not rendered yet
|
||||
world_rendered = false;
|
||||
|
||||
printf("%s: Calls count %d\n", __func__, drawCalls);
|
||||
drawCalls = 0;
|
||||
}
|
||||
|
||||
unsigned r_rawpalette[256];
|
||||
|
@ -1569,6 +1580,7 @@ R_DrawBeam(entity_t *currententity )
|
|||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_drawBeamPipeline.layout, 0, 1, &uboDescriptorSet, 1, &uboOffset);
|
||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdDraw(vk_activeCmdbuffer, NUM_BEAM_SEGS * 4, 1, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
//===================================================================
|
||||
|
|
|
@ -411,6 +411,7 @@ Vk_DrawAliasFrameLerp(entity_t *currententity, dmdx_t *paliashdr, float backlerp
|
|||
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, **buffer, *dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, *index_pos, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -850,5 +851,6 @@ R_DrawAliasModel(entity_t *currententity, const model_t *currentmodel)
|
|||
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, index_pos, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -89,6 +89,7 @@ DrawVkPoly(msurface_t *fa, image_t *texture, const float *color)
|
|||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, (p->numverts - 2) * 3, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -145,6 +146,7 @@ R_DrawTriangleOutlines(void)
|
|||
|
||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdDraw(vk_activeCmdbuffer, 4, 1, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -466,6 +468,7 @@ Vk_RenderLightmappedPoly(msurface_t *surf, float alpha,
|
|||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, index_pos, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
//PGM
|
||||
//==========
|
||||
}
|
||||
|
|
|
@ -156,6 +156,7 @@ EmitWaterPolys(msurface_t *fa, image_t *texture, const float *modelMatrix,
|
|||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, index_pos, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -261,6 +262,7 @@ R_DrawSkyBox(void)
|
|||
|
||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, *buffer, dstOffset, VK_INDEX_TYPE_UINT16);
|
||||
vkCmdDrawIndexed(vk_activeCmdbuffer, 6, 1, 0, 0, 0);
|
||||
printf("%d: %s\n", drawCalls++, __func__);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1477,6 +1477,10 @@ SP_target_earthquake(edict_t *self)
|
|||
*
|
||||
* ReRelease: Creates a camera path as seen in the N64 version.
|
||||
*/
|
||||
#define HACKFLAG_TELEPORT_OUT 2
|
||||
#define HACKFLAG_SKIPPABLE 64
|
||||
#define HACKFLAG_END_OF_UNIT 128
|
||||
|
||||
static void
|
||||
camera_lookat_pathtarget(edict_t* self, vec3_t origin, vec3_t* dest)
|
||||
{
|
||||
|
@ -1514,14 +1518,53 @@ camera_lookat_pathtarget(edict_t* self, vec3_t origin, vec3_t* dest)
|
|||
void
|
||||
update_target_camera_think(edict_t *self)
|
||||
{
|
||||
if (self->movetarget)
|
||||
qboolean do_skip = false;
|
||||
|
||||
#if ORIGIN_CODE
|
||||
/* only allow skipping after 2 seconds */
|
||||
if ((self->hackflags & HACKFLAG_SKIPPABLE) && level.time > 2)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < game.maxclients; i++)
|
||||
{
|
||||
edict_t *client = g_edicts + 1 + i;
|
||||
|
||||
if (!client->inuse || !client->client->pers.connected)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (client->client->buttons & BUTTON_ANY)
|
||||
{
|
||||
do_skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // ORIGIN_CODE
|
||||
|
||||
if (!do_skip && self->movetarget)
|
||||
{
|
||||
self->moveinfo.remaining_distance -= (self->moveinfo.move_speed * FRAMETIME) * 0.8f;
|
||||
|
||||
if(self->moveinfo.remaining_distance <= 0)
|
||||
{
|
||||
#if ORIGIN_CODE
|
||||
if (self->movetarget->hackflags & HACKFLAG_TELEPORT_OUT)
|
||||
{
|
||||
if (self->enemy)
|
||||
{
|
||||
self->enemy->s.event = EV_PLAYER_TELEPORT;
|
||||
self->enemy->hackflags = HACKFLAG_TELEPORT_OUT;
|
||||
self->enemy->pain_debounce_time = self->enemy->timestamp = self->movetarget->wait;
|
||||
}
|
||||
}
|
||||
#endif // ORIGIN_CODE
|
||||
|
||||
VectorCopy(self->movetarget->s.origin, self->s.origin);
|
||||
self->nextthink = level.time + self->movetarget->wait;
|
||||
|
||||
if (self->movetarget->target)
|
||||
{
|
||||
self->movetarget = G_PickTarget(self->movetarget->target);
|
||||
|
@ -1551,6 +1594,13 @@ update_target_camera_think(edict_t *self)
|
|||
|
||||
frac = 1.0f - (self->moveinfo.remaining_distance / self->moveinfo.distance);
|
||||
|
||||
#if ORIGIN_CODE
|
||||
if (self->enemy && (self->enemy->hackflags & HACKFLAG_TELEPORT_OUT))
|
||||
{
|
||||
self->enemy->s.alpha = Q_max(1.f / 255.f, frac);
|
||||
}
|
||||
#endif // ORIGIN_CODE
|
||||
|
||||
VectorSubtract(self->movetarget->s.origin, self->s.origin, delta);
|
||||
VectorScale(delta, frac, delta);
|
||||
|
||||
|
@ -1587,12 +1637,19 @@ update_target_camera_think(edict_t *self)
|
|||
|
||||
level.intermissiontime = 0;
|
||||
|
||||
#if ORIGIN_CODE
|
||||
level.level_intermission_set = true;
|
||||
#endif //ORIGIN_CODE
|
||||
|
||||
while ((t = G_Find(t, FOFS(targetname), self->killtarget)))
|
||||
{
|
||||
t->use(t, self, self->activator);
|
||||
}
|
||||
|
||||
level.intermissiontime = level.time;
|
||||
#if ORIGIN_CODE
|
||||
level.intermission_server_frame = gi.ServerFrame();
|
||||
#endif //ORIGIN_CODE
|
||||
|
||||
/* end of unit requires a wait */
|
||||
if (level.changemap && !strchr(level.changemap, '*'))
|
||||
|
@ -1621,6 +1678,15 @@ target_camera_dummy_think(edict_t *self)
|
|||
self->velocity[1] * self->velocity[1]));
|
||||
self->client = NULL;
|
||||
|
||||
#if ORIGIN_CODE
|
||||
/* alpha fade out for voops */
|
||||
if (self->hackflags & HACKFLAG_TELEPORT_OUT)
|
||||
{
|
||||
self->timestamp = Q_max(0, self->timestamp - FRAMETIME);
|
||||
self->s.alpha = Q_max(1.f / 255.f, self->timestamp / self->pain_debounce_time);
|
||||
}
|
||||
#endif //ORIGIN_CODE
|
||||
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
}
|
||||
|
||||
|
@ -1653,6 +1719,9 @@ use_target_camera(edict_t *self, edict_t *other, edict_t *activator)
|
|||
}
|
||||
|
||||
level.intermissiontime = level.time;
|
||||
#if ORIGIN_CODE
|
||||
level.intermission_server_frame = gi.ServerFrame();
|
||||
#endif //ORIGIN_CODE
|
||||
level.exitintermission = 0;
|
||||
|
||||
/* spawn fake player dummy where we were */
|
||||
|
@ -1696,6 +1765,18 @@ use_target_camera(edict_t *self, edict_t *other, edict_t *activator)
|
|||
/* respawn any dead clients */
|
||||
if (client->health <= 0)
|
||||
{
|
||||
#if ORIGIN_CODE
|
||||
/*
|
||||
* give us our max health back since it will reset
|
||||
* to pers.health; in instanced items we'd lose the items
|
||||
* we touched so we always want to respawn with our max.
|
||||
*/
|
||||
if (P_UseCoopInstancedItems())
|
||||
{
|
||||
client->client->pers.health = client->client->pers.max_health = client->max_health;
|
||||
}
|
||||
#endif //ORIGIN_CODE
|
||||
|
||||
respawn(client);
|
||||
}
|
||||
|
||||
|
@ -1711,6 +1792,13 @@ use_target_camera(edict_t *self, edict_t *other, edict_t *activator)
|
|||
|
||||
self->moveinfo.remaining_distance = VectorNormalize(diff);
|
||||
self->moveinfo.distance = self->moveinfo.remaining_distance;
|
||||
|
||||
#if ORIGIN_CODE
|
||||
if (self->hackflags & HACKFLAG_END_OF_UNIT)
|
||||
{
|
||||
G_EndOfUnitMessage();
|
||||
}
|
||||
#endif //ORIGIN_CODE
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue