Revert "swr/rast: Archrast codegen updates"

This reverts the following commits:
71a76a47cc "swr/codegen: fix autotools build"
7763e664ce "meson/swr: replace hard-coded path with current_build_dir()"
773b3ceaca "swr/rast: Fix autotools and scons codegen"
16e10b8c30 "swr/rast: Add general SWTag statistics"
b45a15a39f "swr/rast: Add string handling to AR event framework"
8608a747aa "swr/rast: Add initial SWTag proto definitions"
93cd9905c8 "swr/rast: Cleanup and generalize gen_archrast"

The last one in this list broke all the build systems that can build
this (meson, autotools & scons).

See MR !304 for more details:
https://gitlab.freedesktop.org/mesa/mesa/merge_requests/304

Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
This commit is contained in:
Eric Engestrom 2019-03-01 16:37:31 +00:00
parent 12af6b30a3
commit fc82ea1350
8 changed files with 314 additions and 351 deletions

View file

@ -82,10 +82,10 @@ BUILT_SOURCES = \
rasterizer/jitter/gen_builder.hpp \
rasterizer/jitter/gen_builder_meta.hpp \
rasterizer/jitter/gen_builder_intrin.hpp \
rasterizer/codegen/gen_ar_event.hpp \
rasterizer/codegen/gen_ar_event.cpp \
rasterizer/codegen/gen_ar_eventhandler.hpp \
rasterizer/codegen/gen_ar_eventhandlerfile.hpp \
rasterizer/archrast/gen_ar_event.hpp \
rasterizer/archrast/gen_ar_event.cpp \
rasterizer/archrast/gen_ar_eventhandler.hpp \
rasterizer/archrast/gen_ar_eventhandlerfile.hpp \
rasterizer/core/backends/gen_BackendPixelRate0.cpp \
rasterizer/core/backends/gen_BackendPixelRate1.cpp \
rasterizer/core/backends/gen_BackendPixelRate2.cpp \
@ -155,36 +155,44 @@ rasterizer/jitter/gen_builder_intrin.hpp: rasterizer/codegen/gen_llvm_ir_macros.
--gen_intrin_h
$(AM_V_GEN)touch $@
rasterizer/codegen/gen_ar_event.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
rasterizer/archrast/gen_ar_event.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
$(MKDIR_GEN)
$(PYTHON_GEN) \
$(srcdir)/rasterizer/codegen/gen_archrast.py \
--proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
--output-dir rasterizer/codegen
--proto $(srcdir)/rasterizer/archrast/events.proto \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_event.hpp \
--gen_event_hpp
$(AM_V_GEN)touch $@
rasterizer/codegen/gen_ar_event.cpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.cpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
rasterizer/archrast/gen_ar_event.cpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.cpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
$(MKDIR_GEN)
$(PYTHON_GEN) \
$(srcdir)/rasterizer/codegen/gen_archrast.py \
--proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
--output-dir rasterizer/codegen
--proto $(srcdir)/rasterizer/archrast/events.proto \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_event.cpp \
--gen_event_cpp
$(AM_V_GEN)touch $@
rasterizer/codegen/gen_ar_eventhandler.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandler.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
rasterizer/archrast/gen_ar_eventhandler.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandler.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
$(MKDIR_GEN)
$(PYTHON_GEN) \
$(srcdir)/rasterizer/codegen/gen_archrast.py \
--proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
--output-dir rasterizer/codegen
--proto $(srcdir)/rasterizer/archrast/events.proto \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_eventhandler.hpp \
--gen_eventhandler_hpp
$(AM_V_GEN)touch $@
rasterizer/codegen/gen_ar_eventhandlerfile.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
rasterizer/archrast/gen_ar_eventhandlerfile.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
$(MKDIR_GEN)
$(PYTHON_GEN) \
$(srcdir)/rasterizer/codegen/gen_archrast.py \
--proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
--output-dir rasterizer/codegen
--proto $(srcdir)/rasterizer/archrast/events.proto \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_eventhandlerfile.hpp \
--gen_eventhandlerfile_hpp
$(AM_V_GEN)touch $@
rasterizer/core/backends/gen_BackendPixelRate0.cpp \

View file

@ -106,7 +106,7 @@ env.CodeGenerate(
target = 'rasterizer/archrast/gen_ar_event.hpp',
script = swrroot + 'rasterizer/codegen/gen_archrast.py',
source = 'rasterizer/archrast/events.proto',
command = python_cmd + ' $SCRIPT --proto $SOURCE ' + srcroot + '/rasterizer/archrast/events_private.proto --output-dir ' + bldroot + '/rasterizer/archrast'
command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_event_hpp'
)
Depends('rasterizer/archrast/gen_ar_event.hpp',
swrroot + 'rasterizer/archrast/events_private.proto')
@ -117,7 +117,7 @@ env.CodeGenerate(
target = 'rasterizer/archrast/gen_ar_event.cpp',
script = swrroot + 'rasterizer/codegen/gen_archrast.py',
source = 'rasterizer/archrast/events.proto',
command = python_cmd + ' $SCRIPT --proto $SOURCE ' + srcroot + '/rasterizer/archrast/events_private.proto --output-dir ' + bldroot + '/rasterizer/archrast'
command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_event_cpp'
)
Depends('rasterizer/archrast/gen_ar_event.cpp',
swrroot + 'rasterizer/archrast/events_private.proto')
@ -128,7 +128,7 @@ env.CodeGenerate(
target = 'rasterizer/archrast/gen_ar_eventhandler.hpp',
script = swrroot + 'rasterizer/codegen/gen_archrast.py',
source = 'rasterizer/archrast/events.proto',
command = python_cmd + ' $SCRIPT --proto $SOURCE ' + srcroot + '/rasterizer/archrast/events_private.proto --output-dir ' + bldroot + '/rasterizer/archrast'
command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_eventhandler_hpp'
)
Depends('rasterizer/archrast/gen_ar_eventhandler.hpp',
swrroot + 'rasterizer/archrast/events_private.proto')
@ -139,7 +139,7 @@ env.CodeGenerate(
target = 'rasterizer/archrast/gen_ar_eventhandlerfile.hpp',
script = swrroot + 'rasterizer/codegen/gen_archrast.py',
source = 'rasterizer/archrast/events.proto',
command = python_cmd + ' $SCRIPT --proto $SOURCE ' + srcroot + '/rasterizer/archrast/events_private.proto --output-dir ' + bldroot + '/rasterizer/archrast'
command = python_cmd + ' $SCRIPT --proto $SOURCE --proto_private ' + srcroot + '/rasterizer/archrast/events_private.proto --output $TARGET --gen_eventhandlerfile_hpp'
)
Depends('rasterizer/archrast/gen_ar_eventhandlerfile.hpp',
swrroot + 'rasterizer/archrast/events_private.proto')

View file

@ -96,371 +96,330 @@ event SwrStoreTilesEvent
event FrontendStatsEvent
{
uint32_t drawId;
uint64_t counter IaVertices;
uint64_t counter IaPrimitives;
uint64_t counter VsInvocations;
uint64_t counter HsInvocations;
uint64_t counter DsInvocations;
uint64_t counter GsInvocations;
uint64_t counter GsPrimitives;
uint64_t counter CInvocations;
uint64_t counter CPrimitives;
uint64_t counter SoPrimStorageNeeded0;
uint64_t counter SoPrimStorageNeeded1;
uint64_t counter SoPrimStorageNeeded2;
uint64_t counter SoPrimStorageNeeded3;
uint64_t counter SoNumPrimsWritten0;
uint64_t counter SoNumPrimsWritten1;
uint64_t counter SoNumPrimsWritten2;
uint64_t counter SoNumPrimsWritten3;
uint64_t IaVertices;
uint64_t IaPrimitives;
uint64_t VsInvocations;
uint64_t HsInvocations;
uint64_t DsInvocations;
uint64_t GsInvocations;
uint64_t GsPrimitives;
uint64_t CInvocations;
uint64_t CPrimitives;
uint64_t SoPrimStorageNeeded0;
uint64_t SoPrimStorageNeeded1;
uint64_t SoPrimStorageNeeded2;
uint64_t SoPrimStorageNeeded3;
uint64_t SoNumPrimsWritten0;
uint64_t SoNumPrimsWritten1;
uint64_t SoNumPrimsWritten2;
uint64_t SoNumPrimsWritten3;
};
event BackendStatsEvent
{
uint32_t drawId;
uint64_t counter DepthPassCount;
uint64_t counter PsInvocations;
uint64_t counter CsInvocations;
uint64_t DepthPassCount;
uint64_t PsInvocations;
uint64_t CsInvocations;
};
event EarlyZSingleSample
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
};
uint64_t passCount;
uint64_t failCount;
};
event LateZSingleSample
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyStencilSingleSample
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event LateStencilSingleSample
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyZSampleRate
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
};
uint64_t passCount;
uint64_t failCount;
};
event LateZSampleRate
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyStencilSampleRate
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event LateStencilSampleRate
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
// Total Early-Z counts, SingleSample and SampleRate
event EarlyZ
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
};
uint64_t passCount;
uint64_t failCount;
};
// Total LateZ counts, SingleSample and SampleRate
event LateZ
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
// Total EarlyStencil counts, SingleSample and SampleRate
event EarlyStencil
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
// Total LateStencil counts, SingleSample and SampleRate
event LateStencil
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyZNullPS
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyStencilNullPS
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyZPixelRate
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event LateZPixelRate
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyOmZ
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event EarlyOmStencil
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event LateOmZ
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event LateOmStencil
{
uint32_t drawId;
uint64_t counter passCount;
uint64_t counter failCount;
uint64_t passCount;
uint64_t failCount;
};
event GSInputPrims
{
uint32_t drawId;
uint64_t counter inputPrimCount;
uint64_t inputPrimCount;
};
event GSPrimsGen
{
uint32_t drawId;
uint64_t counter primGeneratedCount;
uint64_t primGeneratedCount;
};
event GSVertsInput
{
uint32_t drawId;
uint64_t counter vertsInput;
uint64_t vertsInput;
};
event TessPrims
{
uint32_t drawId;
uint64_t counter primCount;
uint64_t primCount;
};
event RasterTiles
{
uint32_t drawId;
uint32_t counter rastTileCount;
uint32_t rastTileCount;
};
event ClipperEvent
{
uint32_t drawId;
uint32_t counter trivialRejectCount;
uint32_t counter trivialAcceptCount;
uint32_t counter mustClipCount;
uint32_t trivialRejectCount;
uint32_t trivialAcceptCount;
uint32_t mustClipCount;
};
event CullEvent
{
uint32_t drawId;
uint64_t counter backfacePrimCount;
uint64_t counter degeneratePrimCount;
uint64_t backfacePrimCount;
uint64_t degeneratePrimCount;
};
event AlphaEvent
{
uint32_t drawId;
uint32_t counter alphaTestCount;
uint32_t counter alphaBlendCount;
uint32_t alphaTestCount;
uint32_t alphaBlendCount;
};
event VSInfo
{
uint32_t drawId;
uint32_t counter numInstExecuted;
uint32_t counter numSampleExecuted;
uint32_t counter numSampleLExecuted;
uint32_t counter numSampleBExecuted;
uint32_t counter numSampleCExecuted;
uint32_t counter numSampleCLZExecuted;
uint32_t counter numSampleCDExecuted;
uint32_t counter numGather4Executed;
uint32_t counter numGather4CExecuted;
uint32_t counter numGather4CPOExecuted;
uint32_t counter numGather4CPOCExecuted;
uint32_t counter numLodExecuted;
uint32_t numInstExecuted;
uint32_t numSampleExecuted;
uint32_t numSampleLExecuted;
uint32_t numSampleBExecuted;
uint32_t numSampleCExecuted;
uint32_t numSampleCLZExecuted;
uint32_t numSampleCDExecuted;
uint32_t numGather4Executed;
uint32_t numGather4CExecuted;
uint32_t numGather4CPOExecuted;
uint32_t numGather4CPOCExecuted;
uint32_t numLodExecuted;
};
event HSInfo
{
uint32_t drawId;
uint32_t counter numInstExecuted;
uint32_t counter numSampleExecuted;
uint32_t counter numSampleLExecuted;
uint32_t counter numSampleBExecuted;
uint32_t counter numSampleCExecuted;
uint32_t counter numSampleCLZExecuted;
uint32_t counter numSampleCDExecuted;
uint32_t counter numGather4Executed;
uint32_t counter numGather4CExecuted;
uint32_t counter numGather4CPOExecuted;
uint32_t counter numGather4CPOCExecuted;
uint32_t counter numLodExecuted;
uint32_t numInstExecuted;
uint32_t numSampleExecuted;
uint32_t numSampleLExecuted;
uint32_t numSampleBExecuted;
uint32_t numSampleCExecuted;
uint32_t numSampleCLZExecuted;
uint32_t numSampleCDExecuted;
uint32_t numGather4Executed;
uint32_t numGather4CExecuted;
uint32_t numGather4CPOExecuted;
uint32_t numGather4CPOCExecuted;
uint32_t numLodExecuted;
};
event DSInfo
{
uint32_t drawId;
uint32_t counter numInstExecuted;
uint32_t counter numSampleExecuted;
uint32_t counter numSampleLExecuted;
uint32_t counter numSampleBExecuted;
uint32_t counter numSampleCExecuted;
uint32_t counter numSampleCLZExecuted;
uint32_t counter numSampleCDExecuted;
uint32_t counter numGather4Executed;
uint32_t counter numGather4CExecuted;
uint32_t counter numGather4CPOExecuted;
uint32_t counter numGather4CPOCExecuted;
uint32_t counter numLodExecuted;
uint32_t numInstExecuted;
uint32_t numSampleExecuted;
uint32_t numSampleLExecuted;
uint32_t numSampleBExecuted;
uint32_t numSampleCExecuted;
uint32_t numSampleCLZExecuted;
uint32_t numSampleCDExecuted;
uint32_t numGather4Executed;
uint32_t numGather4CExecuted;
uint32_t numGather4CPOExecuted;
uint32_t numGather4CPOCExecuted;
uint32_t numLodExecuted;
};
event GSInfo
{
uint32_t drawId;
uint32_t counter numInstExecuted;
uint32_t counter numSampleExecuted;
uint32_t counter numSampleLExecuted;
uint32_t counter numSampleBExecuted;
uint32_t counter numSampleCExecuted;
uint32_t counter numSampleCLZExecuted;
uint32_t counter numSampleCDExecuted;
uint32_t counter numGather4Executed;
uint32_t counter numGather4CExecuted;
uint32_t counter numGather4CPOExecuted;
uint32_t counter numGather4CPOCExecuted;
uint32_t counter numLodExecuted;
uint32_t numInstExecuted;
uint32_t numSampleExecuted;
uint32_t numSampleLExecuted;
uint32_t numSampleBExecuted;
uint32_t numSampleCExecuted;
uint32_t numSampleCLZExecuted;
uint32_t numSampleCDExecuted;
uint32_t numGather4Executed;
uint32_t numGather4CExecuted;
uint32_t numGather4CPOExecuted;
uint32_t numGather4CPOCExecuted;
uint32_t numLodExecuted;
};
event PSInfo
{
uint32_t drawId;
uint32_t counter numInstExecuted;
uint32_t counter numSampleExecuted;
uint32_t counter numSampleLExecuted;
uint32_t counter numSampleBExecuted;
uint32_t counter numSampleCExecuted;
uint32_t counter numSampleCLZExecuted;
uint32_t counter numSampleCDExecuted;
uint32_t counter numGather4Executed;
uint32_t counter numGather4CExecuted;
uint32_t counter numGather4CPOExecuted;
uint32_t counter numGather4CPOCExecuted;
uint32_t counter numLodExecuted;
uint32_t numInstExecuted;
uint32_t numSampleExecuted;
uint32_t numSampleLExecuted;
uint32_t numSampleBExecuted;
uint32_t numSampleCExecuted;
uint32_t numSampleCLZExecuted;
uint32_t numSampleCDExecuted;
uint32_t numGather4Executed;
uint32_t numGather4CExecuted;
uint32_t numGather4CPOExecuted;
uint32_t numGather4CPOCExecuted;
uint32_t numLodExecuted;
};
event CSInfo
{
uint32_t drawId;
uint32_t counter numInstExecuted;
uint32_t counter numSampleExecuted;
uint32_t counter numSampleLExecuted;
uint32_t counter numSampleBExecuted;
uint32_t counter numSampleCExecuted;
uint32_t counter numSampleCLZExecuted;
uint32_t counter numSampleCDExecuted;
uint32_t counter numGather4Executed;
uint32_t counter numGather4CExecuted;
uint32_t counter numGather4CPOExecuted;
uint32_t counter numGather4CPOCExecuted;
uint32_t counter numLodExecuted;
};
event SWTagFrameEvent
{
uint64_t swTagFrame;
};
event SWTagRenderpassEvent
{
uint64_t swTagFrame;
uint32_t swTagDrawOrDispatch;
uint32_t swTagDraw;
uint32_t swTagDispatch;
uint32_t swTagRenderpassCount;
};
event SWTagDrawEvent
{
uint64_t swTagFrame;
uint32_t swTagDrawOrDispatch;
uint32_t swTagDraw;
uint32_t swTagDispatch;
};
event SWTagDispatchEvent
{
uint64_t swTagFrame;
uint32_t swTagDrawOrDispatch;
uint32_t swTagDraw;
uint32_t swTagDispatch;
};
event SWTagFlushEvent
{
uint64_t swTagFrame;
uint32_t swTagDrawOrDispatch;
uint32_t swTagDraw;
uint32_t swTagDispatch;
uint32_t swTagFlushCounter;
char swTagFlushReason[256];
uint32_t swTagFlushType;
uint32_t numInstExecuted;
uint32_t numSampleExecuted;
uint32_t numSampleLExecuted;
uint32_t numSampleBExecuted;
uint32_t numSampleCExecuted;
uint32_t numSampleCLZExecuted;
uint32_t numSampleCDExecuted;
uint32_t numGather4Executed;
uint32_t numGather4CExecuted;
uint32_t numGather4CPOExecuted;
uint32_t numGather4CPOCExecuted;
uint32_t numLodExecuted;
};

