Reviewed-by: Bruce Cherniak <bruce.chern...@intel.com> > On Oct 26, 2016, at 7:08 PM, George Kyriazis <george.kyria...@intel.com> > wrote: > > This allows the post-processor to easily detect the API thread and to > process frame information. The frame information is needed to > optimized how data is processed from worker threads. > --- > src/gallium/drivers/swr/rasterizer/archrast/events.proto | 8 ++++++++ > src/gallium/drivers/swr/rasterizer/core/api.cpp | 8 +++++--- > src/gallium/drivers/swr/rasterizer/scripts/gen_archrast.py | 5 +++++ > .../drivers/swr/rasterizer/scripts/templates/ar_event_h.template | 3 ++- > .../rasterizer/scripts/templates/ar_eventhandlerfile_h.template | 4 ++++ > 5 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/src/gallium/drivers/swr/rasterizer/archrast/events.proto > b/src/gallium/drivers/swr/rasterizer/archrast/events.proto > index 4ddb7c9..107d7a3 100644 > --- a/src/gallium/drivers/swr/rasterizer/archrast/events.proto > +++ b/src/gallium/drivers/swr/rasterizer/archrast/events.proto > @@ -97,6 +97,14 @@ event End > uint32_t count; > }; > > +event ThreadStartApiEvent > +{ > +}; > + > +event ThreadStartWorkerEvent > +{ > +}; > + > event DrawInstancedEvent > { > uint32_t drawId; > diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp > b/src/gallium/drivers/swr/rasterizer/core/api.cpp > index 2269240..e67ede2 100644 > --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp > +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp > @@ -112,10 +112,11 @@ HANDLE SwrCreateContext( > pContext->ppScratch = new uint8_t*[pContext->NumWorkerThreads]; > pContext->pStats = new SWR_STATS[pContext->NumWorkerThreads]; > > -#if KNOB_ENABLE_AR > +#if defined(KNOB_ENABLE_AR) > // Setup ArchRast thread contexts which includes +1 for API thread. > pContext->pArContext = new HANDLE[pContext->NumWorkerThreads+1]; > pContext->pArContext[pContext->NumWorkerThreads] = > ArchRast::CreateThreadContext(); > + _AR_EVENT(pContext->pArContext[pContext->NumWorkerThreads], > ThreadStartApiEvent()); > #endif > > // Allocate scratch space for workers. > @@ -133,9 +134,10 @@ HANDLE SwrCreateContext( > pContext->ppScratch[i] = (uint8_t*)AlignedMalloc(32 * > sizeof(KILOBYTE), KNOB_SIMD_WIDTH * 4); > #endif > > -#if KNOB_ENABLE_AR > +#if defined(KNOB_ENABLE_AR) > // Initialize worker thread context for ArchRast. > pContext->pArContext[i] = ArchRast::CreateThreadContext(); > + _AR_EVENT(pContext->pArContext[i], ThreadStartWorkerEvent()); > #endif > } > > @@ -383,7 +385,7 @@ void SwrDestroyContext(HANDLE hContext) > AlignedFree(pContext->ppScratch[i]); > #endif > > -#if KNOB_ENABLE_AR > +#if defined(KNOB_ENABLE_AR) > ArchRast::DestroyThreadContext(pContext->pArContext[i]); > #endif > } > diff --git a/src/gallium/drivers/swr/rasterizer/scripts/gen_archrast.py > b/src/gallium/drivers/swr/rasterizer/scripts/gen_archrast.py > index 1b89a91..901d6d8 100644 > --- a/src/gallium/drivers/swr/rasterizer/scripts/gen_archrast.py > +++ b/src/gallium/drivers/swr/rasterizer/scripts/gen_archrast.py > @@ -49,6 +49,8 @@ def parse_event_fields(lines, idx, event_dict): > 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): > @@ -60,11 +62,14 @@ def parse_event_fields(lines, idx, event_dict): > 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['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): > diff --git > a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template > b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template > index e5c94c7..b0e6796 100644 > --- a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template > +++ b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template > @@ -86,9 +86,10 @@ namespace ArchRast > ${field_types[i]} ${field_names[i]}, > % endif > % if i == len(field_names)-1: > - ${field_types[i]} ${field_names[i]}) > + ${field_types[i]} ${field_names[i]} > % endif > % endfor > + ) > { > % for i in range(len(field_names)): > data.${field_names[i]} = ${field_names[i]}; > diff --git > a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template > > b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template > index 1924b15..6a62f17 100644 > --- > a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template > +++ > b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template > @@ -83,7 +83,11 @@ namespace ArchRast > % for name in protos['event_names']: > virtual void handle(${name}& event) > { > +% if protos['events'][name]['num_fields'] == 0: > + write(${protos['events'][name]['event_id']}, (char*)&event.data, > 0); > +% else: > write(${protos['events'][name]['event_id']}, (char*)&event.data, > sizeof(event.data)); > +%endif > } > % endfor > > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev