Skip to content
This repository was archived by the owner on Jul 19, 2018. It is now read-only.

Commit 91b6474

Browse files
committed
layers:Add read/write mappings for AMD draws
These extended draw types were added without updating the read/write flag LUT. Doh! Initially adding data as copies of matching non-AMD cmds which should work. Added comments to double-check and make sure those are the correct flags. Also added a magic number entry at the end of the LUT CommandToFlags array and a static_assert to make sure this array is correctly sized at compile time.
1 parent ae690c5 commit 91b6474

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

layers/core_validation_types.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ static const uint32_t READ_INDEX = 0;
453453
static const uint32_t WRITE_INDEX = 1;
454454

455455
// Per-cmd read/write flags Read flags in slot 0, Write in 1
456-
static const CmdFlags CommandToFlags[CMD_COUNT][2] = {
456+
constexpr CmdFlags CommandToFlags[CMD_COUNT + 1][2] = {
457457
// CMD_NONE,
458458
{{0, 0}, {0, 0}},
459459
// CMD_BINDPIPELINE,
@@ -495,12 +495,24 @@ static const CmdFlags CommandToFlags[CMD_COUNT][2] = {
495495
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_SHADER_READ_BIT},
496496
{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, 0}},
497497
// CMD_DRAWINDIRECT,
498+
{{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
499+
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
500+
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
501+
VK_ACCESS_SHADER_READ_BIT},
502+
{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, 0}},
503+
// CMD_DRAWINDIRECTCOUNTAMD, TODO : Make sure these are right
498504
{{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
499505
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
500506
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
501507
VK_ACCESS_SHADER_READ_BIT},
502508
{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, 0}},
503509
// CMD_DRAWINDEXEDINDIRECT,
510+
{{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
511+
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
512+
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
513+
VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_SHADER_READ_BIT},
514+
{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, 0}},
515+
// CMD_DRAWINDEXEDINDIRECTCOUNTAMD, TODO : Make sure these are right
504516
{{VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
505517
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
506518
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
@@ -594,8 +606,13 @@ static const CmdFlags CommandToFlags[CMD_COUNT][2] = {
594606
{{0, 0}, {0, 0}},
595607
// CMD_END, // Should be last command in any RECORDED cmd buffer
596608
{{0, 0}, {0, 0}},
609+
// MAGIC NUMBER ENTRY TO MAKE SURE ARRAY IS CORRECT SIZE
610+
{{0, 0}, {0, 0xDEADBEEF}},
597611
};
598612

613+
static_assert((CommandToFlags[CMD_END + 1][WRITE_INDEX].access_flags) == (0xDEADBEEF),
614+
"CommandToFlags is not correct size. Must have an entry for each CMD_TYPE.");
615+
599616
// fwd decl class for ptr below
600617
class Command;
601618
// Store details of memory access by a cmd

0 commit comments

Comments
 (0)