View file

@ -27,40 +27,34 @@ import re
from gen_common import *
def parse_event_fields(lines, idx, event_dict):
"""
Parses lines from a proto file that contain an event definition and stores it in event_dict
"""
fields = []
field_names = []
field_types = []
end_of_event = False
num_fields = 0
# record all fields in event definition.
# note: we don't check if there's a leading brace.
while not end_of_event and idx < len(lines):
line = lines[idx].rstrip()
idx += 1
match = re.match(r'(\s*)([\w\*]+)(\s+)(counter\s+)*([\w]+)(\[\d+\])*', line)
field = re.match(r'(\s*)(\w+)(\s*)(\w+)', line)
if match:
field = {
"type": match.group(2),
"name": match.group(5),
"size": int(match.group(6)[1:-1]) if match.group(6) else 1,
"counter": True if match.group(4) else False
}
fields.append(field)
if field:
field_types.append(field.group(2))
field_names.append(field.group(4))
num_fields += 1
end_of_event = re.match(r'(\s*)};', line)
event_dict['fields'] = fields
event_dict['num_fields'] = len(fields)
event_dict['field_types'] = field_types
event_dict['field_names'] = field_names
event_dict['num_fields'] = num_fields
return idx
def parse_enums(lines, idx, event_dict):
"""
Parses lines from a proto file that contain an enum definition and stores it in event_dict
"""
enum_names = []
end_of_enum = False
@ -83,122 +77,145 @@ def parse_enums(lines, idx, event_dict):
event_dict['names'] = enum_names
return idx
def parse_protos(files, verbose=False):
"""
Parses a proto file and returns a dictionary of event definitions
"""
protos = {}
protos['events'] = {} # event dictionary containing events with their fields
protos['event_names'] = [] # needed to keep events in order parsed. dict is not ordered.
protos['event_map'] = {} # dictionary to map event ids to event names
protos['enums'] = {}
protos['enum_names'] = []
def parse_protos(protos, filename):
eventId = 0
with open(filename, 'r') as f:
lines=f.readlines()
if type(files) is not list:
files = [files]
idx = 0
for filename in files:
if verbose:
print("Parsing proto file: %s" % os.path.normpath(filename))
eventId = 0
raw_text = []
while idx < len(lines):
line = lines[idx].rstrip()
idx += 1
with open(filename, 'r') as f:
lines=f.readlines()
# search for event definitions.
match = re.match(r'(\s*)event(\s*)(\w+)', line)
idx = 0
if match:
eventId += 1
event_name = match.group(3)
protos['event_names'].append(event_name)
raw_text = []
while idx < len(lines):
line = lines[idx].rstrip()
idx += 1
protos['events'][event_name] = {}
protos['events'][event_name]['event_id'] = eventId
idx = parse_event_fields(lines, idx, protos['events'][event_name])
# search for event definitions.
match = re.match(r'(\s*)event(\s*)(\w+)', line)
# search for enums.
match = re.match(r'(\s*)enum(\s*)(\w+)', line)
if match:
eventId += 1
event_name = match.group(3)
protos["event_names"].append(event_name)
protos["events"][event_name] = {}
protos["events"][event_name]["event_id"] = eventId
protos["event_map"][eventId] = event_name
idx = parse_event_fields(lines, idx, protos["events"][event_name])
# search for enums.
match = re.match(r'(\s*)enum(\s*)(\w+)', line)
if match:
enum_name = match.group(3)
protos["enum_names"].append(enum_name)
protos["enums"][enum_name] = {}
idx = parse_enums(lines, idx, protos["enums"][enum_name])
return protos
if match:
enum_name = match.group(3)
protos['enum_names'].append(enum_name)
protos['enums'][enum_name] = {}
idx = parse_enums(lines, idx, protos['enums'][enum_name])
def main():
# Parse args...
parser = ArgumentParser()
parser.add_argument("--proto", "-p", dest="protos", nargs='+', help="Path to all proto file(s) to process. Accepts one or more paths (i.e. events.proto and events_private.proto)", required=True)
parser.add_argument("--output-dir", help="Output dir (defaults to ./codegen). Will create folder if it does not exist.", required=False, default="codegen")
parser.add_argument("--verbose", "-v", help="Verbose", action="store_true")
parser.add_argument('--proto', '-p', help='Path to proto file', required=True)
parser.add_argument('--proto_private', '-pp', help='Path to private proto file', required=True)
parser.add_argument('--output', '-o', help='Output filename (i.e. event.hpp)', required=True)
parser.add_argument('--gen_event_hpp', help='Generate event header', action='store_true', default=False)
parser.add_argument('--gen_event_cpp', help='Generate event cpp', action='store_true', default=False)
parser.add_argument('--gen_eventhandler_hpp', help='Generate eventhandler header', action='store_true', default=False)
parser.add_argument('--gen_eventhandlerfile_hpp', help='Generate eventhandler header for writing to files', action='store_true', default=False)
args = parser.parse_args()
if not os.path.exists(args.output_dir):
MakeDir(args.output_dir)
proto_filename = args.proto
proto_private_filename = args.proto_private
for f in args.protos:
if not os.path.exists(f):
print('Error: Could not find proto file %s' % f, file=sys.stderr)
return 1
(output_dir, output_filename) = os.path.split(args.output)
# Parse each proto file and add to protos container
protos = parse_protos(args.protos, args.verbose)
if not output_dir:
output_dir = '.'
files = [
["gen_ar_event.hpp", ""],
["gen_ar_event.cpp", ""],
["gen_ar_eventhandler.hpp", "gen_ar_event.hpp"],
["gen_ar_eventhandlerfile.hpp", "gen_ar_eventhandler.hpp"]
]
#print('output_dir = %s' % output_dir, file=sys.stderr)
#print('output_filename = %s' % output_filename, file=sys.stderr)
if not os.path.exists(proto_filename):
print('Error: Could not find proto file %s' % proto_filename, file=sys.stderr)
return 1
if not os.path.exists(proto_private_filename):
print('Error: Could not find private proto file %s' % proto_private_filename, file=sys.stderr)
return 1
final_output_dir = output_dir
MakeDir(final_output_dir)
output_dir = MakeTmpDir('_codegen')
protos = {}
protos['events'] = {} # event dictionary containing events with their fields
protos['event_names'] = [] # needed to keep events in order parsed. dict is not ordered.
protos['enums'] = {}
protos['enum_names'] = []
parse_protos(protos, proto_filename)
parse_protos(protos, proto_private_filename)
rval = 0
try:
# Delete existing files
for f in files:
filename = f[0]
output_fullpath = os.path.join(args.output_dir, filename)
if os.path.exists(output_fullpath):
if args.verbose:
print("Deleting existing file: %s" % output_fullpath)
os.remove(output_fullpath)
# Generate files from templates
print("Generating c++ from proto files...")
for f in files:
filename = f[0]
event_header = f[1]
# Generate event header
if args.gen_event_hpp:
curdir = os.path.dirname(os.path.abspath(__file__))
template_file = os.path.join(curdir, 'templates', filename)
output_fullpath = os.path.join(args.output_dir, filename)
template_file = os.sep.join([curdir, 'templates', 'gen_ar_event.hpp'])
output_fullpath = os.sep.join([output_dir, output_filename])
if args.verbose:
print("Generating: %s" % output_fullpath)
MakoTemplateWriter.to_file(template_file, output_fullpath,
cmdline=sys.argv,
filename=filename,
protos=protos,
event_header=event_header)
filename=output_filename,
protos=protos)
except Exception as e:
print(e)
# Generate event implementation
if args.gen_event_cpp:
curdir = os.path.dirname(os.path.abspath(__file__))
template_file = os.sep.join([curdir, 'templates', 'gen_ar_event.cpp'])
output_fullpath = os.sep.join([output_dir, output_filename])
MakoTemplateWriter.to_file(template_file, output_fullpath,
cmdline=sys.argv,
filename=output_filename,
protos=protos)
# Generate event handler header
if args.gen_eventhandler_hpp:
curdir = os.path.dirname(os.path.abspath(__file__))
template_file = os.sep.join([curdir, 'templates', 'gen_ar_eventhandler.hpp'])
output_fullpath = os.sep.join([output_dir, output_filename])
MakoTemplateWriter.to_file(template_file, output_fullpath,
cmdline=sys.argv,
filename=output_filename,
event_header='gen_ar_event.hpp',
protos=protos)
# Generate event handler header
if args.gen_eventhandlerfile_hpp:
curdir = os.path.dirname(os.path.abspath(__file__))
template_file = os.sep.join([curdir, 'templates', 'gen_ar_eventhandlerfile.hpp'])
output_fullpath = os.sep.join([output_dir, output_filename])
MakoTemplateWriter.to_file(template_file, output_fullpath,
cmdline=sys.argv,
filename=output_filename,
event_header='gen_ar_eventhandler.hpp',
protos=protos)
rval = CopyDirFilesIfDifferent(output_dir, final_output_dir)
except:
rval = 1
finally:
DeleteDirTree(output_dir)
return rval
if __name__ == '__main__':
sys.exit(main())

