swr/rast: Separate event types to public and private

Split into two proto files and modify appropriate build rules for
configure / scons / meson builds.

There are private internal events (proxy) that communicate information
from rasterizer to ArchRast. ArchRast can use these events to calculate
a final answer and then emit other public events which will be saved to
file. Users will use the public proto file and not the private one.

Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
George Kyriazis 2018-01-31 01:09:53 -06:00
parent e48dd2489c
commit 0420b2be89
7 changed files with 155 additions and 119 deletions

View File

@ -140,37 +140,41 @@ rasterizer/jitter/gen_builder_x86.hpp: rasterizer/codegen/gen_llvm_ir_macros.py
--output rasterizer/jitter \
--gen_x86_h
rasterizer/archrast/gen_ar_event.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.hpp rasterizer/archrast/events.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 \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_event.hpp \
--gen_event_h
--gen_event_hpp
rasterizer/archrast/gen_ar_event.cpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.cpp rasterizer/archrast/events.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 \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_event.cpp \
--gen_event_cpp
rasterizer/archrast/gen_ar_eventhandler.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandler.hpp rasterizer/archrast/events.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 \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_eventhandler.hpp \
--gen_eventhandler_h
--gen_eventhandler_hpp
rasterizer/archrast/gen_ar_eventhandlerfile.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp rasterizer/archrast/events.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 \
--proto_private $(srcdir)/rasterizer/archrast/events_private.proto \
--output rasterizer/archrast/gen_ar_eventhandlerfile.hpp \
--gen_eventhandlerfile_h
--gen_eventhandlerfile_hpp
rasterizer/core/backends/gen_BackendPixelRate0.cpp \
rasterizer/core/backends/gen_BackendPixelRate1.cpp \

View File