View file

@ -162,7 +162,7 @@ def parse_ir_builder(input_file):
func_name == 'CreateGEP' or
func_name == 'CreateLoad' or
func_name == 'CreateMaskedLoad' or
func_name == 'CreateStore' or
func_name == 'CreateStore' or
func_name == 'CreateMaskedStore' or
func_name == 'CreateElementUnorderedAtomicMemCpy'):
ignore = True

View file

@ -72,8 +72,10 @@ foreach x : [['gen_ar_event.hpp', '--gen_event_hpp'],
command : [
prog_python,
'@INPUT0@',
'--proto', '@INPUT1@', '@INPUT2@',
'--output-dir', meson.current_build_dir(),
'--proto', '@INPUT1@',
'--proto_private', '@INPUT2@',
'--output', '@OUTPUT@',
x[1],
],
depend_files : files(
join_paths('templates', x[0]),

View file

@ -68,14 +68,11 @@ namespace ArchRast
#pragma pack(push, 1)
struct ${name}Data
{<%
fields = protos['events'][name]['fields'] %>
field_names = protos['events'][name]['field_names']
field_types = protos['events'][name]['field_types'] %>
// Fields
% for i in range(len(fields)):
% if fields[i]['size'] > 1:
${fields[i]['type']} ${fields[i]['name']}[${fields[i]['size']}];
% else:
${fields[i]['type']} ${fields[i]['name']};
% endif
% for i in range(len(field_names)):
${field_types[i]} ${field_names[i]};
% endfor
};
#pragma pack(pop)
@ -85,44 +82,24 @@ namespace ArchRast
//////////////////////////////////////////////////////////////////////////
struct ${name} : Event
{<%
fields = protos['events'][name]['fields'] %>
field_names = protos['events'][name]['field_names']
field_types = protos['events'][name]['field_types'] %>
${name}Data data;
// Constructor
${name}(
% for i in range(len(fields)):
% if i < len(fields)-1:
% if fields[i]['size'] > 1:
${fields[i]['type']}* ${fields[i]['name']},
uint32_t ${fields[i]['name']}_size,
% else:
${fields[i]['type']} ${fields[i]['name']},
% endif
% for i in range(len(field_names)):
% if i < len(field_names)-1:
${field_types[i]} ${field_names[i]},
% endif
% if i == len(fields)-1:
% if fields[i]['size'] > 1:
${fields[i]['type']}* ${fields[i]['name']},
uint32_t ${fields[i]['name']}_size
% else:
${fields[i]['type']} ${fields[i]['name']}
% endif
% if i == len(field_names)-1:
${field_types[i]} ${field_names[i]}
% endif
% endfor
)
{
% for i in range(len(fields)):
% if fields[i]['size'] > 1:
% if fields[i]['type'] == 'char':
// Copy size of string (null-terminated) followed by string into entire buffer
SWR_ASSERT(${fields[i]['name']}_size + 1 < ${fields[i]['size']} - sizeof(uint32_t), "String length must be less than size of char buffer - size(uint32_t)!");
memcpy(data.${fields[i]['name']}, &${fields[i]['name']}_size, sizeof(uint32_t));
strcpy_s(data.${fields[i]['name']} + sizeof(uint32_t), ${fields[i]['name']}_size + 1, ${fields[i]['name']});
% else:
memcpy(data.${fields[i]['name']}, ${fields[i]['name']}, ${fields[i]['name']}_size);
% endif
% else:
data.${fields[i]['name']} = ${fields[i]['name']};
% endif
% for i in range(len(field_names)):
data.${field_names[i]} = ${field_names[i]};
% endfor
}

View file

@ -559,7 +559,7 @@ static SIMDINLINE Float SIMDCALL
//
// SELECT4(src, control) {
// CASE(control[1:0])
// 0 : tmp[127:0] : = src[127:0]
// 0: tmp[127:0] : = src[127:0]
// 1 : tmp[127:0] : = src[255:128]
// 2 : tmp[127:0] : = src[383:256]
// 3 : tmp[127:0] : = src[511:384]