@ -36,6 +36,7 @@ if not env['msvc'] :
])
swrroot = '#src/gallium/drivers/swr/'
srcroot = Dir(swrroot).abspath
bldroot = Dir('.').abspath
env.CodeGenerate(
@ -96,8 +97,10 @@ 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 --output $TARGET --gen_event_h'
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')
Depends('rasterizer/jitter/gen_state_llvm.h',
swrroot + 'rasterizer/codegen/templates/gen_ar_event.hpp')
@ -105,8 +108,10 @@ 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 --output $TARGET --gen_event_cpp'
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')
Depends('rasterizer/jitter/gen_state_llvm.h',
swrroot + 'rasterizer/codegen/templates/gen_ar_event.cpp')
@ -114,8 +119,10 @@ 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 --output $TARGET --gen_eventhandler_h'
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')
Depends('rasterizer/jitter/gen_state_llvm.h',
swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandler.hpp')
@ -123,8 +130,10 @@ 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 --output $TARGET --gen_eventhandlerfile_h'
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')
Depends('rasterizer/jitter/gen_state_llvm.h',
swrroot + 'rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp')

View File

@ -151,6 +151,7 @@ files_swr_arch = files(
swr_context_files = files('swr_context.h')
swr_state_files = files('rasterizer/core/state.h')
swr_event_proto_files = files('rasterizer/archrast/events.proto')
swr_event_pproto_files = files('rasterizer/archrast/events_private.proto')
swr_gen_backend_files = files('rasterizer/codegen/templates/gen_backend.cpp')
swr_gen_rasterizer_files = files('rasterizer/codegen/templates/gen_rasterizer.cpp')
swr_gen_header_init_files = files('rasterizer/codegen/templates/gen_header_init.hpp')

View File

@ -131,72 +131,6 @@ event BackendStatsEvent
};
event EarlyDepthStencilInfoSingleSample
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event EarlyDepthStencilInfoSampleRate
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event EarlyDepthStencilInfoNullPS
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event LateDepthStencilInfoSingleSample
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event LateDepthStencilInfoSampleRate
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event LateDepthStencilInfoNullPS
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event EarlyDepthInfoPixelRate
{
uint64_t depthPassCount;
uint64_t activeLanes;
};
event LateDepthInfoPixelRate
{
uint64_t depthPassCount;
uint64_t activeLanes;
};
event BackendDrawEndEvent
{
uint32_t drawId;
};
event FrontendDrawEndEvent
{
uint32_t drawId;
};
event EarlyZSingleSample
{
uint32_t drawId;
@ -310,13 +244,6 @@ event LateOmStencil
uint64_t failCount;
};
event GSPrimInfo
{
uint64_t inputPrimCount;
uint64_t primGeneratedCount;
uint64_t vertsInput;
};
event GSInputPrims
{
uint32_t drawId;
@ -335,35 +262,12 @@ event GSVertsInput
uint64_t vertsInput;
};
event ClipVertexCount
{
uint64_t vertsPerPrim;
uint64_t primMask;
};
//REMOVE AND REPLACE
event FlushVertClip
{
uint32_t drawId;
};
event VertsClipped
{
uint32_t drawId;
uint64_t clipCount;
};
event TessPrimCount
{
uint64_t primCount;
};
//REMOVE AND REPLACE
event TessPrimFlush
{
uint32_t drawId;
};
event TessPrims
{
uint32_t drawId;

View File

@ -0,0 +1,109 @@
# Copyright (C) 2018 Intel Corporation. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
# Provides definitions for private internal events that are only used internally
# to rasty for communicating information between Rasty and Archrast. One goal for
# ArchRast is to not pollute the Rasty code with lots of calculations, etc. that
# are needed to compute per draw statistics, etc.
event EarlyDepthStencilInfoSingleSample
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event EarlyDepthStencilInfoSampleRate
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event EarlyDepthStencilInfoNullPS
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event LateDepthStencilInfoSingleSample
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event LateDepthStencilInfoSampleRate
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event LateDepthStencilInfoNullPS
{
uint64_t depthPassMask;
uint64_t stencilPassMask;
uint64_t coverageMask;
};
event EarlyDepthInfoPixelRate
{
uint64_t depthPassCount;
uint64_t activeLanes;
};
event LateDepthInfoPixelRate
{
uint64_t depthPassCount;
uint64_t activeLanes;
};
event BackendDrawEndEvent
{
uint32_t drawId;
};
event FrontendDrawEndEvent
{
uint32_t drawId;
};
event ClipVertexCount
{
uint64_t vertsPerPrim;
uint64_t primMask;
};
event TessPrimCount
{
uint64_t primCount;
};
event GSPrimInfo
{
uint64_t inputPrimCount;
uint64_t primGeneratedCount;
uint64_t vertsInput;
};

View File

@ -77,19 +77,13 @@ def parse_enums(lines, idx, event_dict):
event_dict['names'] = enum_names
return idx
def parse_protos(filename):
protos = {}
def parse_protos(protos, filename):
with open(filename, 'r') as f:
lines=f.readlines()
idx = 0
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'] = []
eventId = 0
raw_text = []
while idx < len(lines):
@ -118,13 +112,12 @@ def parse_protos(filename):
protos['enums'][enum_name] = {}
idx = parse_enums(lines, idx, protos['enums'][enum_name])
return protos
def main():
# Parse args...
parser = ArgumentParser()
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)
@ -133,6 +126,7 @@ def main():
args = parser.parse_args()
proto_filename = args.proto
proto_private_filename = args.proto_private
(output_dir, output_filename) = os.path.split(args.output)
@ -146,7 +140,18 @@ def main():
print('Error: Could not find proto file %s' % proto_filename, file=sys.stderr)
return 1
protos = parse_protos(proto_filename)
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
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)
# Generate event header
if args.gen_event_hpp:

View File

@ -67,10 +67,14 @@ foreach x : [['gen_ar_event.hpp', '--gen_event_hpp'],
['gen_ar_eventhandlerfile.hpp', '--gen_eventhandlerfile_h']]
files_swr_common += custom_target(
x[0],
input : ['gen_archrast.py', swr_event_proto_files],
input : ['gen_archrast.py', swr_event_proto_files, swr_event_pproto_files],
output : x[0],
command : [
prog_python2, '@INPUT0@', '--proto', '@INPUT1@', '--output', '@OUTPUT@',
prog_python2,
'@INPUT0@',
'--proto', '@INPUT1@',
'--proto_private', '@INPUT2@',
'--output', '@OUTPUT@',
x[1],
],
depend_files : files(